git-stash与git-branch

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弹出键。可以在存储库之间推送和共享这些提交。这对于远程构建很有用,在远程构建中,远程服务器中有另一个存储库仅用于构建,或者用于与其他人协作解决冲突。


推荐阅读

    git设置编码|git语言设置

    git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

    git权限设置|git用户权限

    git权限设置|git用户权限,,1. git用户权限1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。也就是说自己机器上有一个git仓库

    git pull 指定某一个文件或文件夹

    git pull 指定某一个文件或文件夹,文件,版本,1、要解决的问题 默认情况下,git pull 操作会把远程仓库的所有最新数据更新到本地。但是,如果

    GitHub网页版指南

    GitHub网页版指南,分支,你的,什么是GitHub 步骤一创建仓库 步骤二打开Issue 步骤三创建分支 步骤四提交 步骤五上推

    GitHub从fork到pull request之基础流程

    GitHub从fork到pull request之基础流程,分支,远端, 之前接触了github,但每次使用都还要查阅一些基础用法,因此打算在此总结回顾一下。

    hbuilderx如何安装GIT插件 hbuilderx安装GIT插件教程【详解】

    hbuilderx如何安装GIT插件 hbuilderx安装GIT插件教程【详解】,插件,安装,教程,小伙伴,更多,在这,  很多小伙伴在使用hbuilderx的时候,想知道怎

    理光GRDIGITALII怎么样

    理光GRDIGITALII怎么样,外壳,按键,手感,设置,显示,闪光,  理光GRDIGITALII整体黑色的外观,机身质感明显的磨砂涂层,扎实的镁合金外壳,厚实的橡胶

    fatal: “Could not read remote” -- Mac下使用Git Push显示权限错误

    fatal: “Could not read remote” -- Mac下使用Git Push显示权限错误,终端,我的,我昨天在提交项目的时候遇到了这个问题:在终端输入git pu

    svn 及 git patch 文件

    svn 及 git patch 文件,文件,可以用,项目开发中经常会遇到A同事编写的代码需要B同事review,然后由C同事提交,patch文件是一种很好的代码传递

    怎么安装Git并配置SSH?(教程)

    怎么安装Git并配置SSH?(教程),密钥,安装,配置,输入,命令,密码,Git是一款非常强大的版本控制工具,它简单易用、功能强大,广泛用于软件开发、项目管理