我們知道,在使用 Git 的時候,應該要正確使用它的分支(Branch)功能。不同的功能使用不同的分支開發,最後合併進入主分支。但有時候會出現這樣一種情況——我程式碼都已經寫完了,才發現我寫錯分支了。這個時候,怎麼把我的修改遷移到目標分支上,並且不修改現在正在使用的分支?
我們用一個簡單的例子來說明這種情況。
首先建立一個資料夾:
test_git
,並且在裡面建立一個1。txt 檔案,這個檔案的內容如下:
11111222223333344444aaaaabbbbbccccc
如下圖所示:
接下來,我執行命令
git init
,把當前資料夾作為一個git 源,並把1。txt 提交到源裡面,讓 git 進行管理。
現在,我基於當前分支,建立一個
dev
分支。並對新分支裡面的1。txt 檔案進行修改:
git checkout -b devvim 1。txtgit add 1。txtgit commit -m ‘change 1。txt’
好了,現在準備工作做完了。我現在有兩個分支
master
和
dev
。每個分支裡面都有一個叫做
1。txt
的檔案。並且這兩個
1。txt
檔案的內容前半截相同,後半截不同。
大家可以看到,我現在在 dev 分支上。這個時候,我想修改 master 分支上面的1。txt。但是我忘記切換分支了。於是直接修改了dev 分支上的1。txt:
紅框中的內容,原本是想在 master 分支修改的
這個時候,如果我直接使用命令
git checkout master
試圖切換分支,git 會報錯,沒有辦法切過去:
很多人可能會這樣做:開啟一個記事本,把1。txt 裡面修改的內容記錄下來。然後使用命令
git checkout —— 1。txt
恢復1。txt 到修改之前的內容。然後切換到 master 分支。再根據記事本里面記錄的修改內容,把程式碼貼上到1。txt 檔案中。如果只有1個檔案修改那還好。但是在軟體開發中,可能你修改了很多個檔案。所以這種方法會變得非常笨拙。
但實際上,git 早就預料到了你有這個需求,所以它已經有了應對方案。我們現在回到剛剛在 dev 分支修改了1。txt 的時候:
這個時候,
千萬不要
執行
git add
命令。
你只需要按順序執行如下三條命令:
git stashgit checkout mastergit stash pop
執行效果如下圖所示:
然後,我們開啟1。txt 檔案:
可以看到,剛才的修改已經自動應用到了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