有时我会遇到以下问题:
在功能分支中添加一些提交。
从上游更新master。
想要查看功能分支和主服务器之间的差异,但git diff master
显示已在master中添加/删除的所有内容,当我真的只想查看该功能的提交时分支领先于大师,而不是它落后的分支。
有没有办法在不必将master合并到功能分支的情况下执行此操作?
答案 0 :(得分:44)
我认为正确答案是三点
git diff master...feature
仅显示与主人相关的功能的新变化。另见:git diff - show only what's new on the remote
答案 1 :(得分:25)
我通常会去
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
答案 2 :(得分:19)
您的问题有点不清楚,因为我不确定您是否希望在master
和feature
之间看到更改的差异/补丁,或者您只是想查看哪些分支包含哪些提交其他分支没有。
假设您只是想查看feature
分支中master
中不存在的提交(即feature
中哪些提交位于{{1}之前“然后你可以做
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...feature
命令的一侧),而<
中不在主文件中的提交标有feature
,因为您在>
的右侧使用了feature
。这种形式的三重点master...feature
很重要,不要遗漏。
您可以详细了解如何指定Commit Range from the Pro Git book。
答案 3 :(得分:0)
如果我正确理解了您的问题,那么您的功能分支不在主分支之外,并且您希望看到您在功能分支上提交的内容与主分支在分支时的内容之间的差异。< / p>
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`
答案 4 :(得分:0)
不是一个确切的答案,但是大部分时间都可以满足我的需求。
git difftool -d master..