git stash命令:保存、删除、弹出、取消、列表、应用
这篇文章的主题是git stash
命令。这是一个方便的命令,你会比你想象的更多地使用它,甚至比git add和git commit更多,所以学会它可以提高你的开发效率。
1. 什么是git stash?
git stash
命令暂时储存你正在进行的修改。
这很有用,因为有些命令只有在提交了当前的修改,工作树被清理后才能执行,比如一个分支修改。
在这些情况下,git stash
可以用来暂时保存你的工作状态,然后你可以处理一系列的命令,回来继续工作。
当我们发出git stash
命令时,Git会收集所有当前未暂存和暂存的修改(索引),并将它们存储在一个新的暂存对象中。
然后它把它们暂时存放在一个叫做stash
的独立位置。
当stash运行时,当前分支处于最后提交的状态。在这种状态下,你可以自由地使用几乎所有的 Git 命令。
让我们通过一些实际的例子来看看使用git stash
命令的不同方法。
2. 使用推送命令创建一个新的储藏库
push
命令是git stash
的开始:它保存了当前的修改,如果你愿意,你也可以输入一个单独的信息来区分这个stash。
我们以前使用git stash save
命令,但现在有一个新的git stash push
命令,增加了很多功能。
所以现在我们将使用push
命令。
push
增加的主要功能是能够对未跟踪的文件、所有文件以及特定的文件或目录运行stash。
像这样使用它
$ git stash push -m [message]
让我们看看运行的结果
让我们从头开始。git switch
命令被中止了,因为我们在1.md
文件中增加了一个新的改动。
Git建议我们如果要切换的话,就提交或藏匿。
我使用git stash
命令,它清除了工作树,使我可以执行git switch
命令。
push
命令可以用来存放任何文件,包括使用-u
选项的未跟踪文件和使用-a
选项的被忽略文件。
你也可以指定一个特定的文件或目录名来推送,如下所示。
与上面的例子不同,我们没有用-m
选项指定消息,所以你可以看到,Git为我们生成了一个带有提交ID的消息。
3. 使用list命令获取储藏室列表
正如我们在前面的例子中简单看到的,list
命令将显示你保存的储藏库的列表。
它将列出在所有分支中创建的所有储藏库,最近的储藏库的编号更接近于0
。
该命令可以像这样使用
$ git stash list
让我们再创建两个储藏库,一个在main
分支,一个在develop
分支,然后运行list
命令。
git stash list
命令显示总共有三个储藏库列表。
由于我们从 develop
分支保存了 2 个储藏库,没有任何信息,所以通过看列表不可能知道有什么变化。
不要忘记push
命令的-m
选项,以应对这样的情况。
4. 用show -p命令查看储藏室的内容
如果你只看到一个储藏室列表, 就像我们刚才看到的例子, 你可能不知道每个储藏室里都存储了什么变化.
这就是show -p
命令的用武之地。
show
命令只是告诉你存储在储藏库中的修改的文件名和修改的行数。
有了-p
选项,你可以运行git diff
命令来获得文件内部修改的更详细的信息。
该命令看起来像这样 如果你不输入[stash-number]
,它将自动针对最近的储藏室,编号0
运行。
$ git stash show -p [stash-number]
要看到执行的结果,在2.md
文件中添加新的内容,并发出push
命令。
现在发布show
命令。
如上所示,根据你是否有 p
选项,输出结果会有所不同。
5. 用apply命令恢复你的储藏库
一旦你用push
命令保存了你的存储空间,并且你已经完成了,你需要做一些事情来撤销你的改变。
你可以使用apply
和pop
命令来做这个。
在这些命令中,apply
命令可以确保在恢复储存库后不会删除已保存的储存库。
该命令看起来像这样 如果你没有指定[stash-number]
,它将自动针对最近的储藏库,编号0运行。
$ git stash apply [stash-number]
让我们来看看执行的结果
在用 for stash
信息保存了储藏库后,我们用 apply
命令导入了它。apply
命令运行git status
命令,它显示工作副本的当前状态。
来显示工作树的当前状态。
如果你在apply
之后检查储藏库列表,你可以看到恢复的储藏库仍然在那里。
6. 使用pop
命令在恢复后删除存储空间
和apply
命令一样, pop
命令也是用来撤销缓存变化的, 它在恢复后删除了现有的储藏库。
命令如下,同样,如果你不指定[stash-number]
,它将自动针对最近的储藏库,编号0
运行。
$ git stash drop [stash-number]
执行时,它看起来像这样
我们再次推送了一个带有stash信息的stash。然后我们用pop
命令来恢复修改,得到了和使用apply
命令时一样的输出。
唯一的区别是,这个储藏库已经被删除,不再出现在储藏库列表中。
7. 使用drop
或clear
命令删除一个储藏库而不应用它
drop
命令会删除某个特定的储藏库中的修改,而不把它们应用到工作树中。
它与下面的命令一起使用,除非指定[stash-number]
,否则会自动针对最近的储藏库,编号为0
。
$ git stash drop [stash-number]
让我们看看pop
命令的结果。
你可以看到,for stash
信息中的藏书,即编号为0的藏书,已经被删除。
如果你不再需要贮藏品列表中的所有贮藏品并想删除它们,你可以用clear
命令来做。
该命令看起来像这样
$ git stash clear
你可以像这样运行它
在执行了clear
命令之后,所有的储藏室列表都被删除了。
8. 如何使用stash branch命令将当前的修改转移到一个新的分支上
有时你需要将当前分支中的所有修改转移到一个新的分支中,并在那里进行工作。
这可以通过 git add 命令 和 git checkout/git switch 命令 的组合来实现。
然而,git stash branch
命令使这项任务只需一条命令即可完成。
使用下面的命令,如果你不指定[stash-number]
,它将自动针对最近的stash,编号0
运行。
$ git stash branch [new-branch-name] [stash-number]
你可以像这样运行它
9. 结束语
由于许多Git命令都是在提交状态下执行的,所以git stash
命令是我每天都要接触的命令之一。
我希望这篇文章能帮助你提高你的日常开发效率。
