首页 / 知识

git-stash与git-branch

2023-04-13 22:39:00

git-stash与git-branch

git-stash vs. git-branch

在先前的Git问题中,Daniel Benamy谈论了Git中的工作流程:

I was working on master and committed some stuff and then decided I wanted to put that work on hold. I backed up a few commits and then branched from before I started my crap work.

他想将工作状态恢复到以前的时间点,而又不丢失当前的更改。 所有的答案都以各种方式围绕着

1
2
git branch -m master crap_work
git branch -m previous_master master

git stash相比如何? 我有点困惑,试图在看来git stash的所有工作已通过分支处理的情况下,在这里看到不同的用例。

@Jordi Bunster:谢谢,这可以解决问题。 我想我应该考虑"隐藏"像一个轻量级的,无名的分支。 因此,存储可以做的任何事情,分支也可以做,但要增加更多的单词。太好了!


'stash'将工作副本上未提交的,"脏"的东西藏起来,并将其藏起来,为您提供干净的工作副本。

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

1
git stash branch <branchname> [<stash>]

在一个命令中将隐藏项应用到新分支的顶部。

因此,如果您尚未提交到"错误的"分支,则隐藏将非常有用。

如果您已经提交过,那么在问题中描述的工作流程是更好的选择。顺便说一句,您是对的:Git非常灵活,并且随着灵活性的出现而产生了重叠的功能。


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

存放您当前的更改

1
2
$ git stash save
Saved"WIP on master: e71813e..."

您也可以拥有多个存储。藏身像堆一样工作。每次保存新存储时,它都会放在堆栈的顶部。

1
2
$ git stash list
stash@{0}: WIP on master: e71813e..."

注意stash@{0}部分吗?那就是你的藏匿ID。您将需要它来稍后还原它。现在就开始吧。存储区ID随您创建的每个存储区而变化。 stash @ {0}是指您进行的最后一次存储。

申请藏匿处

1
$ git stash apply stash@{0}

应用后,您可能会注意到该存储区仍然存在。如果您不再需要它,可以将其删除。

1
$ git stash drop stash@{0}

或者,由于存储区的行为就像堆栈一样,因此您可以弹出保存的最后一个存储区:

1
$ git stash pop

如果要擦除所有藏匿处,请运行"清除"命令:

1
$ git stash clear

很有可能是您不经常使用藏匿处。如果您只是想快速存储您的更改以在以后还原它们,则可以省略存储ID。

1
2
3
$ git stash
...
$ git stash pop

在将其用于某些非常重要的工作之前,请先对其进行试验。

我还在博客上发布了对此内容的更深入的版本。


我一直对git stash保持警惕。如果藏匿几次,事情会变得混乱。 git stash list将显示您创建的存储的编号列表,并提供消息(如果提供的话)...但是问题在于,除非清除残酷的git stash,否则您无法清理存储: 。因此,除非您总是为自己的藏匿区提供超级描述性信息(这有点与藏匿物的哲学背道而驰),否则您最终将获得一堆无法理解的藏匿处。

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

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

现在,我总是尝试分支,除非我绝对肯定要在同一天(即使在一小时内)回到那个秘密。


如果您寻找的工作流程可能比git stash更合适,则可能需要考虑git-bottle。它是一个实用程序,用于在正常git提交时保存和还原各种git工作状态,从而有效地快照工作树的当前和相关状态以及git状态下显示的所有各种文件状态。

git stash的主要区别:

  • git stash狭义地保存脏git状态(已修改的文件以及索引中添加的文件),而git-bottle旨在保存与HEAD不同的所有内容,并且以保留方式区分已修改,已修改和已修改。未添加,未添加,未合并的路径以及完整的变基/合并状态(仅保存.gitignore下的路径)。
  • git stash将需要单独跟踪的对象保存到存储中。如果我在2周前藏了东西,我可能会不记得了,而git-bottle保存为对当前分支的暂定提交。反向操作是git-unbottle,它等效于git stash弹出键。可以在存储库之间推送和共享这些提交。这对于远程构建很有用,在远程构建中,远程服务器中有另一个存储库仅用于构建,或者用于与其他人协作解决冲突。


工作流程先前谈论Daniel

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢