在使用 pull 命令之前,我想要检查一下我的本地版本和 GitHub 主分支之间是否存在差异。如何操作呢?
git pull
的作用等同于运行git fetch
,再接着运行git merge
。其中,git fetch
会更新你所谓的“远程跟踪分支”,通常这些分支看起来像origin/master
、github/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 fetch
和 git merge
命令通常是一个好主意。
git diff
的输出内容不感兴趣,你可以直接运行 git cherry
命令,该命令会输出一个列表,其中包含了你的远程跟踪分支领先于你的本地分支的提交记录。git fetch origin
git cherry master origin/master
会输出类似以下内容:
+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1
+ a4870f9fbde61d2d657e97b72b61f46d1fd265a9
这表示我的远程跟踪分支中有两个提交尚未合并到我的本地分支。
同样,反过来也是一样的:
git cherry origin/master master
它会显示你尚未推送到远程仓库的本地提交列表。-v
选项来显示提交信息。
例如:git cherry -v origin/master master
将输出:+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 修复了错误
。 - Yoluk在执行 git fetch
命令后,另一个有用的命令是:
git log origin/master ^master
这显示了在origin/master中存在的提交,但不在master中。
在执行git pull
时,你也可以以相反的方式进行,以检查将提交到远程的提交。
git diff master origin/master
以及相反的命令,但是没有输出结果。但是当我运行git status
命令时,它告诉我,“Your branch is ahead of 'origin/master' by 4 commits.” 发生了什么? - Jasongit 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