git diff仅显示提交修订/分支A在修订/分支B之前

mwh*_*ite 34 git

有时我有以下问题:

  1. 在功能分支中添加一些提交.

  2. 从上游更新master.

  3. 想要查看功能分支和主服务器之间的差异,但是git diff master显示在master中添加/删除的所有内容,当我真的只想查看功能分支优先于master的提交时,而不是它的那些提交.背后.

有没有办法在不必将master合并到功能分支的情况下执行此操作?

Dan*_*rts 50

我认为正确的答案是三点

git diff master...feature
Run Code Online (Sandbox Code Playgroud)

这只显示了关于master的功能的新变化.另请参阅:git diff - 仅显示遥控器上的新功能

  • 它也适用于你在功能分支上你做`git diff master ...`省略功能分支名称:) (8认同)

Pet*_*ren 28

我经常去

git log -p feature-branch --not master
Run Code Online (Sandbox Code Playgroud)

但如果你想要差异,那么你正在寻找

git diff <common-ancestor> master
Run Code Online (Sandbox Code Playgroud)

其中<common-ancestor>是要与之比较的要素分支和母版的共同祖先.你可以用来merge-base为你找到它.

git diff `git merge-base feature-branch master` feature-branch
Run Code Online (Sandbox Code Playgroud)


小智 23

您的问题有点不清楚,因为我不确定您是否希望在master和之间看到更改的差异/补丁feature,或者您只是想查看哪些分支包含其他分支没有的提交.

假设你只是想看看你的feature分支中哪些提交不存在master(即哪些提交在feature"提前" master),那么你可以做

$ git log --oneline --graph master..feature
Run Code Online (Sandbox Code Playgroud)

如果你想看看这两个masterfeature有分歧,你可以使用这个命令:

$ git log --oneline --graph --first-parent \
--decorate --left-right master...feature
> 5bef654 (feature) A ...
> f7c65ea B ...
> fc66245 C ...
> 7435fc0 D ...
< bf68204 (master) X ...
< 0c10ed1 Y ...
< 27bb774 Z ...
Run Code Online (Sandbox Code Playgroud)

以上显示犯master不在feature<在他们面前(因为你使用master...feature与主左侧<的命令的一侧),而犯feature未在主标有>,因为你使用feature上的右侧master...feature....这种形式的三重点很重要,不要遗漏.

您可以从Pro Git书中了解有关指定Commit Range的更多信息.

  • `$ git log --oneline --graph master..feature`这很完美 (4认同)