当某个提交(recursive merge
)有两个父提交时,如here中提到的,第二个父代是我们合并到的分支上的提交,这意味着包含所有该合并提交引入的更改。这对recursive merge
是可以的。但是,如果它octopuss merge
像this我们如何确定哪些承诺引入哪些变化?在此先感谢如何确定哪个提交引入了octopuss合并中的哪些更改
回答
UPDATE - 增加了一些澄清差异为基础的方法
这有点误导地说,第二父是在一个正常的合并所有更改源。可能存在手动冲突解决方案,或者某人可能只合并--no-commit
选项,并在合并期间引入其他更改。更广泛地适用于考虑合并方式与每个父母的区别,而不是考虑哪个父母介绍每个变更。
然而,它可以是有用来思考“这种变化从何而来”。取决于您可以从以下其中一个开始之后确定哪些信息:
1)git blame
会告诉您每行代码的来源提交。任何源于HEAD^..branchN
提交的内容都必须在branchN
上指示更改。但是,由于您提供的信息是每行代码的提交ID,因此需要进行相当多的后处理才能将更改归零。
2)你可以为每个分支做差异。本来我想
git diff HEAD^ HEAD^2
等(与每个分支合并的引用代替HEAD^2
)。这是可以的,除非主分支自其他分支发散以来发生了很大变化(在这种情况下,这些变化的倒数会出现在每个差异中)。
你真的要求的是每个分支尖端和该分支开始发散的点之间的差异;所以,如果你能找到“共同祖先”,也许只是使用:
git diff A HEAD^2
(其中A
是最新提交可达来自HEAD^
和HEAD^2
)。虽然这是一种直接表达(对于一次分支)的确切含义,但它确实需要在每种情况下追踪共同的祖先。 (可能有一个很好的快捷方式,我没有想到;如果发生在我身上,我会回来一个更新。)
如果分支拓扑过于混乱,这可能仍然有点不清楚。例如,如果branch3
实际上从branch2
支,那么你就必须决定是否意味着差异比较branch3
反对共同的祖先与HEAD
或branch2
(前一种方法意味着一些改变将归因于两种branch2
和branch3
)。
使用单个命令生成所有差异将会很好,并且表面上这是log
或show
将会执行的选项-m
;但是这把我们带回到我的答案的开始,因为你要与各分支(不是每个分支引入的变化)合并的差异并有精神上否定每一个变化。 (即您必须查找其差异不包含包含更改以了解更改来自哪里的一个分支)。
- 1. 显示传入的git提交中更改了哪些文件
- 2. 如何判断哪些提交包含在合并中?
- 3. 如何在sourcetree中更改哪些提交是主人?
- 4. 在CLR 4.0中引入了哪些OpCodes?
- 5. 确定使用哪个提交按钮?
- 6. 确定哪些git文件使用Ruby进行了更改?
- 7. 如何找到哪个提交在git中引入了特定的行?还是有更好的选择?
- 8. Backbone中的模型更改引发了哪些事件?
- 9. 如何确定JGit哪些分支已合并为主?
- 10. 我如何确定哪种形式提交,并使用jquery
- 11. 如何确定在HSQLDB中定义了哪些外键?
- 12. php5引入了哪些主要功能?
- 13. 如何比较目录以确定哪些文件已更改?
- 14. 有哪些Android API的哪些位在哪个版本中引入的表?
- 15. 如何知道在哪些版本中引入了某一行?
- 16. CakePHP的2.0确定哪些提交按钮被点击
- 17. 如何找出文件模式更改来自哪个提交?
- 18. 如何知道提交时点击哪个提交输入?
- 19. 如何确定哪些功能正在使用哪个头?
- 20. 如何确定哪些元素属于哪个节点在XSL
- 21. 如何确认在XAML中绑定了哪些属性?
- 22. 如何在表单提交中确定需要哪些头文件
- 23. 如何判断在给定提交中第一次提交哪些文件?
- 24. 确定哪个域更常输入(WWW)
- 25. 在Javascript中引入了哪个版本?
- 26. Django找到哪个表单提交了
- 27. 如何找出在给定的git commit中更改了哪些文件?
- 28. 如何确定哪个矩形正在相交更多C#XNA
- 29. 2个文本文件的比较:进行了哪些更改和哪些更改?
- 30. 合并引入的提交是什么?
这家长版本比较的方法甚至可以到双亲合并应用,以区分真正从那些合并过程中引入的另一个分支出来的变化,顺便...... –
注意'git的日志-p - m“或”git show -m“在合并提交时将显示每个父代的一个差异。如果'path/to/file.ext'中的行* L *在merge-vs-parent1和merge-vs-parent2中有所不同,但不在merge-vs-parent3中,则通过* to * line * L * parent3。由于章鱼合并策略拒绝允许冲突合并,这是一个相当不错的选择。 – torek
@torek - 对于一组重要的修补程序,我不希望对每个更改(如果您与合并提交进行比较时需要执行的操作)进行负面工作来确定“哪个N diff不包含此内容” 。针对第一个父级运行diff(而不是针对合并提交)会有所帮助,但我对此的看法越多,我也不太喜欢它(因为每个diff都会包含与“first父母“分支(如果有的话))。直接查看分支变化的最直接方法:比较分支尖端和共同祖先。但是,每个分支都必须完成。 –