一日一技:使用 Git 在錯誤的分支上修改了程式碼怎麼辦?

我們知道,在使用 Git 的時候,應該要正確使用它的分支(Branch)功能。不同的功能使用不同的分支開發,最後合併進入主分支。但有時候會出現這樣一種情況——我程式碼都已經寫完了,才發現我寫錯分支了。這個時候,怎麼把我的修改遷移到目標分支上,並且不修改現在正在使用的分支?

我們用一個簡單的例子來說明這種情況。

首先建立一個資料夾:

test_git

,並且在裡面建立一個1。txt 檔案,這個檔案的內容如下:

11111222223333344444aaaaabbbbbccccc

如下圖所示:

一日一技:使用 Git 在錯誤的分支上修改了程式碼怎麼辦?

接下來,我執行命令

git init

,把當前資料夾作為一個git 源,並把1。txt 提交到源裡面,讓 git 進行管理。

一日一技:使用 Git 在錯誤的分支上修改了程式碼怎麼辦?

現在,我基於當前分支,建立一個

dev

分支。並對新分支裡面的1。txt 檔案進行修改:

git checkout -b devvim 1。txtgit add 1。txtgit commit -m ‘change 1。txt’

一日一技:使用 Git 在錯誤的分支上修改了程式碼怎麼辦?

好了,現在準備工作做完了。我現在有兩個分支

master

dev

。每個分支裡面都有一個叫做

1。txt

的檔案。並且這兩個

1。txt

檔案的內容前半截相同,後半截不同。

大家可以看到,我現在在 dev 分支上。這個時候,我想修改 master 分支上面的1。txt。但是我忘記切換分支了。於是直接修改了dev 分支上的1。txt:

一日一技:使用 Git 在錯誤的分支上修改了程式碼怎麼辦?

紅框中的內容,原本是想在 master 分支修改的

這個時候,如果我直接使用命令

git checkout master

試圖切換分支,git 會報錯,沒有辦法切過去:

一日一技:使用 Git 在錯誤的分支上修改了程式碼怎麼辦?

很多人可能會這樣做:開啟一個記事本,把1。txt 裡面修改的內容記錄下來。然後使用命令

git checkout —— 1。txt

恢復1。txt 到修改之前的內容。然後切換到 master 分支。再根據記事本里面記錄的修改內容,把程式碼貼上到1。txt 檔案中。如果只有1個檔案修改那還好。但是在軟體開發中,可能你修改了很多個檔案。所以這種方法會變得非常笨拙。

但實際上,git 早就預料到了你有這個需求,所以它已經有了應對方案。我們現在回到剛剛在 dev 分支修改了1。txt 的時候:

一日一技:使用 Git 在錯誤的分支上修改了程式碼怎麼辦?

這個時候,

千萬不要

執行

git add

命令。

你只需要按順序執行如下三條命令:

git stashgit checkout mastergit stash pop

執行效果如下圖所示:

一日一技:使用 Git 在錯誤的分支上修改了程式碼怎麼辦?

然後,我們開啟1。txt 檔案:

一日一技:使用 Git 在錯誤的分支上修改了程式碼怎麼辦?

可以看到,剛才的修改已經自動應用到了master 分支的1。txt 上面了。

git stash

會把當前修改的內容快取起來,並恢復當前工作區到你修改之前的狀態。然後切換回 master 分支,執行命令

git stash pop

,把剛才的修改應用到 master 分支的1。txt 檔案中。如果不出現衝突,那麼它會自動修改1。txt 檔案。如果出現了衝突,那麼需要你開啟1。txt 檔案以後,手動解除衝突。

可以看到,使用

git stash

命令,比你單獨手動記錄修改的內容,切換分支再重新改一遍要方便很多。

更多 Git 相關的小技巧,大家可以在微軟提供的學習網站進行學習: Introduction to Git - Learn | Microsoft Docs [1] 。

參考資料

Introduction to Git - Learn | Microsoft Docs:

https://docs。microsoft。com/en-us/learn/modules/intro-to-git/?WT。mc_id=DT-MVP-5003916

原文

https://mp。weixin。qq。com/s?__biz=MzI2MzEwNTY3OQ==&mid=2648981151&idx=1&sn=dff5f195d60445cce2362fe32283fe69