如何在进行pull操作之前检查本地代码库与GitHub库的差异

129
在使用 pull 命令之前,我想要检查一下我的本地版本和 GitHub 主分支之间是否存在差异。如何操作呢?
3个回答

258

git pull的作用等同于运行git fetch,再接着运行git merge。其中,git 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 命令通常是一个好主意


3
如果你已经设置了远程跟踪,那么命令会变得更加简单:使用'git fetch'获取,使用'git diff ..@{u}'查看差异。我总是无法区分origin、master和origin/master,所以短命令有很大帮助。 - ChrisBob
3
我尝试了你的方法,运行了 git diff master origin/master 以及相反的命令,但是没有输出结果。但是当我运行 git status 命令时,它告诉我,“Your branch is ahead of 'origin/master' by 4 commits.” 发生了什么? - Jason
如果 git status 输出 Your branch is ahead of 'origin/master' by 4 commits.,那么在运行 git diff master origin/master 命令之前,您需要将更改进行暂存和提交 git add . && git commit -m "Initial commit" - Stephen Pham

48
如果你对于 git diff 的输出内容不感兴趣,你可以直接运行 git cherry 命令,该命令会输出一个列表,其中包含了你的远程跟踪分支领先于你的本地分支的提交记录。
例如:
git fetch origin
git cherry master origin/master

会输出类似以下内容:

+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1
+ a4870f9fbde61d2d657e97b72b61f46d1fd265a9

这表示我的远程跟踪分支中有两个提交尚未合并到我的本地分支。

同样,反过来也是一样的:

git cherry origin/master master
它会显示你尚未推送到远程仓库的本地提交列表。

2
谢谢,正是我需要的。只是为了明确一下:如果 git cherry 的结果为空,则没有可供挑选的内容,我的本地仓库就是最新的,对吗?! - eyecatchUp
4
你也可以使用 -v 选项来显示提交信息。 例如:git cherry -v origin/master master 将输出:+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 修复了错误 - Yoluk

13

在执行 git fetch 命令后,另一个有用的命令是:

git log origin/master ^master

这显示了在origin/master中存在的提交,但不在master中。

在执行git pull时,你也可以以相反的方式进行,以检查将提交到远程的提交。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接