網站首頁 編程語言 正文
當在一個分支的開發工作未完成,卻又要切換到另外一個分支進行開發的時候,除了commit原分支的代碼改動的方法外,我覺得git?stash是一個更加便捷的選擇。?
git stash(git儲藏)可用于以下情形:
- 發現有一個類是多余的,想刪掉它又擔心以后需要查看它的代碼,想保存它但又不想增加一個臟的提交。這時就可以考慮git stash。
使用git的時候,我們往往使用分支(branch)解決任務切換問題,例如,我們往往會建一個自己的分支去修改和調試代碼, 如果別人或者自己發現原有的分支上有個不得不修改的bug,我們往往會把完成一半的代碼commit提交到本地倉庫,然后切換分支去修改bug,改好之后再切換回來。這樣的話往往log上會有大量不必要的記錄。其實如果我們不想提交完成一半或者不完善的代碼,但是卻不得不去修改一個緊急Bug,那么使用git stash就可以將你當前未提交到本地(和服務器)的代碼推入到Git的棧中,這時候你的工作區間和上一次提交的內容是完全一樣的,所以你可以放心的修Bug,等到修完Bug,提交到服務器上后,再使用git stash apply將以前一半的工作應用回來。
- 經常有這樣的事情發生,當你正在進行項目中某一部分的工作,里面的東西處于一個比較雜亂的狀態,而你想轉到其他分支上進行一些工作。問題是,你不想提交進行了一半的工作,否則以后你無法回到這個工作點。解決這個問題的辦法就是git stash命令。儲藏(stash)可以獲取你工作目錄的中間狀態——也就是你修改過的被追蹤的文件和暫存的變更——并將它保存到一個未完結變更的堆棧中,隨時可以重新應用。
?步驟如下:
- 添加改動到stash。在原分支?git stash save -a "messeag",網上很多很多資料都沒有加 -a 這個option選項,我想他們的代碼開發可能都是在原代碼上進行修改吧。而對于在項目里加入了代碼新文件的開發來說,-a選項才會將新加入的代碼文件同時放入暫存區。
恢復改動。如果你要恢復的是最近的一次改動,git stash pop?即可,我用這個用的最多。如果有多次stash操作,那就通過git stash list查看stash列表,從中選擇你想要pop的stash,運行命令git stash pop stash@{id}或者?git stash apply stash@{id}即可。這方面網上的資料挺多的。
刪除stash。git stash drop <stash@{id}>?如果不加stash編號,默認的就是刪除最新的,也就是編號為0的那個,加編號就是刪除指定編號的stash。git stash clear?是清除所有stash,整個世界一下子清凈了!
-
git stash pop?與?git stash apply <stash@{id}>?的區別。
當我使用git stash pop 和 git stash apply 幾次以后,我發現stash list 好像比我預計的多了幾個stash。于是我便上網去了解了一下這兩個命令的區別。原來git stash pop stash@{id}命令會在執行后將對應的stash id 從stash list里刪除,而 git stash apply stash@{id} 命令則會繼續保存stash id。對于有點強迫癥的我來說,是容不下越來越多的陳舊stash id 仍然存在的,所以我更習慣于用git stash pop 命令。
?git?stash?使用實例 :
生成測試環境
// 初始化倉庫,進行一次提交
# git init stash-test
# cd stash-test && echo 'hello'> readme
# git add . && git commit -m "init"
// 修改工作區和暫存區
# echo 'need to be stashed' >> readme
# git add readme
// 查看此時工作區和版本庫區別
# git diff HEAD
diff --git a/readme b/readme
index ce01362..55d6c28 100644
--- a/readme
+++ b/readme
@@ -1 +1,2 @@
hello
+need to be stashed
執行stash及恢復
// 暫存當前狀態
# git stash
// 查看當前工作區和版本庫區別
# git diff HEAD
==> 此時什么都沒有輸出,說明工作區被重置為HEAD指向內容了
// 顯示已暫存列表
# git stash list
stash@{0}: WIP on master: 440e976 init
// 恢復暫存區和工作區進度
# git stash pop --index stash@{0}
// 查看工作區和版本庫區別
# git diff HEAD
diff --git a/readme b/readme
index ce01362..55d6c28 100644
--- a/readme
+++ b/readme
@@ -1 +1,2 @@
hello
命令詳解:
git stash 對當前的暫存區和工作區狀態進行保存。
git stash list 列出所有保存的進度列表。
git stash pop [--index] [<stash>] 恢復工作進度
原文鏈接:https://www.cnblogs.com/chenyablog/p/7902700.html
相關推薦
- 2022-07-15 C++面向對象之類和對象那些你不知道的細節原理詳解_C 語言
- 2022-11-05 Android?View轉換為Bitmap實現應用內截屏功能_Android
- 2022-11-27 通過源碼分析Golang?cron的實現原理_Golang
- 2022-09-13 Python實現創建模塊的方法詳解_python
- 2022-06-02 Kubernetes關鍵組件與結構組成介紹_云和虛擬化
- 2022-09-25 【報錯:No module named pytest】
- 2022-07-09 Python如何保留float類型小數點后3位_python
- 2023-10-17 npm 下載依賴項顯示proxy代理錯誤network ‘proxy‘ config is set
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支