git stash
開發人員常常遇到這種情況:花了幾天時間一直在做一個新功能,已經改了差不多十幾個檔案,突然有一個bug需要緊急解決,然後給一個build測試組。在Git問世之前基本上靠手動備份,費時且容易出錯。
git stash命令簡而言之就是幫助開發人員暫時擱置當前已做的改動,倒退到改動前的狀態,進行其他的必要操作(比如釋出,或者解決一個bug,或者branch,等等),之後還可以重新載入之前擱置的改動,很cool吧?
首先,用git add把所有的改動加到staging area。
git add .
接著用git stash把這些改動擱置。
git stash
到這裡,當前工作平臺就回復到改動之前了。該幹嘛幹嘛,此處省略1萬字。
需要找回之前擱置的改動繼續先前的工作了?
git stash apply 即可。
也可以用 git stash list 來檢視所有的擱置版本(可能擱置了很多次,最好不要這樣,容易搞混)
在出現一個擱置棧的情況下,比如如果你想找回棧中的第2個,可以用 git stash apply stash@{1}
如果想找回第1個,可以用 git stash pop
如果想刪除一個stash,git stash drop <id>
刪除所有stash,git stash clear
轉載二:
我第一次用這個命令時被坑過,經過是這樣的:我發現有一個類是多餘的,想刪掉它又擔心以後需要檢視它的程式碼,想儲存它但又不想增加一個髒的提交。這時我想到了git
stash
,於是那一天我執行了下這個命令就回去睡覺了。 第二天我繼續在這個目錄裡工作,coding了半天才發現前一天的修改都不見了,暫存區裡也沒有任何昨天修改的紀錄。是我忘了儲存了嗎?
相信git老手們早就看出問題所在了,修改消失了並不是因為我忘了儲存,而是git stash
在儲存完當前工作目錄和暫存區以後,會用HEAD重置這兩者。因為我昨天的修改沒有提交,HEAD指向的是前天的版本,所以stash以後工作目錄和暫存區就會被前天的的版本所重置。
正確的做法應該是在git stash
後再執行git
stash apply
,當前的工作目錄就恢復回來了。
git stash apply
相當於利用過去貯藏(stashed)的工作目錄快照,恢復當前的工作目錄。如果工作目錄在貯藏之後發生了變化,恢復時就會產生衝突(conflict),這種情況下git
stash apply
會對工作目錄進行merge操作。
和merge一樣,git stash apply之前要保持當前目錄是乾淨的(沒有未提交的改變),否則會保錯:
error: Your local changes to the following files would be overwritten by merge: Please, commit your changes or stash them before you can merge.
git stash apply
只能恢復工作目錄,如果想把暫存區也按照貯藏時的暫存區恢復的話,可以加上--index
,如果暫存區恢復時發生衝突了會怎麼辦呢?嘿嘿,它會直接報錯不允許你這麼做:
相關文章
- Git -- StashGit
- git stash save與git stash push區別Git
- git stash回退Git
- Git Stash用法Git
- git stash 怎麼用?Git
- git stash用法詳解Git
- 【Git】stash 用法總結Git
- git stash使用一則Git
- git分支管理和stashGit
- git-stash簡單用法Git
- git stash 引發得事故Git
- Two useful scenarios of git stashiOSGit
- git stash 命令簡單使用Git
- git 解決衝突 —— git stash 當前修改Git
- Git-命令列-使用 git stash 暫存程式碼Git命令列
- Git 隱藏程式碼篇stash(三)Git
- Git基於指定stash儲藏建立分支Git
- git常用命令stash詳細解釋。Git
- git stash關於程式碼中bug的查詢使用Git
- Git衝突:commit your changes or stash them before you can merge.GitMIT
- 解決 Git 更新本地衝突:commit your changes or stash them before you can mergeGitMIT
- 痞子衡嵌入式:第一本Git命令教程(7.1)- 清理之快取(stash)Git快取
- Git取消合併(merge)、暫存修改(stash)、回退到某個版本(reset)的使用方法Git
- Git衝突:commit your changes or stash them before you can merge. 解決辦法GitMIT
- Git更新本地倉庫及衝突"Commit your changes or stash them before you can merge"解決GitMIT
- [Git] Git整理(四) git rebase 的使用Git
- Git:Git常用操作Git
- Git-Git教程Git
- Git Note - git tagGit
- [git]git 常用操作Git
- git reset 和 git revertGit
- git revert與git resetGit
- git merge & git rebaseGit
- Git之"git diff"命令Git
- 【git教程】快速掌握gitGit
- git 命令之git rebase 用法&git rebase介紹Git
- git revert .vs. git reset .vs. git rebaseGit
- 【git學習五】git基礎之git分支Git