忘記切換分支,不小心在其他分支上修改了很多代碼,如何把這些修改拷貝到目標分支?


原文(有修改): https://developer.51cto.com/art/202107/669695.htm

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

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

首先創建一個文件夾:test_git,並且在里面創建一個1.txt 文件,這個文件的內容如下:

11111 
22222 
33333 
44444 
aaaaa 
bbbbb 
ccccc 

接下來,我執行命令git init,把當前文件夾作為一個git 源,並把1.txt 提交到源里面,讓 git 進行管理。

現在,我基於當前分支,創建一個dev分支。並對新分支里面的1.txt 文件進行修改:

git checkout -b dev 
vim 1.txt 

修改 dev 分支下的 1.txt文件:

11111 
22222 
33333 
44444 
xxxx
yyyy
zzzz

然后再在dev分支上增加這一改動

git add 1.txt 
git commit -m 'change 1.txt' 

好了,現在准備工作做完了。我現在有兩個分支master和dev。每個分支里面都有一個叫做1.txt的文件。並且這兩個1.txt文件的內容前半截相同,后半截不同。

大家可以看到,我現在在 dev 分支上。這個時候,我想修改 master 分支上面的1.txt。但是我忘記切換分支了。於是直接修改了dev 分支上的1.txt,這個時候,如果我直接使用命令git checkout master試圖切換分支,git 會報錯,沒有辦法切過去。

這個時候解決辦法有兩種:

1. 復制粘貼法

很多人可能會這樣做:打開一個記事本,把1.txt 里面修改的內容記錄下來。然后使用命令git checkout 1.txt恢復1.txt 到修改之前的內容。然后切換到 master 分支。再根據記事本里面記錄的修改內容,把代碼粘貼到1.txt 文件中。如果只有1個文件修改那還好。但是在軟件開發中,可能你修改了很多個文件。所以這種方法會變得非常笨拙。

2. git stash

但實際上,git 早就預料到了你有這個需求,所以它已經有了應對方案。

這里我們需要用到 git stash命令,簡單理解的話該命令就是把你當前所有的修改都緩存起來,什么時候想把這些緩存調出來,只要執行git stash pop命令就可以了。

具體來說,你只需要按順序執行如下三條命令:

git stash
git checkout master
git stash pop

上述命令的意思是

  1. 我們先把 dev 分支上的所有修改先緩存起來
  2. 切換到 master 分支
  3. 將緩存 pop 出來,自然就是在master分支上做改動了

現在,我們打開1.txt 文件你會看到,剛才的修改已經自動應用到了master 分支的1.txt 上面了。

git stash會把當前修改的內容緩存起來,並恢復當前工作區到你修改之前的狀態。然后切換回 master 分支,執行命令git stash pop,把剛才的修改應用到 master 分支的1.txt 文件中。如果不出現沖突,那么它會自動修改1.txt 文件。如果出現了沖突,那么需要你打開1.txt 文件以后,手動解除沖突。

可以看到,使用git stash命令,比你單獨手動記錄修改的內容,切換分支再重新改一遍要方便很多。

微信公眾號:AutoML機器學習
MARSGGBO
如有意合作或學術討論歡迎私戳聯系~
郵箱:marsggbo@foxmail.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM