![](/img/trans.png)
[英]Git diff between current branch and master but not including unmerged master commits
[英]see git log of commits between master and live branch
我一直在搜索stackoverflow和其他論壇找到答案無濟於事 - 似乎沒有什么比我想要的更合適。
所以問題如下:我有一個主分支和一個實時分支 。 在主分支上繼續開發,當提交被認為合適時,它們被挑選到實時分支中 。
但是,我發現live-branch有一個bug,它在master-branch中修復,我試圖找到master-branch中的哪個提交引入了修復。
我試圖通過首先看到master和live之間的提交差異來做到這一點。 主人的一些提交沒有讓它成為現實,哪些?
我嘗試了以下方法:
git log --cherry-pick --oneline --no-merges --right-only live-branch..master
但我真的不明白這個命令,這告訴我提交的區別,但是這給了我相同的提交,它們在live和master中,只是哈希是不同的。
我需要一種類似補丁的方式來做到這一點。 git diff commit_from_master,v3.8如果為空則忽略。
我怎樣才能做到這一點?
如果需要更多說明,我會更新。
(擴大評論回答)
我想你可能想要--cherry
,這是--right-only --cherry-mark --no-merges
的同義詞(參見git log
或git rev-list
文檔),或者與--cherry-pick
相同--cherry-pick
(當你嘗試)而不是--cherry-mark
。 這些需要使用對稱差異或三點表示法,即live-branch...master
。
當使用帶有三點符號的--left-right
,如果它們位於“左側”,則使用<
注釋提交哈希,如果它們位於“右側”,則使用>
注釋。 請記住,兩個集合的對稱差異意味着屬於任一集合成員的元素,而不是兩個集合的集合 。 當應用於Git分支時,我們得到:
(left side) (right-side)
live-branch master
* *
| |
* X'
| |
: :
| |
X *
\ /
\ /
\ /
\ /
*
|
:
其中每個*
或大寫字母代表一些提交。 兩個分支在某個時刻聚集在一起,所以left...right
看着聯接“上方”的所有提交,並簡要地排除了它下面的所有提交。 (連接點也被排除,因為它在兩個集合中,盡管--boundary
重新包含它。)
這很好,但是我們想知道哪些提交是左側提交 ,當然對於右側提交也是如此。 然后,使用--cherry
或--cherry-pick
或--cherry-mark
,我們讓Git分析左側和右側每個提交的補丁等價性。 如果兩個不同的提交哈希具有相同的計算git patch-id
,意味着一個可能是從另一個中挑選出來的,它們會被鏈接在一起。 例如,在上圖中,X和X'是“相同的”,因此它們是相互關聯的。
各種 - --cherry
選項的行為是以各種方式使用這些標記。 您正在查找master
中存在但在live-branch
不存在的提交,因此在標記對之后,您只需要沒有相應左側( live-branch
)提交的右側( master
)提交。 使用--cherry-mark
,你會看到標記; 與--cherry-pick
,Git將完全放棄標記/配對。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.