git-stash用法小結(jié)

  • 發(fā)現(xiàn)有一個類是多余的,想刪掉它又擔(dān)心以后需要查看它的代碼,想保存它但又不想增加一個臟的提交。這時就可以考慮git stash。
  • 使用git的時候,我們往往使用分支(branch)解決任務(wù)切換問題,例如,我們往往會建一個自己的分支去修改和調(diào)試代碼, 如果別人或者自己發(fā)現(xiàn)原有的分支上有個不得不修改的bug,我們往往會把完成一半的代碼commit提交到本地倉庫,然后切換分支去修改bug,改好之后再切換回來。這樣的話往往log上會有大量不必要的記錄。其實如果我們不想提交完成一半或者不完善的代碼,但是卻不得不去修改一個緊急Bug,那么使用git stash就可以將你當(dāng)前未提交到本地(和服務(wù)器)的代碼推入到Git的棧中,這時候你的工作區(qū)間和上一次提交的內(nèi)容是完全一樣的,所以你可以放心的修Bug,等到修完Bug,提交到服務(wù)器上后,再使用git stash apply將以前一半的工作應(yīng)用回來。
  • 經(jīng)常有這樣的事情發(fā)生,當(dāng)你正在進(jìn)行項目中某一部分的工作,里面的東西處于一個比較雜亂的狀態(tài),而你想轉(zhuǎn)到其他分支上進(jìn)行一些工作。問題是,你不想提交進(jìn)行了一半的工作,否則以后你無法回到這個工作點。解決這個問題的辦法就是git stash命令。儲藏(stash)可以獲取你工作目錄的中間狀態(tài)——也就是你修改過的被追蹤的文件和暫存的變更——并將它保存到一個未完結(jié)變更的堆棧中,隨時可以重新應(yīng)用。
需要說明一點,stash是本地的,不會通過git push命令上傳到git server上。

一. stash當(dāng)前修改

$ git stash
Saved working directory and index state WIP on master: 5002d47 our new homepage
HEAD is now at 5002d47 our new homepage

實際應(yīng)用中推薦給每個stash加一個message,用于記錄版本

$ git stash save "test-cmd-stash"
Saved working directory and index state On autoswitch: test-cmd-stash
HEAD 現(xiàn)在位于 296e8d4 remove unnecessary postion reset in onResume function
$ git stash list
stash@{0}: On autoswitch: test-cmd-stash

二. 重新應(yīng)用緩存的stash

1、將緩存堆棧中的第一個stash刪除,并將對應(yīng)修改應(yīng)用到當(dāng)前的工作目錄下
$ git stash pop
2、可以使用git stash apply命令,將緩存堆棧中的stash多次應(yīng)用到工作目錄中,但并不刪除stash拷貝
$ git stash apply

可以使用名字指定使用哪個stash,默認(rèn)使用最近的stash(即stash@{0})

3、 查看現(xiàn)有stash
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
4、 移除stash
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
$ git stash drop stash@{0}
Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)
5、 查看指定stash的diff

可以使用git stash show命令,后面可以跟著stash名字。示例如下:

$ git stash show
 index.html | 1 +
 style.css | 3 +++
 2 files changed, 4 insertions(+)
在該命令后面添加-p或--patch可以查看特定stash的全部diff,如下:

$ git stash show -p
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..d92368b
--- /dev/null
+++ b/style.css
@@ -0,0 +1,3 @@
+* {
+  text-decoration: blink;
+}
diff --git a/index.html b/index.html
index 9daeafb..ebdcbd2 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
+<link rel="stylesheet" href="style.css"/>
6、 從stash創(chuàng)建分支
$ git stash branch testchanges
Switched to a new branch "testchanges"
# On branch testchanges
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   index.html
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   lib/simplegit.rb
#
Dropped refs/stash@{0} (f0dfc4d5dc332d1cee34a634182e168c4efc3359)

該命令會用stash中的修改創(chuàng)建一個新的分支,創(chuàng)建成功后會刪除此stash

7、 暫存未跟蹤或忽略的文件

默認(rèn)情況下,git stash會緩存下列文件:

添加到暫存區(qū)的修改(staged changes)
Git跟蹤的但并未添加到暫存區(qū)的修改(unstaged changes)
但不會緩存一下文件:

在工作目錄中新的文件(untracked files)
被忽略的文件(ignored files)

git stash命令提供了參數(shù)用于緩存上面兩種類型的文件。使用-u或者--include-untracked可以stash untracked文件。使用-a或者--all命令可以stash當(dāng)前目錄下的所有修改。


參考:git-stash用法小結(jié)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 16,196評論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 4,151評論 0 11
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,853評論 1 26
  • 一、電腦本地初始化一個倉庫 1. git init: 初始化一個電腦上本地倉庫 終端進(jìn)入項目目錄,輸入: 該命令將...
    dragon_li閱讀 3,119評論 1 4
  • 之前到別人的一篇博客上評論了下他的打點統(tǒng)計方法,后來很多人來問我,,所以還是決定寫下這篇文章。第一次寫博客,不...
    yy倚樓聽風(fēng)雨閱讀 4,707評論 5 26

友情鏈接更多精彩內(nèi)容