我已将一个分支合并到主人,现在我可以在我的git log
一段时间过去了,现在我想知道我以前是否也将master(带有该提交)推送到遥控器。我怎么知道它是否被推了?
我可以想到一些解决方法,例如在其他地方重新列入存储库,或重置和检查然后重新合并,但我觉得可能有一些更简单的答案。
这与How can I know in git if a branch has been already merged into master?不同,因为我知道它已被合并,只是不知道远程推送。
答案 0 :(得分:30)
待办事项
> 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
指向最后一次推送到源的提交。但是,您的分支是ahead of 'origin/master'
,这意味着您有一个在上次推送提交后创建的本地提交。
如果您感兴趣的提交不是最新的,那么您可以
> git log --decorate --oneline
查明有问题的提交是在origin/master
指向的提交之前还是之后
如果提交之后(日志中的更高位置)origin/master
,那么它就没有被推送。
答案 1 :(得分:9)
如果您进行了多次提交并且不确定其中哪一项已被推送到远程,请尝试以下操作:
git log origin/<remote-branch>..<local-branch>
示例:
git log origin/master..master
这将列出本地分支中尚未被推送到所提到的远程分支的所有提交。
答案 2 :(得分:6)
以编程方式执行此操作的解决方案:
test "$(git rev-parse @{u})" = "$(git rev-parse HEAD)"
您可能还想检查您的本地目录是否干净,例如没有更改未提交的文件:
test -z "$(git status --porcelain)"
如果您希望在其中一个规则不成立时退出脚本,则可以使用以下代码:
test your_condition || (echo "ERROR: you have local changes"; exit 1)
答案 3 :(得分:3)
我建议你运行这个:
$ 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
这将显示您前方或后方的分支。
我发布了这个,因为没有其他答案提到获取远程数据,这一步是至关重要的。
答案 4 :(得分:2)
你可以使用git log --graph --all --decorate
,它会显示每个ref所在的位置(HEAD,master,origin / master等)。
答案 5 :(得分:0)
试试这个。 git branch -r --contains <sha1>
对于我的存储库中的提交,我可以看到它存在于远程开发分支
上git branch -r --contains 7914e54ea7e30c7f446e791df66bd3a5805c978a
origin/develop