git 解決衝突 —— git stash 當前修改

Jeffxue發表於2024-11-06

如果修改了本地的內容後,直接 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 commitgit stash來將當前的修改儲存起來,也就是對應的 git commit之前和之後的修復衝突。

在檔案合併傳送衝突時,需要合併一些程式碼,且不想將此時的修改進行提交,可以使用 git stash 來對當前的修改進行暫存,具體操作過程如下。


1、暫存當前工作目錄的修改

git stash

git stash會將當前工作目錄的所有修改進行暫存,並將工作目錄恢復到未修改之前的狀態,即最後一次提交的狀態,此時再進行 git pull 操作(這個命令其實相當於先將有衝突的檔案進行備份後,然後再將其revert)。

2、拉取遠端程式碼倉內容

git pull

3、恢復暫存區的修改

git stash pop

該命令會將暫存區中的修改彈出,併合併到當前工作目中,此時會出現衝突資訊以及標識和提示,需要進行手動的修改衝突檔案。

可以使用文字編輯器開啟衝突的檔案進行修改,也可以使用 TortoiseGit 來編輯修改衝突檔案。在此使用 vimdiff 開啟衝突檔案,並解決衝突
git 解決衝突 —— git stash 當前修改

依次對所有衝突的檔案進行修改編輯,合併其中的內容。此時相當於先將遠端倉庫的內容拉取到本地後,再將本地的修改新增進去。

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 將不會起作用。

相關文章