有时我会遇到以下问题:
在功能分支中添加一些提交。
从上游更新主控。
想查看特性分支和主控之间的差异,但
git diff master
显示所有在主控中添加/删除的东西,当我真的只想看到特性分支在主控之前的提交,而不是它的那些在后面。
有没有办法做到这一点而不必将 master 合并到功能分支中?
有时我会遇到以下问题:
在功能分支中添加一些提交。
从上游更新主控。
想查看特性分支和主控之间的差异,但git diff master
显示所有在主控中添加/删除的东西,当我真的只想看到特性分支在主控之前的提交,而不是它的那些在后面。
有没有办法做到这一点而不必将 master 合并到功能分支中?
我通常去
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
您的问题有点不清楚,因为我不确定您是否想查看 and 之间更改的差异/补丁master
,feature
或者您只想查看哪些分支包含另一个分支没有的提交。
假设您只想查看feature
分支中不存在的master
提交(即其中的哪些提交feature
“提前” master
),那么您可以这样做
$ git log --oneline --graph master..feature
如果你想看看两者是如何分歧的master
,feature
你可以使用这个命令:
$ 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
>
feature
master...feature
...
您可以从 Pro Git book 中了解有关指定提交范围的更多信息。
如果我正确理解了您的问题,那么您的功能分支与主分支无关,并且您想查看您在功能分支上提交的内容与从主分支分支时的外观之间的差异。
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`
不是一个确切的答案,而是一个大多数时间都可以满足我需求的衬里。
git difftool -d master..