目录
- 1,介绍
- 场景1:
- 场景2:
- 2,常用命令
- 2.1,基础
- 2.2,进阶
- 1,存储时指定备注
- 2,通过索引来操作指定的存储
- 3,修改存储规则
- 2.3,查看 stash 修改的具体内容
1,介绍
场景1:
如果正在A分支做开发,但 B 分支的代码测出bug需要修改,所以需要从A分支切换到B分支。
此时可这样处理:在A分支 add + commit 之后,再切换到 B 分支。但这样做有2个问题:
- 增加了不必要的 commit,虽然之后可以通过
git commit --amend
来修改, - A 分支的功能写了一半,此时 commit,到时再切换回 A 分支时还得查看 commit 才能知道之前修改的内容,比较麻烦。
场景2:
在 A 分支开发到一半发现使用错分支了,应该在 B 分支开发,需要将当前已修改的内容得全部平移到B分支,同时不影响当前分支和版本库。
上面的情况,最好用的办法就是 stashes 存储栈,它的所有操作不会影响到版本库。
2,常用命令
stashes 存储栈,遵循后进先出。
2.1,基础
# 查看帮助(所有命令列表)
git stash -h
# 将当前工作区和暂存区的代码存储到 stashes栈中。
git stash
# 取出最近的一条 stash,并在 stashes 栈中删除。
git stash pop
# 取出最近的一条 stash,stashes 栈中不删除。
git stash apply# 不取出,直接在 stashes 栈中删除最近的一条 stash
git stash drop
所以,git stash pop
= git stash apply
+ git stash drop
# 查看 stashes 列表
git stash list
# 清空 stashes 栈
git stash clear
所以,
场景1,可以直接在 A 分支执行 git stash
,在 B 分支开发完之后再切换到 A 分支,执行 git stash pop
即可。
场景2,可以直接在 A 分支执行 git stash
,切换到 B 分支后执行 git stash pop
即可。
2.2,进阶
1,存储时指定备注
git stash save 测试stash
# or
git stash push -m 测试stash
2,通过索引来操作指定的存储
# 操作 stash@{1}
git stash pop 1
# or 这里一定要加引号,否则报错。
git stash pop "stash@{1}"
git stash apply
和git stash drop
同理。
3,修改存储规则
默认存储规则:不包括工作区新增文件(未被跟踪的文件)和 .gitignore
忽略的文件,包括工作区和暂存区的修改。
-u
或--include-untracked
表示包括未被跟踪的文件。
git stash save 备注 -u
-a
或--all
表示包括.gitignore
忽略的文件。
git stash save 备注 -a
-k
或--keep-index
表示不包括暂存区的修改。
git stash save 备注 -k
2.3,查看 stash 修改的具体内容
查看命令 git stash show
并没有介绍,是因为 vscode 自带的版本管理非常好用,可以详细的查看每个 stash 做了哪些修改。
可以看到不止是 stashes,每条 commit 也能随时查看。
以上。