git stash vs.git branch

git stash vs.git branch,git,Git,在一次演讲中,Daniel Benamy谈到了Git中的工作流: 我当时正在写《大师》,写了一些东西,然后决定暂缓这部作品。我备份了一些提交,然后在我开始我的垃圾工作之前进行了分支 他希望在不丢失当前更改的情况下将其工作状态恢复到以前的时间点。所有的答案都以不同的方式围绕着,比如 git branch -m master crap_work git branch -m previous_master master 这与git stash相比如何?我有点困惑,试图看看这里的不同用例是什么,当它似

在一次演讲中,Daniel Benamy谈到了Git中的工作流:

我当时正在写《大师》,写了一些东西,然后决定暂缓这部作品。我备份了一些提交,然后在我开始我的垃圾工作之前进行了分支

他希望在不丢失当前更改的情况下将其工作状态恢复到以前的时间点。所有的答案都以不同的方式围绕着,比如

git branch -m master crap_work
git branch -m previous_master master
这与git stash相比如何?我有点困惑,试图看看这里的不同用例是什么,当它似乎所有的
git stash
都已经被分支处理了



@:谢谢,这就把事情弄清楚了。我想我会认为“存储”就像一个轻量级的、无名的分支。所以任何隐藏的东西都可以,branch也可以,但需要更多的文字。很好

“隐藏”将工作副本上未提交的“脏”内容隐藏起来,留下一份干净的工作副本

它根本就没有分支。然后,您可以在任何其他分支上应用隐藏。或者,从Git 1.6开始,您可以执行以下操作:

git stash branch <branchname> [<stash>]
git隐藏分支机构[]
要在新分支的顶部应用隐藏,请在一个命令中执行所有操作

因此,如果您还没有致力于“错误”的分支,那么隐藏就非常有效


如果您已经承诺,那么您在问题中描述的工作流是更好的选择。顺便说一句,你是对的:Git非常灵活,随之而来的是重叠的功能。

我对Git的隐藏一直很警惕。如果你藏几次,事情就会变得一团糟。git存储列表将显示您创建的存储的编号列表,以及您提供的消息。。。但问题在于,除非使用一个残酷的git stash clear(将其全部清除),否则无法清理存储。因此,除非你总是不断地为你的藏品提供超级描述性的信息(有点违背藏品的哲学),否则你最终会得到一堆难以理解的藏品

我所知道的唯一办法就是使用gitk——全部并找出藏品。至少这可以让您看到创建隐藏的内容,以及包含在该隐藏中的所有内容的差异

请注意,我使用的是git 1.5.4.3,我认为1.6添加了git stash pop,我想这会应用所选的stash并将其从列表中删除。看起来干净多了


现在,我总是尝试分支,除非我绝对肯定我会在同一天内,甚至在一个小时内,回到那个存储库。

当你恢复存储库时,你的更改会被重新应用,你会继续处理你的代码

要隐藏当前更改,请执行以下操作:

$ git stash save 
Saved "WIP on master: e71813e..."
你也可以有多个藏品。这个储藏室就像一堆东西。每次你保存一个新的藏品,它都会放在堆栈的顶部

$ git stash list
stash@{0}: WIP on master: e71813e..."
注意
stash@{0}
部分?这是你的藏匿ID。你以后需要它来恢复它。我们现在就做吧。每次隐藏时,隐藏ID都会发生变化。stash@{0}指的是您上次进行的隐藏

藏匿

$ git stash apply stash@{0}
应用后,您可能会注意到隐藏物仍然存在。如果你不再需要它,你可以放下它

$ git stash drop stash@{0}
或者,由于隐藏的行为类似于堆栈,因此可以弹出保存的最后一个隐藏:

$ git stash pop
如果要清除所有隐藏的内容,请运行“清除”命令:

$ git stash clear
这很可能是因为你不经常使用藏品。如果您只想快速隐藏更改以便稍后恢复,可以省去隐藏ID

$ git stash
...
$ git stash pop
在将其用于一些真正重要的工作之前,请随意尝试一下


.

如果您正在寻找一个比git stash更合适的工作流,您可能会想看看。它是一个实用工具,用于保存和恢复正常git提交时的各种git工作状态,有效地快照工作树的当前和相关状态以及git状态下显示的所有文件状态

与git stash的主要区别在于:

  • git stash
    狭义地保存脏git状态(修改的文件和索引中添加的文件),而
    git-bottle
    设计用于保存与
    HEAD
    不同的所有内容,并且它以保留方式区分修改、修改和未添加、未添加、未合并的路径,以及完整的重基/合并状态(仅
    .gitignore
    下的路径不保存)
  • git stash
    保存以隐藏需要单独跟踪的对象。如果我在两周前藏了一些东西,我可能记不起来了,而
    git-bottle
    则保存为对当前分支的暂定提交。相反的动作是
    git unbottle
    ,它相当于
    git stash
    pop。可以在存储库之间推送和共享这些提交。这对于远程构建非常有用,因为您在远程服务器中有另一个存储库,用于构建或与其他人协作解决冲突

您是否在没有给出有用名称的情况下创建分支?如果不是的话,我不明白你为什么不对储藏室做同样的事。如果您真的想知道它们包含什么,只需使用git stash show来显示更改了哪些文件,或者使用git stash apply和git diff来查看实际的差异。修剪隐藏与控制分支是一样的。实际上,您可以使用
git stash drop[]
True删除单个隐藏,git已经有git stash drop很长时间了。现在用起来可不像皮塔了。我每天都用它,甚至在很长的一段时间里,现在。有一件事让我心痛。。。你能写出[]的实际样子吗!他们把它放在文档中的那个符号中,但它是否应该是1或{1}或什么并不明显。如果你想引用一个特定的隐藏“N”,请使用隐藏,请参见
git隐藏列表