如果修改了本地的內容後,直接 git pull
提示合併衝突資訊 error: Your local changes to the following files would be overwritten by merge. Please commit your changes or stash them before you merge.
此時可以先使用 git commit
或 git stash
來將當前的修改儲存起來,也就是對應的 git commit
之前和之後的修復衝突。
在檔案合併傳送衝突時,需要合併一些程式碼,且不想將此時的修改進行提交,可以使用 git stash
來對當前的修改進行暫存,具體操作過程如下。
1、暫存當前工作目錄的修改
git stash
git stash
會將當前工作目錄的所有修改進行暫存,並將工作目錄恢復到未修改之前的狀態,即最後一次提交的狀態,此時再進行 git pull
操作(這個命令其實相當於先將有衝突的檔案進行備份後,然後再將其revert
)。
2、拉取遠端程式碼倉內容
git pull
3、恢復暫存區的修改
git stash pop
該命令會將暫存區中的修改彈出,併合併到當前工作目中,此時會出現衝突資訊以及標識和提示,需要進行手動的修改衝突檔案。
可以使用文字編輯器開啟衝突的檔案進行修改,也可以使用 TortoiseGit 來編輯修改衝突檔案。在此使用 vimdiff
開啟衝突檔案,並解決衝突
依次對所有衝突的檔案進行修改編輯,合併其中的內容。此時相當於先將遠端倉庫的內容拉取到本地後,再將本地的修改新增進去。
4、標記衝突已解決
git add <fixedFile>
解決完對應檔案衝突後,需要使用以上的命令來標記該檔案的衝突已解決。然後可以繼續進行編輯或直接提交,這種方式是沒有額外的 Merge 提交資訊。
5、檢視當前工作目錄狀態
git status
檢視工作目錄的狀態,是否有未解決的衝突檔案,或未提交的修改等。
6、提交本地修改
git commit -m "Message for this change"
提交本地的修改
【總結】
git stash list
:顯示所有的暫存資料git stash clear
:清除所有的暫存資料,在解決衝突後預設是不會清理對應的暫存資料,可以是用該命令進行清除。git stash show
:顯示預設的暫存做了哪些修改,預設是第一個,如果有多個,也可以在後面加上具體的索引,如顯示第二個,即可以在 show 後面加上: stash@{1}git stash drop stash@{$index}
:會將暫存列表中索引為 index 的暫存丟棄掉git stash
操作只是對已被 git 追蹤的檔案起作用,如果有的檔案還沒有 Versioned 將不會起作用。