git cherry-pick 問題?
世界只因有你
世界只因有你 2017-05-02 09:32:56
0
2
691

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

文件的內容是這樣的

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

此時爆衝突了,如下圖

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

世界只因有你
世界只因有你

全部回覆(2)
Ty80

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

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

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

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

漂亮男人

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

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板