46

有时我会遇到以下问题:

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

  2. 从上游更新主控。

  3. 想查看特性分支和主控之间的差异,但git diff master显示所有在主控中添加/删除的东西,当我真的只想看到特性分支在主控之前的提交,而不是它的那些在后面。

有没有办法做到这一点而不必将 master 合并到功能分支中?

4

5 回答 5

68

我认为正确的答案是三点

git diff master...feature

这仅显示了与 master 相关的功能的新变化。另请参阅:git diff - 仅显示遥控器上的新内容

于 2013-07-12T15:02:16.783 回答
34

我通常去

git log -p feature-branch --not master

但如果你想要一个差异,你正在寻找

git diff <common-ancestor> master

<common-ancestor>您想要比较的功能分支和主控的共同祖先在哪里。您可以使用merge-base为您找到它。

git diff `git merge-base feature-branch master` feature-branch
于 2013-07-11T23:57:50.283 回答
27

您的问题有点不清楚,因为我不确定您是否想查看 and 之间更改的差异/补丁masterfeature或者您只想查看哪些分支包含另一个分支没有的提交。

假设您只想查看feature分支中不存在的master提交(即其中的哪些提交feature“提前” master),那么您可以这样做

$ git log --oneline --graph master..feature

如果你想看看两者是如何分歧的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 ...

上面的输出显示了它们前面master没有的feature提交(因为你在命令的左侧使用了 master ),而不在 master 中的提交被标记为因为你在右侧使用了. 这种形式的三点很重要,不要遗漏它们。<master...feature<feature>featuremaster...feature...

您可以从 Pro Git book 中了解有关指定提交范围的更多信息。

于 2013-07-12T00:02:57.877 回答
0

如果我正确理解了您的问题,那么您的功能分支与主分支无关,并且您想查看您在功能分支上提交的内容与从主分支分支时的外观之间的差异。

A----B----C
 \
  D----E----F

在这种情况下,您可以将git diff命令与提交的相应哈希一起使用。因此,对于在 A 点分支并随后提交 D、E 和 F 的功能分支,您可以这样做:

git diff <hash of commit F> <hash of commit A>

您可以使用git merge-base feature master查看上面使用的点 A 的哈希,并git log查看功能分支上最近提交 F 的哈希。或者要在一行上完成所有操作,请使用以下命令:

git diff feature `git merge-base feature master`
于 2013-07-11T23:56:35.237 回答
0

不是一个确切的答案,而是一个大多数时间都可以满足我需求的衬里。

git difftool -d master..

于 2015-03-20T21:14:34.033 回答