在拉取之前,如何检查本地存储库和 GitHub 存储库之间的差异

在使用 pull 之前,我想检查一下我的本地主机和 GitHub 主机之间是否存在差异。

我该怎么做?

152081 次浏览

git pull实际上相当于运行 git fetchgit mergegit fetch更新所谓的“远程跟踪分支”——通常这些分支看起来像 origin/mastergithub/experiment等等,你可以在 git branch -r中看到。这类似于远程存储库中分支状态的缓存,在执行 git fetch(或成功执行 git push)时更新这些状态。

因此,假设您有一个称为 origin的远程程序,它引用了您的 GitHub 存储库,您可以这样做:

git fetch origin

然后..:

git diff master origin/master

看看你的 master和 GitHub 上的有什么不同。如果您对这些差异感到满意,可以将它们与 git merge origin/master合并,假设 master是您当前的分支。

就个人而言,我认为分别做 git fetchgit merge一般是 好主意

如果您对 git diff输出的细节不感兴趣,您可以运行 git cherry,它将输出远程跟踪分支在本地分支之前的提交列表。

例如:

git fetch origin
git cherry master origin/master

将输出如下内容:

+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1
+ a4870f9fbde61d2d657e97b72b61f46d1fd265a9

它表明在我的远程跟踪分支中有两个提交没有合并到我的本地分支中。

另一方面,情况也是如此:

git cherry origin/master master

它将向您显示尚未推送到远程存储库的本地提交列表。

另一个执行此操作的有用命令(在 git fetch之后)是:

git log origin/master ^master

这显示了 产地来源/主管中的提交,但不是 师父中的提交。

您也可以在执行 git pull时以相反的方式执行此操作,以检查将向远程提交什么内容。