應用場景 我當前有個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