Loading... ## GIT STASH命令 `git`是一个非常好用的版本控制仓库,在开发代码的时候经常会碰到这种情景:写着写着代码,你的同事过来告诉你,有一个bug需要停下手头的工作立即修复,那当前这些未提交的代码怎么办呢?提交吧,又没写完,不提交吧,这些修改又会丢失。之前使用SVN的时候我会先将做过修改的文件备份出来,进行bugfix之后再将备份出来的文件合并进去。现在有了git,可以非常方便地使用`git stash`命令。 `git stash`命令可以将当前的修改先存起来,再将代码变更为`HEAD`,等操作完毕又可以将存起来的修改释放出来。stash是储存贮存的意思,很形象,可以方便的将代码贮存下来以备后用。 `git stash`一共有9个子命令: 1. *git stash* **list** 2. *git stash* **show** 3. *git stash* **drop** 4. *git stash* **pop**和*git stash* **apply** 5. *git stash* **branch** 6. *git stash* **push**,push可缺省 7. *git stash* **clear** 8. *git stash* **create** 9. *git stash* **store** 注:在旧版本中是没有`git stash push`命令的,而是`git stash save`,两个用法基本一样,`git stash save`不支持对某个文件的stash,新版本这两个命令都支持。 最常用的是`push`和`pop`,其次是`show`、`list`、`clear`和`drop`,剩下的`branch`、`create`和`store`我很少用。 ## git stash的各个子命令 ### git stash push `push`子命令,看名字也能知道这个命令是用来将本次未存档的压入到贮存栈中,在存档之后,会将所有修改恢复到`HEAD`提交。 将修改内容存档并添加注释信息: ```bash git stash push -m "comment message" # save命令在最后跟上注释信息即可,无需加-m git stash save "comment message" ``` 将指定文件的修改内容存档: ```bash git stash -m "stash a single file" path/to/file # save命令不能单独将指定文件存档 ``` ### git stash pop 有了`push`自然要有`pop`,`pop`命令是将最近一次存档的修改释放出来,并将其从存档库中移除。 ```bash git stash pop # 上面这行命令是下面的简写,stash@{0}即为最近一次的存档 git stash pop stash@{0} # 将前一次存档的修改释放出来 git stash pop stash@{1} # 上面一行可以简写为: git stash pop 1 ``` #### git stash apply `apply`命令是将最近一次存档的修改释放出来,但不从存档库中移除 ### git stash list `list`命令可以看到所有存档的修改。 执行命令可以看到诸如下图的结果 ![BaiduHi_2018-1-25_21-19-28.png][1] `stash@{0}`为最近一次的修改,按`j`和`l`可以上下滚动,`q`退出,`WIP`是`work in progress`的缩写。 下面#后面是产生本行文本的命令 ```bash stash@{0}: On master: third m # git stash push -m "thrid m" stash@{1}: WIP on master: 9180057 first commit # git stash push stash@{2}: WIP on master: 9180057 first commit # git stash push ``` ### git stash show `show`命令可以看到每个存档的修改内容。 ```bash # 查看最近一次修改的内容 git stash show # 查看最近一次修改的内容 git stash show stash@{0} # 查看前一次修改的内容 git stash show stash@{1} ``` 执行命令可以看到诸如下图的结果 ![BaiduHi_2018-1-25_21-42-40.png][2] 可以看到存档的修改添加了如下两行 ```md # modify1 ``` ### git stash drop `drop`命令可以将存档库中某次存档的修改从库中删除。 ```bash # 移除最后一次存档的修改 git stash drop # 移除最后一次存档的修改 git stash drop stash@{0} # 移除前一次存档的修改 git stash drop stash@{1} # git stash drop 1 这种用法是错误的 ``` ### git stash clear `clear`命令可以清空所有存档的修改。 ```bash git stash clear ``` ## Git Stash的完整用法 ``` 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> ``` ## Reference 1. [https://git-scm.com/docs/git-stash](https://git-scm.com/docs/git-stash "https://git-scm.com/docs/git-stash") [1]: https://tva3.sinaimg.com/large/007oxmFJly1fwswhskuqsj30ao01pjr7.jpg [2]: https://tva1.sinaimg.com/large/007oxmFJly1fwswi6pw2qj30ah05jdfs.jpg Last modification:January 9, 2020 © Allow specification reprint Like If you think my article is useful to you, please feel free to appreciate
One comment
我经常stash~ ٩(ˊᗜˋ*)و