git stash
- 1. git stash
- 2. reflog
命令概覽
git stash save "WIP:xxxxx" # save后可以跟筆記,WIP:work in process
git stash list # 查看存儲狀態棧的條目
git stash pop # 當前工作目錄和索引還原至最近一次save操作的內容
git stash apply # git stash apply + git stash drop = git stash pop
git stash drop
git stash save --include-untracked # 儲藏未被追蹤的文件
git stash save --all
git stash branch newbranch # 基于儲藏條目生成一個新的分支
git reflog show # 顯示HEAD引用的變更日志
git reflog branch_name # 顯示某個分支頭部引用的變更日志
HAED@{yesterday} # 支持時間限定負作為事件(提交、變更頭部)的別名
git stash show -p stash@{3} # 查看某個stash 的具體內容
1. git stash
典型工況1: 中斷工作流
典型工況2: 在臟的樹中進行拉取(pull into a dirty tree)
git stash save 保存當前索引和工作目錄的狀態,并且將當前索引和工作目錄的內容清除并匹配到當前分支的頭部。git stash 命令默認就是git stash save.
git stash pop 執行與stash相反的操作,實現了一個存儲狀態棧。pop將當前工作目錄和索引還原至最近一次save操作的內容。pop操作會合并當前工作目錄和索引中的現有變更,所以可能需要手動解決沖突。
git stash list 可以查看存儲狀態棧的內容。
git stash drop 當pop 操作成功后, Git會自動將存儲狀態棧中保存的狀態刪除, 即git stash list 的條目會少一條。但是有沖突產生時,需要手動解決沖突,然后手動git stash drop。刪除最上面那條狀態。
git stash pop = 成功的git stash apply + git stash drop . 可以靈活的應用git stash apply 來將它應用到幾個不同的提交中(在不同的分支下pop/apply 不知道會出現什么問題)
git stash save --include-untracked 儲藏未被追蹤的文件。
git stash save --all 搜集所有未被追蹤的文件,以及在.gitignore 和 exclude 文件中明確忽略的文件。
注意:對于更復雜的存儲操作,想要選擇性地選取希望存儲地部分,可以使用-p,或者-patch 選項
git stash branch newbranch 基于儲藏條目生成時地提交,然后將保存的儲藏內容轉換到一個新的分支。只是一個功能,但實際作用不大。
提示:對于stash 一般作為臨時存放點,切記濫用儲藏。
2. reflog
引用日志記錄非裸版本庫中分頭部的改變,任何修改引用 或者 更改分支頭部 的git 操作都會git 記錄下來。可以手動的配置是否開啟reflog.
git reflog show 命令一次只顯示一個引用的內容,默認引用是HEAD。分支名也是引用,可以展示任何分支的引用日志。
git reflog branch_name
引用日志中 如 HEAD@{7} 為每一件更改提供方便的別名。 大括號支持 類英文限定符號。
當你不確定自從某件事情發生以來中間發生了什么事情,但你知道一個小時/一天前他還是好的。就可以使用HEAD@{yesterday} 來恢復相應的提交。
git 針對引用支持大量的基于日期的限定符:yesterday, noon, midnight, tea, week, month, A.M. P.M. 等標識。
注意點:shell 中的命令使用單引號指明 整個短語作為命令行參數。