編輯(每個問題編輯):我不認爲有一個完全可靠的方法來做到這一點。從根本上講,問題是,如果從C
到A
一些變化重疊從C
到B
一些變化-would撤消或覆蓋或修改C
和B
- 它的不可能之間的差異一般要知道爲什麼是這樣的話。
也就是說,我們給出一個發散提交圖所示:
a1--a2--...--a_i_max-minus-1--A
/
...--C
\
b0--...--b_j_max-minus-1--B
(沒有約束,要麼我= j的或我≠j時,即這裏的不同長度是並不意味着暗示其中之一)。這裏標記爲A
的提交實際上僅僅是最終的A i,並且類似地對於B
。要發現C-VS-B是否包含在任何C-VS-A 我,甚至ķ -vs-A升的一些ķ<升。你可以詳盡地測試以確定這是否是真實的,但是這樣做會很昂貴,並且也會錯過任何「邏輯正確」的情況,但最終提交的序列與C-vs-B並不完全相同,可能是因爲它是修改以解決合併衝突。
詳盡的測試可能會盡可能地接近您所能得到的。如果您可以強制執行工作流程要求,那麼系統提交中會有一個提交消息或提交說明附加到壁球合併:那麼您只需要枚舉它們並檢查每個註釋說我是擠壓C vs B的結果。
(原來的答覆如下)
的問題沒有得到很好的形成,至少在Git中,陸,因爲沒有這樣的事情「在A
的變化」不是。如果A
是分支名稱,則它命名一個特定的提交。要找到更改您必須命名爲兩個提交和git diff
他們。這同樣適用於分支名稱B
:爲了將快照(分支上的提示提交)B
轉變爲更改集(就某些較早的提交而言),您必須選擇一些較早的提交。
一般來說,人們問這個的時候,他們有一個特定的第三個承諾事項:
o--o--A <-- BranchA
/
...--o--*
\
o--o--B <-- BranchB
這第三個承諾,標誌着*
這裏,就是兩個分支「聯合起來」,又名地方合併基地。
如果提交*
不是您打算用作生成此不對稱差異的(單個)第三點的提交,則此答案的其餘部分均不適用。但如果它是,找到它的方法是進行合併,然後將合併結果與您關心的任何分支提示進行比較。
合併將採取的所有更改的工會(從*
到A
,並從*
到B
),並把它們放進合併提交:
$ git checkout --detach BranchA # doesn't matter which one we use
$ git merge BranchB
結果(如果沒有合併衝突)的:
o--o--A <-- BranchA
/ \
...--o--* M <-- HEAD (detached)
\ /
o--o--B <-- BranchB
現在你可以看到*
航班嗎A
看起來就像如果一個開始與B
通過比較(版本比較)B
VS M
:
$ git diff HEAD^2 HEAD # or git diff BranchB HEAD
凡是顯示了這裏有貢獻的航班嗎*
差異A
改變了未還貢獻了*
航班嗎B
差異。
同樣,比較合併提交對提交A
將呈現變化貢獻的航班嗎*
DIFF B
是不是已經在*
航班嗎A
DIFF:
$ git diff HEAD^1 HEAD
使用git show -m
,你可以因爲這是-m
與git show
所做的一樣。
感謝您的深入解釋。我需要仔細閱讀它才能消化所有內容,並確定這是否符合我的要求。要根據您的示例對我的問題進行重新說明,我想知道*到to的變化是否出現在*到B中。我不在乎可能在*到B中引入的其他更改。 –
在這種情況下,您可能會檢查merge-vs-B是否爲空。 – torek
我仍在試圖爲此找到更好的解決方案。我已經修改了我的OP,希望能夠更清楚我所尋找的內容。如果你有時間,請看看。 –