1. 程式人生 > >git切換到別的分支,要暫時儲存當前分支的修改(不想進行add 和commit)的方法 git stash

git切換到別的分支,要暫時儲存當前分支的修改(不想進行add 和commit)的方法 git stash

最近在一個原有的專案上做一次非常大的改版,底層的資料庫做了很大的變化,跟現在的版本無法相容。現在的工作除了開發最新的版本之外還要對原來的版本做例行的維護,修修補補。於是有了在兩個分支之間遊走切換的問題,最新改版的程式碼在分支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}

這時候你擱置的程式碼就回來了。

這是一個非常常用的場景,我正在一個分支上修改功能,然後遇到一個bug需要解決,我得切換到其他分支來修改這個bug,但是目前的功能還在開發階段,還不成熟,還不想執行add和commit,執行這兩個後就會在歷史中有記錄,並不想這樣做,於是就有了git stash功能,把我當前的修改暫時儲存起來,然後回來的時候再取出來繼續開發功能.

git stash是針對整個git工程來進行儲存的,也就是說區分不了branch.比如我在a分支git stash save "sss"暫存了一個修改,那麼我切換到b分支,我使用git stash pop 就能把在a分支儲存的"sss"這個修改同步到了b分支上.所以當我們需要在不同的分支上取出不同的分支上儲存的修改,那麼就用到了git stash list,這個命令可以把在所有分支上暫存的資訊顯示出來,然後我們通過 git stash apply stash@{0} 來選擇恢復哪個暫存,stash@{0}這個會在list中列出來.

而我們使用Android studio就太方便了.

在當前工程的任何一個檔案中,點選右鍵,選擇git--> 選擇repository ---> 裡面會列出stash changes和unstash changes命令,一個是儲存修改的命令,一個是恢復修改的命令.

stash changes會讓我們給要儲存的內容輸入一個message,這個和git stash save ""是一樣的


而 unstash changes會列表我們之前儲存過的list


可以很方便的恢復我們之前的儲存的內容.