假设我有两个分支,master和feature。我们的目标是在Github上以可视化的方式查看master和feature之间的整个差异。默认情况下这是不可能的,因为Github使用git diff ...(三个点),当在两个分支之间进行diff时,它采用最近的公共祖先。这意味着在公共父节点之后引入master的diff将不会出现在与feature的diff中,从而使差异错误。我正在寻找解决这个问题的方法。
master
feature
git diff ...
qeeaahzv1#
这里是这里的人似乎不想给予的 * 实际 * 答案。请自担风险使用。假设我们要更新master分支和feature分支之间的共同祖先,请执行以下操作:1.转到master和git pull --rebase以确保您拥有最新的主版本。1.使用git branch -b temp_master从master创建分支1.检出feature分支,并从此处运行git merge -s ours temp_master1.您现在可以删除temp_master并使用git push -f origin feature推送feature你的git pull请求现在将显示正确的差异。
git pull --rebase
git branch -b temp_master
git merge -s ours temp_master
temp_master
git push -f origin feature
ua4mk5z42#
在github上显示两个dot diff:1.打开master和feature之间的差异视图页面。UI一直在变化,但最终您的URL应该看起来像这样:https://github.com/USERNAME/REPOSITORY/compare/master...feature1.将页面url中的三点改为两点1.利润!在github上有官方文档-三点和两点Git diff比较你可以在url中使用分支名称或hash right。默认情况下,master vs local branch比较会以一个短url打开,如https://github.com/USERNAME/REPOSITORY/compare/feature。只需在url中添加master..即可。
master..
5kgi1eie3#
好吧……我有点明白你在问什么,你的目标是什么……你想做的是不正确的。所以...比如说,你创建了你的功能分支。然后你修改了文件a.txt,你在文件中添加了5行。同时,另一个开发人员拿走了那个文件,在文件中添加了5行(在一个单独的位置,没有冲突),并把它放在master上。目前,如果你把分支推到github并创建了一个PR,当查看文件的差异时,你会看到你添加的5行,而不是其他开发人员添加的其他5行的差异,对吗?这是你所期望的,因为 * 你的PR* 只添加了这5行,5.如果PR的diff总是显示与master的 all 差异,那么diff会随着master的前进而不断增长,而这些变化与您的PR无关..这就是为什么github使用...来计算diff,而不是..。已经解释过了,根据你的要求,你希望能够变基到master......然后你希望保持文件在你的特性分支上的原样,即使它已经在master上修改过了?好吧,这完全是疯了,因为这意味着在以这种方式变基之后,当你创建它时,你要求删除开发者在你的分支合并之前添加的 * 其他 * 5行。
...
..
eoigrqb64#
听起来你并不是真的想要一个特性分支。如果你确定你总是想覆盖Master,那么直接提交到Master就行了。但我不建议这样做,除非你是这个仓库中唯一的工作人员。如果您想查看提交之间的差异,请参阅比较提交或跨提交比较
4条答案
按热度按时间qeeaahzv1#
这里是这里的人似乎不想给予的 * 实际 * 答案。请自担风险使用。
假设我们要更新
master
分支和feature
分支之间的共同祖先,请执行以下操作:1.转到
master
和git pull --rebase
以确保您拥有最新的主版本。1.使用
git branch -b temp_master
从master
创建分支1.检出
feature
分支,并从此处运行git merge -s ours temp_master
1.您现在可以删除
temp_master
并使用git push -f origin feature
推送feature
你的git pull请求现在将显示正确的差异。
ua4mk5z42#
在github上显示两个dot diff:
1.打开
master
和feature
之间的差异视图页面。UI一直在变化,但最终您的URL应该看起来像这样:https://github.com/USERNAME/REPOSITORY/compare/master...feature1.将页面url中的三点改为两点
1.利润!
在github上有官方文档-三点和两点Git diff比较
你可以在url中使用分支名称或hash right。默认情况下,master vs local branch比较会以一个短url打开,如https://github.com/USERNAME/REPOSITORY/compare/feature。只需在url中添加
master..
即可。5kgi1eie3#
好吧……我有点明白你在问什么,你的目标是什么……你想做的是不正确的。
所以...比如说,你创建了你的功能分支。然后你修改了文件a.txt,你在文件中添加了5行。同时,另一个开发人员拿走了那个文件,在文件中添加了5行(在一个单独的位置,没有冲突),并把它放在master上。
目前,如果你把分支推到github并创建了一个PR,当查看文件的差异时,你会看到你添加的5行,而不是其他开发人员添加的其他5行的差异,对吗?这是你所期望的,因为 * 你的PR* 只添加了这5行,5.如果PR的diff总是显示与master的 all 差异,那么diff会随着master的前进而不断增长,而这些变化与您的PR无关..这就是为什么github使用
...
来计算diff,而不是..
。已经解释过了,根据你的要求,你希望能够变基到master......然后你希望保持文件在你的特性分支上的原样,即使它已经在master上修改过了?好吧,这完全是疯了,因为这意味着在以这种方式变基之后,当你创建它时,你要求删除开发者在你的分支合并之前添加的 * 其他 * 5行。
eoigrqb64#
听起来你并不是真的想要一个特性分支。如果你确定你总是想覆盖Master,那么直接提交到Master就行了。但我不建议这样做,除非你是这个仓库中唯一的工作人员。
如果您想查看提交之间的差异,请参阅比较提交或跨提交比较