工作除了開發最新的版本之外還要對原來的版本做例行的維護,修修補補。于是有了在兩個分支之間遊走切換的問題,最新改版的代碼在分支 new 上,舊版本的代碼在分支 old 上,我在 new 上開發了一半,忽然有人給了我一個改進的需求,于是我要切換回 old 去修改代碼。在這個場景下,我摸索了三種方法:
及時 commit 代碼
在 new 分支上把已經開發完成的部分代碼 commit 掉,不 push,然後切換到 old 分支修改代碼,做完了commit,所有分支互不影響,這是一個理想的方法。
使用 git stash
有時候寫了一半的 Golang 代碼,都還不能編譯通過的,就被叫去改另一個分支的 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}
這時候你擱置的代碼就回來了。
用 IDE 工具的 shelve 的功能
有一些 IDE 工具提供了 shelve 的功能,shelve 的意思是“将…擱在一邊”,即把還沒寫完的代碼先擱在一邊。我開發都是使用 jetbrains 公司的 IDEA 和 PhpStorm,它們就提供了 shelve 的功能,方法:
首先在 IDE 的底部找到“Changes”,點開會有 local 的頁籤,選中你要擱置的代碼,點選右鍵,選擇“Shelve Changes”,在送出的輸入框中輸入你的注釋,以便回來的時候識别你需要的版本,點選“Shelve Changes”鍵即可。這時頁籤上會多一個“Shelf”的頁籤,裡面就有你擱置的代碼。
這時候你可以去 old 分支修改代碼,改完了之後回到 new 分支,到“Shelf”頁籤下選擇你要恢複的代碼或者版本,點選右鍵選擇“Unshelve Changes”,你的擱置的代碼就回來了。