您好,登錄后才能下訂單哦!
本篇內容主要講解“Git工作區儲藏兼談分支管理中的問題怎么解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Git工作區儲藏兼談分支管理中的問題怎么解決”吧!
小伙伴遇到的問題是這樣的:
現在有一個master分支,master分支中有一個文件叫01.txt,該文件中只有一行數據,然后對01.txt執行add和commit,然后再從master分支中創建出一個新的分支fa,切換到fa分支上,然后向01.txt中再添加一行數據,添加成功之后,不做任何事情,再切換回master分支,此時用cat命令查看01.txt文件,發現竟然有兩行數據,按理說master中的01.txt只有一行數據,而fa中的01.txt有兩行數據,整個過程如下圖:
要搞清楚這個問題,得先明白下面這個問題:
cat命令和git無關,就是用來查看文件的,我為了演示方便使用了cat命令,這和直接用記事本打開文件查看效果是一樣的。
可能眼尖的小伙伴已經發現端倪了,我們上面這個操作少了兩個步驟,那就是add/commit,fa分支中的數據修改之后直接切換回了master,而沒有add/commit。正常情況下(修改數據后add/commit),如果master和fa分支中的數據不一致,我們執行了git checkout -
進行分支的切換,這個時候工作區中的文件內容也是會跟著變化的(大家可以通過cat命令或者直接在記事本中打開工作區的文件來查看這種變化),但是如果我在fa分支中修改了文件卻沒有add/commit就切換回master,此時如果工作區的文件變化了,可能會導致我在fa分支中的修改丟失,因此,這個時候工作區的文件就沒有變化,即工作區的文件內容還是fa分支中修改的內容。
解決這個問題,我們有兩種方案,請小伙伴們往下看。
第一種解決方案就是在某一個分支修改文件之后,先add并且commit之后再去切換分支,這個操作就比較簡單了,我這里就不再演示了。
第二種解決方案就是儲藏(Stashing),儲藏適用在如下場景中:
當我在一個分支fa中修改了文件,但是還沒有完全改好,此時我并不想add/commit,但是這個時候有一個更急迫的事情在另外一個分支fb上需要我去做,我必須要切換分支。
在這樣一個場景中,如果我直接切換分支,會出現如下兩個問題:
1.從fa切換到fb之后,工作區的代碼還是fa的代碼,不符合我的工作要求。
2.假設我不在乎問題1,在fb中直接修改工作區的代碼,等我在fb中修改完后提交后再回到fa,會發現我之前的代碼丟失了。
為了解決這個問題,Git給我們提供了儲藏(Stashing)。
現在假設一開始master和fa分支中的文件內容都是一致的,而且兩個分支的工作區都是干凈的,即沒有東西需要add/commit,此時,我在master中修改了文件,修改完成之后,執行git status
命令我們看到master中有東西需要add/commit,此時我想切換到fa分支中去,但是并不想對master分支執行add/commit,這個時候我們可以執行如下命令,先將當前分支中的文件儲藏起來:
$ git stash
OK,執行完git stash
命令之后,再執行git status
,我們發現此時master分支已經是干凈的了,此時我們可以愉快的切換到fa分支中去了,切換到fa分支之后,我們發現master中的修改并沒有干擾到fa分支,當我們完成了fa分支中的工作之后,再回到master分支,此時執行如下命令可以恢復剛剛儲藏的數據:
$ git stash apply
上面這個命令執行完之后,master分支中的工作區中的文件就恢復了,此時執行git status
就可以看到又有數據需要add/commit了。
我們也可將工作區儲藏多次,這個時候我們可以執行如下命令來查看儲藏:
$ git stash list
執行效果如下:
git stash apply
表示恢復最近一次儲藏,如果我們想恢復到之前的某一次儲藏,可以加上儲藏的名字,如下:
$ git stash apply stash@{1}
還有一些其他的關于儲藏的命令:
$ git stash pop
執行效果和git stash apply
一樣,不同的是,這里執行完之后,會將棧頂的儲藏移除。
$ git stash drop stash@{4}
最后一個參數是指儲藏的名字。
到此,相信大家對“Git工作區儲藏兼談分支管理中的問題怎么解決”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。