git-stash与git-branch

Wil*_*son 87 git

之前的Git问题中,Daniel Benamy正在讨论Git中的工作流程:

我正在做主人并且做了一些事情,然后我决定把这项工作搁置一边.我支持了一些提交,然后在我开始我的垃圾工作之前分支.

他希望将自己的工作状态恢复到以前的某个时间点而不会失去他目前的变化.所有答案都以各种方式围绕着类似的东西

git branch -m master crap_work
git branch -m previous_master master
Run Code Online (Sandbox Code Playgroud)

这比较如何git stash?我有点困惑,试图看看这里的不同用例,看起来一切git stash都已经通过分支来处理......


@ 霍尔迪本斯特:谢谢,这将清除的东西了.我想我会认为"藏匿"就像一个轻量级,无名的分支.所以任何藏匿都可以做,分支也可以,但更多的话.太好了!

Jor*_*ter 108

'stash' 会将未提交的" "内容写在您的工作副本上,然后将其藏起来,留下干净的工作副本.

它根本没有真正的分支.然后,您可以将存储应用于任何其他分支的顶部.或者,从Git 1.6开始,您可以:

git stash branch <branchname> [<stash>]
Run Code Online (Sandbox Code Playgroud)

在一个命令中全部应用存储在新分支的顶部.

所以,如果你还没有致力于" 错误的 "分支,那么stash的效果很好.

如果您已经提交,那么您在问题中描述的工作流程是更好的选择.顺便说一句,你是对的:Git非常灵活,并且具有这种灵活性,功能重叠.

  • 请参阅`git stash list`了解您的藏匿处名称. (9认同)
  • 另外,`git stash show -u`显示了对工作副本的存储区别. (7认同)
  • Gregg,是的,你可以:git stash save(藏匿名称).如果你经常使用它会使它更有用,所以你知道每个存储的作用.您可以使用git stash show -p(name)来显示存储的补丁. (6认同)

Ari*_*jan 48

还原您的存储时,将重新应用您的更改,并继续处理您的代码.

隐藏当前的更改

$ git stash save 
Saved "WIP on master: e71813e..."
Run Code Online (Sandbox Code Playgroud)

您还可以拥有多个藏匿处.存储就像堆栈一样工作.每次保存新的存储时,它都会置于堆栈顶部.

$ git stash list
stash@{0}: WIP on master: e71813e..."
Run Code Online (Sandbox Code Playgroud)

注意stash@{0}部分?那是你的藏匿ID.你以后需要它来恢复它.我们现在就这样做.存储ID随着您的每个存储而变化.stash @ {0}指的是你最后一次藏匿.

申请藏匿

$ git stash apply stash@{0}
Run Code Online (Sandbox Code Playgroud)

您可能会注意到在应用它之后存储仍然存在.如果您不再需要它,可以放弃它.

$ git stash drop stash@{0}
Run Code Online (Sandbox Code Playgroud)

或者,因为存储就像一个堆栈,你可以弹出你保存的最后一个存储:

$ git stash pop
Run Code Online (Sandbox Code Playgroud)

如果你要擦去所有的藏匿处,请运行'clear'命令:

$ git stash clear
Run Code Online (Sandbox Code Playgroud)

很可能你不经常使用藏匿处.如果您只想快速存储更改以便以后还原它们,则可以省略隐藏ID.

$ git stash
...
$ git stash pop
Run Code Online (Sandbox Code Playgroud)

在将其用于一些非常重要的工作之前,请随意尝试藏匿.

我在博客上发布了更深入的版本.


web*_*mat 8

我总是对git stash保持警惕.如果你藏了几次,事情往往会变得混乱.git stash list会显示你创建的stashes的编号列表,如果你提供了它们就会显示消息......但问题在于你不能清除stashes,除非有一个残酷的git stash clear(将它们全部删除) .因此,除非你总是肛门为你的藏物提供超级描述性的信息(有点违背藏匿者的哲学),你最终会得到一堆难以理解的藏匿处.

我知道的唯一方法是弄清楚哪一个是使用gitk --all并发现了藏匿处.至少这可以让你看到创建存储的提交,以及该存储中包含的所有内容的差异.

请注意,我正在使用git 1.5.4.3,我认为1.6添加了git stash pop,我想这将应用所选的存储并将其从列表中删除.这似乎更清洁.

现在,我总是试图分支,除非我绝对肯定我会在同一天回到那个藏匿处,即使在一小时内也是如此.

  • 实际上,您可以使用`git stash drop [<stash>]`删除单个存储 (16认同)
  • 你做分支而不给它们有用的名字吗?如果没有,那么我不明白你为什么不用藏匿做同样的事情.如果你真的想知道它们包含什么,你只需使用git-stash show来显示哪些文件被更改,或者使用git-stash apply和git-diff来查看实际的差异.保持被削减的状态与控制分支是一样的. (3认同)