代码之家  ›  专栏  ›  技术社区  ›  Will Robertson

git stash vs.git branch

git
  •  85
  • Will Robertson  · 技术社区  · 18 年前

    在一个 previous Git question ,Daniel Benamy在谈论Git中的工作流:

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

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

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

    这和我的相比如何 git stash ? 我有点困惑,试图看看当它 喜欢一切 暂存 does已经由分支处理


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

    4 回复  |  直到 9 年前
        1
  •  111
  •   Jordi Bunster    18 年前

    “隐藏”是指未提交的文件 肮脏的 “把东西放在你的工作副本上,然后把它藏起来,留下一份干净的工作副本。

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

    git stash branch <branchname> [<stash>]
    

    要在新分支的顶部应用隐藏,请在一个命令中执行所有操作。

    因此,如果您没有承诺 错误的

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

        2
  •  49
  •   random    14 年前

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

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

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

    注意 stash@{0}

    藏匿

    $ git stash apply stash@{0}
    

    $ git stash drop stash@{0}
    

    或者,由于隐藏的行为类似于堆栈,因此可以弹出保存的最后一个隐藏:

    $ git stash pop
    

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

    $ git stash clear
    

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

    $ git stash
    ...
    $ git stash pop
    

    I also have a more in-depth version of this posted on my blog .

        3
  •  11
  •   Yunnosch    5 年前

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

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

    请注意,我使用的是Git1.5.4.3,我认为1.6添加了GitStashPop,我想这将应用所选的隐藏 和 将其从列表中删除。看起来干净多了。

        4
  •  3
  •   Dan Aloni    11 年前

    如果您正在寻找一个比git stash更合适的工作流,那么您可能希望 git-bottle . 它是一个实用工具,用于保存和恢复正常git提交时的各种git工作状态,有效地快照工作树的当前和相关状态,以及 全部的

    与 git stash

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