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 中的命令使用单引号指明 整个短语作为命令行参数。