git cherry-pick 的使用及衝突解決

應用場景    我當前有個master分支,提交記錄如下

1.init

2.commit1

3.demo_ok

4.commit3

5.commit5

 

現在 我要checkout 到demo_ok上開發

然後我發現了1個bug,並修復了

現在我想把修復的代碼合併到master上

我進行了如下操作

我先把代碼commit了 

git commit -m "在demo_ok版本修復了個bug"

然後 創建了一個分支

git branch demoBugFix

然後切到 demoBugFix分支上看一眼log

git  checkout demoBugFix

git log 

記錄下最新提交的 commit id

然後checkout到master最新的代碼

git checkout master

然後git cherry-pick  之前記錄的commit id

發現有些代碼有衝突

error: could not apply a47961f... 

git status 

可以看到哪些文件衝突了,根據這些文件去android studio中找,並手動解決衝突.

右鍵有衝突文件

git->resolve conflict 

然後就看到3個版本,中間的代碼版本是你最終的修改版本.

 

等衝突解決完之後

git status

發現 文件依然是modified

此時可以敲命令 git cherry-pick --continue

git add .

git commit -m "解決完衝突提交衝突文件"

 

git log 可以發現2筆提交 記錄,如下

"在demo_ok版本修復了個bug"

"解決完衝突提交衝突文件"

 

我要把這2個提交合併成一個

git rebase -i HEAD~2

如果出現 invalid upstream 'HEAD~2'

可以使用  git rebase -i --root

編輯前2次的提交信息

然後把不想要的那行開頭的pick 改成fixup

點退出  選yes  然後再回車  然後就可以保存成功了

最後看git log 就可以看到2個提交變一個

OK

 

如果出現the following untracked working  說明是有些文件沒有被git追蹤,估計是被你的.gitignore給忽略了

我建議直接先刪了這些文件

命令如下:

git clean -d -fx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章