如何知道最新的master提交是否已被推送到远程?

时间:2014-02-24 13:35:48

标签: git github merge branch commit

我已将一个分支合并到主人,现在我可以在我的git log

中看到

一段时间过去了,现在我想知道我以前是否也将master(带有该提交)推送到遥控器。我怎么知道它是否被推了?

我可以想到一些解决方法,例如在其他地方重新列入存储库,或重置和检查然后重新合并,但我觉得可能有一些更简单的答案。

这与How can I know in git if a branch has been already merged into master?不同,因为我知道它已被合并,只是不知道远程推送。

6 个答案:

答案 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