首页 > 解决方案 > 将被推送的 2 个提交是什么?

问题描述

由于在跨两个不同设备的同一分支中开发,每个设备之间有大量的推送和拉取,以及来自 master 的合并(许多其他提交进来)。我的第二台设备上的 Git 存储库处于以下状态:

% git status
On branch user/selbie/amazingfeature
Your branch is ahead of 'origin/user/selbie/amazingfeature' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

问题是我不知道这两个提交可能是什么。我最近将分支与另一个 repo 上的 master 合并,并将这些更改拉到第二个设备。我本来希望回购在这一点上是同步的。

搜索堆栈溢出,大多数像这样的答案建议我应该输入这个:

% git diff origin/user/selbie/amazingfeature user/selbie/amazingfeature

但它不会打印任何结果。git push在盲目做之前,如何获得本地和远程之间的差异或提交?

标签: git

解决方案


如果我们添加回这些细节(这需要更多地了解它们):

...在同一分支中跨两个不同的设备进行开发,每个设备之间有很多推和拉...

我们也许能够提出一个更狭隘、不那么笼统的答案。但只回答一般问题更容易。

什么......提交......会被推送[如果我跑了]?git push remote name

为了弄清楚这一点,第一步是确保您自己的本地存储库相对于 named 是真正最新的remote,我们可以使用. 这可能什么都不做,或者它可能会在我们的本地存储库中更新。1 如果确实更新了,我们可能必须重新计算提交,因为它可能不再是两个提交,但无论如何我们现在可以轻松地找到我们拥有的提交集,他们没有,这会发送:git fetch remoteorigin/nameorigin/namegit push

git log [options] origin/<name>..<name>

如果当前分支是name并且是上游,我们可以在这里简称。添加和/或让 Git 绘制我们要发送的提交的图表。origin/namegit log @{u}..--graph--oneline

正如0x5453 评论的那样,如果您git diff什么也没显示(并且如果git fetch没有/不更新origin/user/selbie/amazingfeature),则很可能您有两次提交,其中第二次提交只是取消了第一次提交所做的任何事情。


1如果我们配置的东西特别奇怪,它可能会更新一些其他名称。假设我们没有进行奇怪的配置,即 Git 将按照正常方式工作。:-)


推荐阅读