为什么每个分支的git stash都不唯一?


80

我想它允许将更改从一个分支移动到下一个分支,但这就是摘樱桃的目的,如果您不提交所做的更改,也许您不应该将其移动?

我有时在错误的分支上应用了错误的存储,这使我对这个问题感到疑惑。


13
Git缺少允许您将未提交的更改与分支(或头)相关联的内容。当您一次进行一个以上的分支工作时,这一点变得显而易见。正如这里的答案所指出的,存储仍然基于其特性而具有有用的应用程序。git stash-here任何人?
布莱克·泰勒,

Answers:


69

如前所述,如果您需要“按分支存储”,那么您确实希望从现有分支派生新分支。

此外,除了已经提到的存储可以允许您进入正在处理的分支的事实之外,它还允许您在提交所有内容之前切换分支。这对通常意义上的摘樱桃很有用,而不是对您的工作副本进行摘樱桃。

例如,在功能分支上工作时,我经常会注意到与该分支无关的小错误或外观上的杂质。好吧,我马上修复这些。当需要提交时间时,我选择性地提交相关更改,而不提交修订和修饰。相反,我将它们存储起来,这使我可以切换到稳定的次要修复程序分支,然后可以在其中应用该存储项并分别提交每个次要修复程序。(根据有问题的更改,我还将再次存储其中的一些内容,以切换到其他功能分支,在其中应用这些功能。)

这使我在工作时可以进入编程模式,而不必担心代码的适当图书馆管理。然后,当我休息时,我可以回去仔细地将我的零钱整理到所有合适的架子上。

如果存储不是全局的,则这种类型的工作流程将更加困难。


4
我不同意:As mentioned, if you want a “per-branch stash,” you really want a new branch forking off from the existing branch.。特别是,我经常在同一程序的两个版本之间切换,并且完整运行make需要10分钟。能够按分支存储构建的二进制文件非常好。而且我当然不希望二进制文件在日志或分支中。
2015年

为什么?(我想您知道,您只是不知道。)
Aristotle Pagaltzis 2015年

20

从Git 1.6开始,您现在可以使用

git stash branch name_of_new_branch

Git将为您创建一个新分支,并签出!有关更多信息,请参见

  • git书

  • info git-stash并在option =上搜索branch

我猜你可以使用来移动藏匿处

git stash branch <branch | new_branch> [<stash>]

并查看您的藏匿处列表,请使用

git stash list

参考


谢谢!我不知道您可以将隐藏项应用到分支,但这毕竟是行为。在一个分支上有一个存储区,我签出了另一个分支,并在那里做了一些工作。事实证明,我还需要存储一些未完成的更改,然后才能重新掌握。我更新的“ gitk --all”不再显示我的第一个藏身处;我以为可能会被破坏。在第二个分支中完成工作之后,我随后弹出该存储库。之后,我更新的“ gitk --all”再次显示原始存储。
Daniel Miladinov

17

如果您想要从分支运行的“存储”,请执行类似的操作以将您的更改存储在当前分支的新分支上。

git checkout -b new_stash
git commit -a -m "stashed changes"

撤回藏匿处

git reset HEAD^
git branch -d new_stash

git stash尤其有用,因为您可以将更改拉入肮脏的树中,即,如果您有出色的编辑并想要执行

git pull

并且不能,可以存储更改,拉出然后应用存储

git stash
git pull
git stash apply
git stash clear

希望这对您有所帮助!


例如,如果您要隐藏的东西是make在该分支中运行而产生的一堆二进制文件,该怎么办?(每个分支藏匿会节省时间,下一次你在那支做增量构建,但你肯定不希望二进制文件添加到索引)
克莱门特

5

git-stash对我来说最有用的是将尚未签入的更改移到与当前签出的分支不同的分支。

例如-我经常发现自己在错误修复分支上进行了简单的更改;只是发现我正在做的更改比我最初猜测的要复杂。Git-stash是将那组更改移到另一个分支的最简单方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.