簡體   English   中英

請參閱master和live分支之間提交的git日志

[英]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 loggit 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM