首頁  >  問答  >  主體

git cherry-pick 問題?

新建一個倉庫,裡面只放一個文字文件,分別做6次提交,,此時git log --oneline 的樣子應該是這樣的

文件的內容是這樣的

我要丟棄 442452d 提交,但保留e09949e提交,我的做法是這樣的
git reset --hard 260effc
然後 git cherry-pick e09949e

此時爆衝突了,如下圖

我不理解的是為何會衝突,按道理應該直接就patch了,不應是上圖的樣子,e09949e這次提交應該是只包含'4' 不包含'3'吧,如果要是還需要手動去掉'3'的話,那cherry-pick 還有啥意義呢,我直接進文件把它刪掉就好了啊,還是我用法有問題?求大神指點! ! !

世界只因有你世界只因有你2727 天前660

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-05-02 09:34:56

    為什麼不直接 git revert 442452d 呢?

    commit記錄的是相對修改 和修改內容的上下行是關聯的 如果上一行丟失了 就會報衝突 需要人工解決。 如果你兩個commit之間不再相關聯的函數內 就可以直接revert。

    另外使用這種reset --hard 再cherry-pick的方式 不太好 其他協作者可能在中間加了其他的commit,後續衝突處理更困難。

    cherry-pick比較好的使用場景是在 一個分支上想要另一個分支的單獨的某個特性。

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-02 09:34:56

    因為e09949e只包含4,是针对前一个commit442452d的差異而言。

    可你現在把442452d给去掉了,希望把e09949e的父节点从442452d指到260effc,確實會有衝突。

    不確定在沒動圖的情況下我解釋的是否清楚,如果有疑問,建議你先把這個教程好好玩玩。

    回覆
    0
  • 取消回覆