我已将一个分支合并到主分支(master),现在我可以在我的git log
中看到它。
一段时间过去了,现在我想知道之前是否也推送(master)到远程仓库,如何判断它是否已经被推送了呢?
我可以想到一些解决方法,例如在其他地方重新克隆存储库,或者重置然后检查再重新合并,但我感觉可能有更简单的答案。
顺便提一下,这与如何在git中检查一个分支是否已经被合并到主分支(master) 不同,因为我知道它已经被合并,只是不确定远程是否也推送了。
我已将一个分支合并到主分支(master),现在我可以在我的git log
中看到它。
一段时间过去了,现在我想知道之前是否也推送(master)到远程仓库,如何判断它是否已经被推送了呢?
我可以想到一些解决方法,例如在其他地方重新克隆存储库,或者重置然后检查再重新合并,但我感觉可能有更简单的答案。
顺便提一下,这与如何在git中检查一个分支是否已经被合并到主分支(master) 不同,因为我知道它已经被合并,只是不确定远程是否也推送了。
做
> git status
如果输出结果为
# On branch master
nothing to commit, working directory clean
那么你已经推送了当前的提交。
如果输出以
开始,# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
那么你有一个还没有推送到服务器的本地提交。你之所以能看到这个信息是因为远程分支origin/master
指向了上次推送到源仓库的提交。然而,你的分支比'origin/master'要领先,说明你有一个在最后一次推送提交之后创建的本地提交。
如果你感兴趣的提交不是最新的,那么可以执行:
> git log --decorate --oneline
要找出所讨论的提交是否在由origin/master
指向的提交之前还是之后。
如果该提交在origin/master
之后(在日志中更高),则表示它尚未被推送。
git status
时,该行就会消失,即在On branch master
之后立即跟着Untracked files
行。 - Hi-Angelgit status
永远不会提到任何 origin
。 - Klas Mellbourngit branch --set-upstream-to origin/master master
这个命令。当使用git clone
时,git通常会自动设置它,但在我的情况下,是本地创建的代码然后添加了“origin”,所以显然我必须手动调用它。现在我也能看到与远程的区别了。 - Hi-Angel如果您提交了多个commit,但不确定哪一个已经被推送到远程仓库,请尝试以下方法:
git log origin/<remote-branch>..<local-branch>
范例:
git log origin/master..master
这将列出本地分支中所有未推送到所述远程分支的提交记录。通过编程(例如,在脚本中):
git merge-base --is-ancestor HEAD @{u}
您可能还想检查一下本地目录是否干净,例如是否没有未提交的文件更改:
test -z "$(git status --porcelain)"
@{u}
将失败。在这种情况下,请改用git rev-parse refs/remotes/<remote-name>/<remote-branch>
- 例如,如果您的远程命名为“origin”并且要检查其“master”分支,则使用git rev-parse refs/remotes/origin/master
。 - Izzy@{u}
和HEAD
的比较只能告诉你你的HEAD是否恰好与origin上的HEAD相同。如果origin的HEAD现在比你的HEAD多了10个提交,那么你的测试将失败,即使你的HEAD已经被推送了。 - tanager--is-ancestor A B
如果A是B的祖先,则返回0(成功)。当A是上游分支而B是本地分支时,这几乎总是成立的。 - Brecht Machiels$ git fetch --all
Fetching origin
Fetching upstream
$ git branch -v
master ef762af [ahead 3] added attach methods
* testing 4634e21 added -p flag
upstream 1234567 [ahead 1, behind 7] updated README.md
git log --graph --all --decorate
命令,它会显示每个引用所在的位置(HEAD、master、origin/master等)。git branch -r --contains <sha1>
对于我存储库中的提交,我可以看到它存在于远程开发分支中。git branch -r --contains 7914e54ea7e30c7f446e791df66bd3a5805c978a
origin/develop