2013-02-22 62 views
10

问题:
我添加了一些文件到我的临时区域。我想暂时保存这些信息。如何?如何保存我的临时区域的当前状态?

背景:
有时候我进行一些较大的重构。提交完整的结果才有意义。
在这个重构过程中,我也做了一些我想独立提交的无关变更。
例如,重构重命名了一个方法。无关的更改在同一个类中的另一个方法的一个参数上修正了拼写错误。
现在,假设我已经将大部分文件添加到暂存区域,但是我发现我忘记了事先未提交任何无关的更改。
将文件添加到临时区域需要一定的时间,因为我检查每一个文件以确保我确实只实现了我想要的。所以,简单地将它们全部从暂存区域移除并不是解决方案。
我想这样做,而不是:

  1. 保存暂存区
  2. 的当前状态,删除所有暂存文件
  3. 阶段无关变化
  4. 提交无关的变化
  5. 重将保存的状态应用于临时区域。

这是不是有可能?

另一种解决方案是多个临时区域的可能性,但我不认为这是可能的。

+0

只有一个暂存区域。而git并没有真正存储它 - 你可以自己做。 – Reactormonk 2013-02-22 08:59:44

+0

你可能想[git stash]](http://git-scm.com/docs/git-stash)并做一些交互式结账/添加,然后 – 2013-02-22 09:01:26

+0

@NevikRehnel:git将如何保存我放入的工作暂存区的现有状态? – 2013-02-22 09:05:23

回答

12

下面的命令链应该做的伎俩

git commit -m "temporary" # save current stage are as an actual commit 
git commit unrelated_files -m "The other feature" 
git stash # hide the rest 
git rebase -i HEAD~2 # change the order of two last commits 
git reset HEAD^ # rollback the "temporary" commit 
git add . # add everything from that commit back to staging 
git stash pop # and return back all initially unstaged stuff 
+0

是的,那很完美。非常感谢! :)它完全符合我对git的使用。无论如何,我还是做了很多重组。 – 2013-02-23 12:36:02

2

你一定要git stash

这将节省你目前的工作,并留下您的目录,如果你做了复位到HEAD。 您现在可以切换分支,对另一个主题做一些工作。

当你准备好你的功能再次合作,与git stash apply

重新申请你的藏匿更改,可以将多个储物箱,git stash list将列出它们,那么你可以选择一个至极适用,如git stash apply @{1}

编辑:

正如@ n​​evik-rehnel在评论中说,你也可以使用交互式增加。

卸下所有内容,使用git add -p来分阶段执行不相关的更改,提交并重新设置所有内容。

+1

不,这是明确*不*我需要的。我正在谈论*暂存区*,而不是我的工作目录。我也不想改变我的分支。 – 2013-02-22 09:11:45

+0

Git存储将保存您的暂存区域并保留一个干净的目录,然后您可以更改文件,执行不相关的提交,隐藏应用,完成工作并提交。 – Intrepidd 2013-02-22 09:12:39

+0

更详细的示例请参见此要点:https://gist.github.com/Intrepidd/d52b7e190aec8cd29854 – Intrepidd 2013-02-22 09:15:52

0

你为什么不能将其保存为一个分支,开始一个新的分支

0

这似乎工作:

  • git commit -m“temp”
  • git stash -u
  • git reset HEAD^
  • git stash保存“MeepMeep!”
  • git stash pop stash @ {1}
相关问题