检查本地git仓库是否在远程前/后
我正在开发一个git插件,并且我需要使用命令行知道本地repo何时发生更改(可以提交更改),提前(可以推送到远程)还是后面(可以从远程提取)。
这是我迄今为止所做的:
可以提交?
如果git diff-index --name-only --ignore-submodules HEAD --
返回某些内容,那么是的,这些更改会提交。
可以推?
如果git status -sb
在输出中包含前面的单词,那么是的,有提交推送。
可以拉?
还没有实施。
可以提交? 部分似乎正常工作。 可以推? 只适用于主分支,这是一个巨大的问题。
我该如何安全地检查每个分支上的git repo是否有更改提交,提交或需要git pull
?
你可以使用git merge-base
和git rev-parse
来实现这一点。 如果git merge-base <branch> <remote branch>
返回与git rev-parse <remote branch>
,那么你的本地分支就在前面。 如果它返回与git rev-parse <branch>
,那么你的本地分支在后面。 如果merge-base
返回的是不同于rev-parse
答案,那么分支已经发生分歧,您需要进行合并。
尽管如此,在检查分支之前最好先做一次git fetch
,否则,您是否需要拉动的决心将会过时。 您还需要验证您检查的每个分支都有远程跟踪分支。 你可以使用git for-each-ref --format='%(upstream:short)' refs/heads/<branch>
来做到这一点。 该命令将返回<branch>
的远程跟踪分支或空字符串(如果它没有)。 在SO的某个地方有一个不同的版本,如果分支没有远程追踪分支,它将返回一个错误,这可能对你的目的更有用。
最后,我在我的C ++ 11 git-ws插件中实现了这一点。
string currentBranch = run("git rev-parse --abbrev-ref HEAD");
bool canCommit = run("git diff-index --name-only --ignore-submodules HEAD --").empty();
bool canPush = stoi(run("git rev-list HEAD...origin/" + currentBranch + " --ignore-submodules --count")[0]) > 0;
似乎工作到目前为止。 canPull
仍然需要测试和实施。
说明:
currentBranch
获取控制台输出,它是当前分支名称的一个字符串 canCommit
获取控制台是否输出某些内容(当前更改和HEAD之间的区别,忽略子模块) canPush
获取origin / currentBranch
和本地回购之间的变化计数 - 如果> 0
,则可以推送本地回购 感谢@Trebor我只是为了这个目的扔了一个简单的鱼类功能:
#! /usr/bin/fish
#
# Echos (to stdout) whether your branch is up-to-date, behind, ahead or diverged from another branch.
# Don't forget to fetch before calling.
#
# @param branch
# @param otherbranch
#
# @echo string up-to-date/behind/ahead/diverged
#
# @example
#
# # if master is ahead of origin/master you can find out like this:
# #
# if test ( branch-status master origin/master ) = ahead
#
# echo "We should push"
#
# end
#
function branch-status
set -l a $argv[ 1 ]
set -l b $argv[ 2 ]
set -l base ( git merge-base $a $b )
set -l aref ( git rev-parse $a )
set -l bref ( git rev-parse $b )
if [ $aref = $bref ]; echo up-to-date
else if [ $aref = $base ]; echo behind
else if [ $bref = $base ]; echo ahead
else ; echo diverged
end
end
链接地址: http://www.djcxy.com/p/31761.html