當某個提交(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. 如何確定在同步上更改了哪些屬性
- 4. 確定回購目前正在合併的哪個提交(MERGE_HEAD)
- 5. 如何判斷哪些提交包含在合併中?
- 6. 如何在sourcetree中更改哪些提交是主人?
- 7. 如何確定在DataGridView中更改了哪些項目的選定狀態?
- 8. 如何確定哪些提交在git中被壓縮?
- 9. 確定哪些FormCollection值已更改
- 10. 在CLR 4.0中引入了哪些OpCodes?
- 11. 提取日期的字符串,並確定哪些更早
- 12. 確定使用哪個提交按鈕?
- 13. 確定哪些git文件使用Ruby進行了更改?
- 14. 如何找到哪個提交在git中引入了特定的行?還是有更好的選擇?
- 15. Backbone中的模型更改引發了哪些事件?
- 16. 如何確定JGit哪些分支已合併爲主?
- 17. 我如何確定哪種形式提交,並使用jquery
- 18. 如何確定在oracle中是否使用了哪個索引
- 19. 確定表單提交時點擊了哪個按鈕
- 20. 如何確定設置了哪個位?
- 21. 如何確定在HSQLDB中定義了哪些外鍵?
- 22. 多個提交按鈕,如何確定哪個被點擊?
- 23. php5引入了哪些主要功能?
- 24. 查找哪個合併策略用於合併提交?
- 25. 有哪些Android API的哪些位在哪個版本中引入的表?
- 26. 如何比較目錄以確定哪些文件已更改?
- 27. 如何確定在表的modifiedField方法中更改了哪個維1,2或3?
- 28. Eclipse不顯示哪些類更改了
- 29. 如何知道在哪些版本中引入了某一行?
- 30. 確定在Vaadin中修改了哪些文本字段
這家長版本比較的方法甚至可以到雙親合併應用,以區分真正從那些合併過程中引入的另一個分支出來的變化,順便...... –
注意'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父母「分支(如果有的話))。直接查看分支變化的最直接方法:比較分支尖端和共同祖先。但是,每個分支都必須完成。 –