今天正在Coding,组长来了个临时BUG修复。功能已经Coding到一半,这时候想起之前看过的Git使用stash保存工作。然后就去了解了一下相关,并做一下记录。
1、What
stash指令有什么用?
stash 是 git 的常用命令之一,用于管理临时工作,包括新增保存,查看,移除,等等。
2、How
这里总结一下常用姿势。
- 所有命令
git stash list [<options>]
git stash show [<stash>]
git stash drop [-q|--quiet] [<stash>]
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [-m|--message <message>]]
[--] [<pathspec>…]]
git stash clear
git stash create [<message>]
git stash store [-m|--message <message>] [-q|--quiet] <commit>
- 存储
git stash
git stash push -m "Im stash log" //添加备注的方式
还有文章介绍使用 git stash save -m "log"
,但是官方文档说deprecated了,推荐使用 push
。
- 查看
git stash list //显示所有的stash
git stash show stash@{id} //查看某个stash的详细情况,所有文件的状态
- 恢复
git stash pop //恢复最近的一次
git stash pop stash@{id} //恢复某一次stash
- 移除
git stash drop stash@{id} //移除某一stash
git stash clear //清除所有stash
3、Note
- 不会保存未track的文件,比如新建了文件,但未add
- 每次最新stash的记录,下标都为0,之前的stash下标+1,所以恢复指定stash的时候注意了。
- 恢复可能会产生冲突。官方原文说明:
Applying the state can fail with conflicts; in this case, it is not removed from the stash list. You need to resolve the conflicts by hand and call git stash drop manually afterwards.
恢复是使用auto-meger进行合并的,当meger产生冲突时,pop操作会恢复工作内容,并标记冲突,但是不移除stash list的记录。当你解决冲突后,需要手动drop移除掉stash list的记录。当你解决冲突后,需要手动drop移除掉stash。
这样能够完全保证用户的工作内容不会受到冲突影响。若你担心有什么问题,或者不想这样解决冲突,你可以完全抛弃本次pop,直接reset回到之前stash时的节点,再pop出来,这样就不会有冲突问题。在本次工作完成后,push提交时候再进行冲突处理。
网友评论