git stash 你真的理解正確了嗎?

git stash 保存當(dāng)前工作區(qū)和暫存區(qū)進(jìn)度,回退到上一個(gè) git commit 之后的狀態(tài)
git stash save 'msg' 添加注釋
git stash list 顯示保存的列表
git stash pop 恢復(fù)最新的進(jìn)度到工作區(qū)
git stash pop stash@{1} 恢復(fù)指定的保存列表到工作區(qū)(通過 git stash list 得到 stash@{1})
git stash clear 刪除所有保存的工作進(jìn)度

總結(jié):
git stash 會(huì)將當(dāng)前修改保存(默認(rèn)只會(huì)保存加入到版本管理的文件,Untracked 文件不會(huì)存儲(chǔ)),然后將當(dāng)前工作區(qū)恢復(fù)到最近的一次提交,在此干凈的基礎(chǔ)上可以做其它工作,最后將工作區(qū)修改恢復(fù)

注意:恢復(fù)工作區(qū)修改,不是完全恢復(fù)到保存時(shí)候的狀態(tài),只是將修改恢復(fù),在 stash 保存之后做的工作仍將保留



使用場(chǎng)景:

場(chǎng)景一:

先弄清楚幾個(gè)事情:

  1. 線上用 master 分支
  2. 開發(fā)用 dev 分支
  3. bug 修復(fù)用 bugfix 分支(該分支可以不存在)

假如現(xiàn)在只有一個(gè) master 分支,并且開發(fā)也是在 master 上(哦,糟糕的分支職責(zé)劃分),
線上發(fā)生一個(gè)緊急bug 需要修復(fù),又不想將目前的修改和bug 修復(fù)一塊提交

傳統(tǒng)方式:新建分支,在新分支上拉取 master 最新代碼并修復(fù),然后合并到 master 推送

解決: 使用 stash
git stash 保存當(dāng)前修改
...bug 修復(fù)提交
git stash pop 恢復(fù)修改,繼續(xù)工作
方便在于不用為了避免當(dāng)前修改工作而另外建立分支

問題來了:
問題一: git stash pop 之后, bugfix 的內(nèi)容還存在嗎?
答: 存在
問題二: bugfix 和我們保存之前的修改沖突了怎么辦?
答: 和 git merge 一樣,會(huì)自動(dòng) merge, 并提示發(fā)生了沖突


image.png

場(chǎng)景二:

還是上面那個(gè)例子,只不過現(xiàn)在開發(fā)是在 dev 分支上

我們知道,dev 分支上有修改未提交,我們是不能切換到 別的分支上的,不管是 master 分支上還是 bugfix 分支上,一般情況下,我們需要提交 dev 分支上的修改再切換,那么 dev 分支上多了一次無畏的提交記錄,如果不想加一次不必要的提交呢?

解決:用 git stash 保存當(dāng)前修改,那么 dev 分支狀態(tài)回退到 最近的一次提交,就是說這個(gè)時(shí)候 dev 分支是沒有發(fā)生變化的(變化被保存到 stash 里了),那么就可以立刻切換分支
在 master 或 bugfix 分支上解決完 bug 后,就可以切換回 dev 分支,用 git stash pop 恢復(fù)之前的修改,繼續(xù)工作。

總結(jié):
git stash 之后,版本庫狀態(tài)會(huì)恢復(fù)到最近的一次提交完的狀態(tài)
git stash 之后,做的修改,在 git stash pop 之后,仍然會(huì)保留,合并當(dāng)前狀態(tài)和 stash 狀態(tài),有沖突會(huì)默認(rèn) merge, 并提示沖突文件
git stash 默認(rèn)只會(huì)保存已經(jīng)加入到版本管理的文件

再說一句:
假如 A 文件已經(jīng)被加入版本庫,做以下操作:
git stash 保存
刪除 A 文件
git stash pop 之后, A 文件是被刪除掉的,不會(huì)再顯示出來

也就是說,最終的狀態(tài)是 pop 出來的狀態(tài)和當(dāng)前狀態(tài)的合并(merge)

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

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

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,863評(píng)論 9 163
  • 安裝Git Git的下載地址:Git官網(wǎng)下載地址 Git本地倉庫和命令 配置用戶 下載完Git后,右鍵會(huì)有一個(gè)Gi...
    TokyoZ閱讀 4,649評(píng)論 1 7
  • 聲明:這篇文章來源于廖雪峰老師的官方網(wǎng)站,我僅僅是作為學(xué)習(xí)之用 Git簡(jiǎn)介 Git是什么? Git是目前世界上最先...
    橫渡閱讀 4,150評(píng)論 3 27
  • Git 是目前最流行的分布式版本控制系統(tǒng)之一。 版本控制指的是,記錄每次版本變更的內(nèi)容和時(shí)間等細(xì)節(jié),保留各版本之間...
    神齊閱讀 1,520評(píng)論 0 7
  • 分支管理 分支就是科幻電影里面的平行宇宙,當(dāng)你正在電腦前努力學(xué)習(xí)Git的時(shí)候,另一個(gè)你正在另一個(gè)平行宇宙里努力學(xué)習(xí)...
    bo_song閱讀 781評(píng)論 0 1

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