如何在git中看到传入的提交?

Ben*_*ack 158 git dvcs

可能重复:
使用Git如何在本地和远程之间找到修改过的文件

如何在git中看到传入的提交?甚至更好,看看我刚刚git fetch/ git pullED?

编辑: 澄清问题:有人告诉我,要获得一些修复,我应该从他们的存储库中提取.我的目标是接受之前了解他们的变化. git pull自动合并,这不是我想要的. git fetch我会在没有合并的情况下抓住它们,但我不确定如何查看我刚刚插入的内容.原始措辞的原因是我通常使用Mercurial,其中命令是hg incoming <repo name here>-a命令,git似乎缺少模拟.

Dus*_*tin 181

incoming 在git中并不是一个直接的映射,因为你可以(我经常这样做)有多个你需要的repos,每个repo都有多个分支.

如果有相当于hg的传入命令,它可能是这样的:

git fetch && git log ..origin/master
Run Code Online (Sandbox Code Playgroud)

也就是说,"从上游获取所有内容,然后将我当前的分支与上游主分支进行比较."

同样,传出将是这样的:

git fetch && git log origin/master..
Run Code Online (Sandbox Code Playgroud)

在实践中,我只是手动输入(即使我为其中一个创建了别名),因为很容易让很多本地分支跟踪并被许多远程分支跟踪,并且可以毫不费力地将它们保持在一起.

  • 更一般地说,如果您不在主分支上,请使用`git log .. @ {u}`来查看当前本地分支的上游远程跟踪分支上的提交. (25认同)
  • 你也可以使用`git diff --stat origin/master`来查看成功合并后`git pull`显示的diffstat. (7认同)
  • 感谢您的回答@Dustin!请问,我不太明白`log ..origin/master` 背后的魔力,这些点代表什么? (3认同)
  • @sschuberth这应该是答案. (2认同)

Gre*_*ill 86

您可能也感兴趣,git whatchanged它可以很好地概述在某些提交范围内所做的更改.

如果你想回顾一下你即将拉开,做git fetch第一,只有更新本地跟踪分行远程仓库(而不是任何的你的分支机构),然后使用说明你的新提交的任何命令你"重新拉.例如:

git whatchanged ..origin
Run Code Online (Sandbox Code Playgroud)

这是通过"起源"显示"我现在所在的共同祖先"与"起源"之间的提交的简写.

  • 从git联机帮助页:&gt;鼓励新用户使用git-log [1]。whatchanged命令本质上与git-log [1]相同,但是默认情况下显示原始格式diff输出并跳过合并。&gt;命令保留主要是出于历史原因;在通过阅读Linux内核邮件列表发明git log之前很久就学过Git的许多人的手指都受过训练来键入它。 (2认同)

Net*_*rat 13

您可能想要检查两个存储库之间的差异.假设你有一个本地分支'master'和一个远程跟踪分支'origin/master',其他人提交他们的代码,你可以得到关于两个分支的差异的不同统计数据:

git diff --summary master origin/master

git diff --stat master origin/master

git diff --numstat master origin/master

git diff --dirstat master origin/master

git diff --shortstat master origin/master

git diff --name-only master origin/master

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

  • 确实如此,但我觉得 Netzpirat 已经很接近了;如果这向我显示日志而不是差异,那就完美了。 (2认同)

小智 6

当有人告诉你拉,他们会给你一个repo URL和一个分支(默认为master).

我只是这样做

git fetch URL branch
Run Code Online (Sandbox Code Playgroud)

然后是一个(按优先顺序递减):

# note 3 dots in next 3 commands
gitk HEAD...FETCH_HEAD
    # shows all commits on both sides since the "fork" point
gitk --cherry-pick HEAD...FETCH_HEAD
    # as above but skips identical patches so you really see the differences
git log --graph --boundary --left-right --cherry-pick --decorate HEAD...FETCH_HEAD
    # I have a nice alias for this; it's the text mode eqvt of the above
Run Code Online (Sandbox Code Playgroud)

我也用" tig"有时,但这个特定用例(看到这两个双方)没有很好地提供服务tig.

但是,如果你把它降低到两个点(这可能更接近你的实际问题,虽然我仍然喜欢3点版本),你可以做

tig HEAD..FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)

为方便起见,这是别名:

incoming = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate HEAD..FETCH_HEAD'
outgoing = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate FETCH_HEAD..HEAD'
Run Code Online (Sandbox Code Playgroud)