如何在拉取之前检查local和github之间的差异

shi*_*hin 107 git github

在使用pull之前,我想检查一下我的local和github master之间是否有任何差异.

我该怎么做?

Mar*_*air 219

git pull实际上相当于运行git fetch然后git merge.在git fetch更新你的所谓的"远程跟踪分支" -通常这些都是那些看起来像origin/master,github/experiment等你有看到git branch -r.这些类似于远程存储库中分支状态的缓存,当您执行git fetch(或成功git push)时会更新.

所以,假设你有一个叫做originGitHub存储库的远程调用,你可以这样做:

git fetch origin
Run Code Online (Sandbox Code Playgroud)

......然后做:

git diff master origin/master
Run Code Online (Sandbox Code Playgroud)

...为了看到你master和GitHub上的那个之间的区别.如果您对这些差异感到满意,可以将它们合并git merge origin/master,假设master是您当前的分支.

就个人而言,我认为这样做git fetchgit merge分别通常是一个好主意.

  • 如果您已经设置了远程跟踪,那么命令会变得更简单:'git fetch'来获取,'git diff .. @ {u}'来查看差异.我永远不能保持原点,主人和原点/主人,所以短命令有很多帮助 (3认同)
  • 我想你的方法,并没有得到来自`git的差异主产地/ master`的和它的对立面,而是'混帐status`输出告诉我,'你的分支进取"的由来/主"的4 commits.`这是怎么回事? (3认同)

bra*_*sch 37

如果您对git diff输出的详细信息不感兴趣,您可以直接运行git cherry,这将输出您的远程跟踪分支在您的本地分支之前提交的提交列表.

例如:

git fetch origin
git cherry master origin/master
Run Code Online (Sandbox Code Playgroud)

将输出如下:

+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1
+ a4870f9fbde61d2d657e97b72b61f46d1fd265a9
Run Code Online (Sandbox Code Playgroud)

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

这也适用于另一种方式:

    git cherry origin/master master
Run Code Online (Sandbox Code Playgroud)

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

  • 您还可以使用详细选项 `-v` 来显示提交消息。例如:`git cherry -v origin/master master` 将输出:`+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 Fixed bug` (4认同)
  • 谢谢,正是我需要的。只是为了明确这一点:如果 gitcherry 结果为空,那么就没有什么可进行樱桃采摘,并且我的本地存储库是最新的,对吧!? (2认同)

pet*_* gz 9

另一个有用的命令(在git fetch之后)是:

git log origin/master ^master
Run Code Online (Sandbox Code Playgroud)

这显示了origin/master中的提交但不是master中的提交.在执行git pull时,您也可以在对面执行此操作,以检查将提交给远程的提交.