git 如何知道对主服务器的最新提交是否已推送到远程服务器?

e1xvtsh3  于 2023-02-11  发布在  Git
关注(0)|答案(6)|浏览(351)

我已经将一个分支合并到master中,现在可以在git log中看到
一段时间过去了,现在我想知道我之前是否也将master(使用该提交)推送到了远程控制器。我怎么知道它是否已经被推送到了远程控制器?
我可以想到一些变通方法,比如在其他地方重新克隆存储库,或者重置并检查,然后重新合并,但我觉得可能有一个更简单的答案。
顺便说一句,这是不同的How can I know in git if a branch has been already merged into master?,因为我知道它已经合并,只是不知道远程推送。

t2a7ltrp

t2a7ltrp1#

> 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之后(在日志中高于origin/master),则它没有被推送。

4jb9z9bj

4jb9z9bj2#

如果你已经做了多个提交,并且不确定哪个提交被推送到了远程提交,试试这个:

git log origin/<remote-branch>..<local-branch>

示例:

git log origin/master..master

这会列出本地分支中所有没有被推送到远程分支的提交。

ua4mk5z4

ua4mk5z43#

以编程方式(例如,在脚本中):

git merge-base --is-ancestor HEAD @{u}

您可能还需要检查本地目录是否干净,例如,没有未提交的文件更改:

test -z "$(git status --porcelain)"
ozxc1zmp

ozxc1zmp4#

您可以使用git log --graph --all --decorate,它将显示每个引用的位置(HEAD、master、origin/master等)

zvokhttg

zvokhttg5#

我建议你运行这个:

$ 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

这将显示您在哪些分支上领先或落后。
我发布这个是因为其他答案都没有提到获取远程数据,这一步是至关重要的。

9o685dep

9o685dep6#

试试这个git branch -r --contains <sha1>
对于我的存储库中的提交,我可以看到它存在于remote develop分支上

git branch  -r --contains 7914e54ea7e30c7f446e791df66bd3a5805c978a
origin/develop

相关问题