在一个 上一个 Git 问题, ,Daniel Benamy 正在谈论 Git 中的工作流程:

我当时正在做 master 工作,并提交了一些东西,然后决定暂停这项工作。我备份了一些提交,然后从开始我的垃圾工作之前分支出来。

他想要将自己的工作状态恢复到之前的某个时间点,而又不丢失当前的变化。所有的答案都以各种方式围绕着类似的事情

git branch -m master crap_work
git branch -m previous_master master

这与 git stash?我有点困惑试图看看这里有什么不同的用例 似乎 喜欢一切 git stash does 已经通过分支处理了…


@乔迪·邦斯特: :谢谢,事情就清楚了。我想我会认为“隐藏”就像一个轻量级的、无名的分支。所以 stash 能做的任何事情,branch 也能做,但需要更多的文字。好的!

有帮助吗?

解决方案

‘藏匿’带走了未承诺的东西,”肮脏的“在您的工作副本上添加内容,然后将其隐藏起来,为您留下一个干净的工作副本。

它根本没有真正的分支。然后,您可以将隐藏的内容应用到任何其他分支的顶部。或者,从 Git 1.6 开始,您可以执行以下操作:

git stash branch <branchname> [<stash>]

将存储应用到新分支之上,所有这些都通过一个命令完成。

所以,如果你还没有承诺“,stash 会很有用”错误的” 分支还没有。

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

其他提示

当您恢复存储时,您的更改将被重新应用,并且您可以继续处理代码。

隐藏您当前的更改

$ 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

如果您想清除所有隐藏内容,请运行“clear”命令:

$ git stash clear

您很可能不经常使用存储库。如果您只想快速存储更改以便稍后恢复,则可以省略存储 ID。

$ git stash
...
$ git stash pop

在将其用于一些真正重要的工作之前,请随意尝试一下存储。

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

我总是对 git stash 保持警惕。如果你多次藏匿,事情往往会变得混乱。git stash list 将显示您创建的存储的编号列表,如果您提供了消息,则会显示消息...但问题在于,除非使用残酷的 git stash clear (将它们全部删除),否则您无法清理存储。因此,除非你总是为你的藏品提供超级描述性的信息(有点违背藏品的哲学),否则你最终会得到一堆难以理解的藏品。

我知道找出哪个是哪个的唯一方法是使用 gitk --all 并发现隐藏的地方。至少这可以让您看到存储是在哪个提交上创建的,以及该存储中包含的所有内容的差异。

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

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

如果您正在寻找可能比 git stash 更合适的工作流程,您可能需要看看 git 瓶. 。它是一个实用程序,用于将各种 git 工作状态保存和恢复为正常 git 提交,有效地快照工作树的当前和相关状态,并 全部 git status 下显示的各种文件状态。

与以下主要区别 git stash:

  • git stash 狭义地保存脏 git 状态(修改的文件和在索引中添加的文件),而 git-bottle 旨在节省 一切 这不同于 HEAD, ,并且它以保留的方式区分已修改、已修改且未添加、未添加、未合并路径以及完整的变基/合并状态(仅在 .gitignore 未保存)。
  • git stash 保存到需要单独跟踪的隐藏对象。如果我两周前藏了一些东西,我可能不记得了,而 git-bottle 另存为 暂时提交到当前分支. 。其相反的动作是 git-unbottle 这相当于 git stash 流行音乐。可以在存储库之间推送和共享这些提交。这对于远程构建非常有用,在远程服务器中您有另一个存储库,仅用于构建或与其他人协作解决冲突。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top