假設您正在為產品新的功能編寫/實現代碼,當正在編寫代碼時,突然出現軟件客戶端升級。這時,您必須將新編寫的功能代碼保留幾個小時然后去處理升級的問題。在這段時間內不能提交代碼,也不能丟棄您的代碼更改。 所以需要一些臨時等待一段時間,您可以存儲部分更改,然后再提交它。
在Git中,隱藏操作將使您能夠修改跟蹤文件,階段更改,并將其保存在一系列未完成的更改中,并可以隨時重新應用。
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: main.py
no changes added to commit (use "git add" and/or "git commit -a")
現在,要切換分支以進行客戶升級,但不想提交一直在做的工作; 那么可以把當前工作的改變隱藏起來。 要將一個新的存根推到堆棧上,運行git stash命令。
$ git stash
Saved working directory and index state WIP on master: ef07ab5 synchronized with the remote repository
HEAD is now at ef07ab5 synchronized with the remote repository
現在,工作目錄是干凈的,所有更改都保存在堆棧中。 現在使用git status命令來查看當前工作區狀態。
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
現在,可以安全地切換分支并在其他地方工作。通過使用git stash list命令來查看已存在更改的列表。
$ git stash list
stash@{0}: WIP on master: ef07ab5 synchronized with the remote repository
假設您已經解決了客戶升級問題,想要重新開始新的功能的代碼編寫,查找上次沒有寫完成的代碼,只需執行git stash pop命令即可從堆棧中刪除更改并將其放置在當前工作目錄中。
$ git status -s
Administrator@MY-PC /D/worksp/sample (master)
[jerry@CentOS project]$ git stash pop
上述命令將產生以下結果:
$ git stash pop
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: main.py
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (e713780380632c142ed5833a9087aca883a826fa)
Administrator@MY-PC /D/worksp/sample (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: main.py
no changes added to commit (use "git add" and/or "git commit -a")
可以看到,工作區中修改的文件(main.py)又顯示了。現在我們就可以繼續編寫上次編寫了未完成的代碼。