在使用 pull 之前,我想检查一下我的本地主机和 GitHub 主机之间是否存在差异。
我该怎么做?
git pull实际上相当于运行 git fetch和 git merge。git fetch更新所谓的“远程跟踪分支”——通常这些分支看起来像 origin/master、 github/experiment等等,你可以在 git branch -r中看到。这类似于远程存储库中分支状态的缓存,在执行 git fetch(或成功执行 git push)时更新这些状态。
git pull
git fetch
git merge
origin/master
github/experiment
git branch -r
git push
因此,假设您有一个称为 origin的远程程序,它引用了您的 GitHub 存储库,您可以这样做:
origin
git fetch origin
然后..:
git diff master origin/master
看看你的 master和 GitHub 上的有什么不同。如果您对这些差异感到满意,可以将它们与 git merge origin/master合并,假设 master是您当前的分支。
master
git merge origin/master
就个人而言,我认为分别做 git fetch和 git merge一般是 好主意。
如果您对 git diff输出的细节不感兴趣,您可以运行 git cherry,它将输出远程跟踪分支在本地分支之前的提交列表。
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时以相反的方式执行此操作,以检查将向远程提交什么内容。