git 切換分支時會把未add或未commit的內容帶過去, 這一點值得注意。
為什么呢?
因為未add的內容不屬於任何一個分支, 未commit的內容也不屬於任何一個分支。 也就是說,對於所有分支而言, 工作區和暫存區是公共的。
要想在分支間切換, 又不想又上述影響, 怎么辦呢?
git切換分支保存修改的代碼的方法
最近在一個原有的項目上做一次非常大的改版,底層的數據庫做了很大的變化,跟現在的版本無法兼容。現在的工作除了開發最新的版本之外還要對原來的版本做例行的維護,修修補補。於是有了在兩個分支之間游走切換的問題,最新改版的代碼在分支new上,舊版本的代碼在分支old上,我在new上開發了一半,忽然有人給了我一個改進的需求,於是我要切換回old去修改代碼。在這個場景下,我摸索了三種方法:
及時commit代碼
在new分支上把已經開發完成的部分代碼commit掉,不push,然后切換到old分支修改代碼,做完了commit,所有分支互不影響,這是一個理想的方法。
使用git stash
有時候寫了一半的JAVA代碼,都還不能編譯通過的,就被叫去改另一個分支的bug了。
在new分支上的時候在命令行輸入:
git stash
或者
git stash save “修改的信息"
這樣以后你的代碼就回到自己上一個commit了,直接git stash的話git stash的棧會直接給你一個hash值作為版本的說明,如果用git stash save “修改的信息”,git stash的棧會把你填寫的“修改的信息”作為版本的說明。
接下來你回到old分支修改代碼完成,你又再回到new分支,輸入:
git stash pop
或者
git stash list
git stash apply stash@{0}
就可以回到保存的版本了。git stash pop的作用是將git stash棧中最后一個版本取出來,git stash apply stash@{0}的作用是可以指定棧中的一個版本,通過git stash list可以看到所有的版本信息:
stash@{0}: On order-master-bugfix: 22222
stash@{1}: On order-master-bugfix: 22222
然后你可以選擇一個你需要的版本執行:
git stash apply stash@{0}
這時候你擱置的代碼就回來了。