- error message
error: Your local changes to the following files would be overwritten by merge:
project/code.c
Please, commit your changes or stash them before you can merge.
Aborting
================================================================
================================================================
- explain
- git pull 後如果出現上面的error 訊息,
表示 local 端的 code.c 的跟 remote 端的程式有衝突,
也就是說已經有人跟你一樣改到 code.c 的同一段程式,
而且比你早把程式放到 server 上
- solution
- 大部分在開始改程式之前,
都會建議先將 remote 端的程式 pull 下來,
這樣可以減少類似的問題發生,
但是如果在你 pull remote 端的程式後,
有其他人又 push 新的程式上去,
就可以依照下列的步驟處理
- Step 1
- git checkout -b new_branch
- 先 checkout 到新的 branch, new_branch 可以看到修改過的檔案
- Step 2
- git add , git commit
- 在 new_branch 將修改過的程式做 git add 和 git commit 放到 repository,可以用 git log --stat 或是 gitk 檢查最新的 commit
是不是都包含自己修改過的所有檔案,
如果沒有的話, 在將漏掉的檔案做 git add 和 git commit - Step 3
- git checkout original_branch
- 確定修改過的所有檔案在 new_branch 都已經 commit 後,
再將 branch checkout 到原來的 original_branch
- Step 4
- git reset --hard
- 把之前修改過的檔案全部刪掉,
在刪掉之前請再確認一次是不是有把所有修改過的檔案備份在新的 new_branch,在 git reset --hard 之前, 確認現在的 branch 是不是 original_branch
- Step 5
- git pull
- 再重新將 remote 端的程式 pull 到 local 端
- Step 6
- git log new_branch
- 先用 git log new_branch 看剛剛在 new_branch commit 的 hash 號碼,
並複製這串 hash 號碼, 假設看到 commit hash 號碼是 123456
- Step 7
- git cherry-pick --no-commit 123456
- 在 original_branch 做 git cherry-pick,
把剛剛在 new_branch 的檔案移到 original_branch,
加上 --no-commit 是爲了讓 git cherry-pick 的檔案不要自動 commit,
等確定檔案內容都沒有錯之後再做 git commit
- Step 8
- git add , git commit
- 將確定沒有問題的檔案做 git add 和 git commit
- Step 9
- git push
- 將新加的 commit push 到 remote 端
沒有留言:
張貼留言