2015-12-14 62 views
9

有没有什么办法可以运行git stash让它创建一个我的文件的存储空间,但也要保留它们,以便我可以继续编辑它们。保存更改,同时做一个`git存储'

我的动机是,我想为我正在做的一些工作创建一个临时快照,以便我可以回头看看它,如果我弄糟了。但是,我的代码目前还没有处于我想要实际提交它的状态,如果我的测试正常工作,我想扔掉旧版本,而不会记录在我的历史记录中。

很明显,我可以制作一份我的回购目录所在的目录,并在其中一个目录中工作,但有没有更好的方法?

+2

这听起来像你试图伪造一个提交。你为什么要伪造一个提交而不是只做一个提交? –

+0

@BradMace如果他想做备份,但不想用无意义的提交混淆他的提交历史呢? –

+1

@ JosephK.Strauss我并不打算说他错了,只是想明白他的目标是什么。 (我认为他在5分钟的编辑窗口中编辑了更多信息)。在这种情况下,我的建议是在提交主要回购之前进行提交,然后压缩它们。 –

回答

10

有(只要我知道)没有办法做到这一点与git stash与一个命令,但你可以做到这一点与git stash两次使用。

要运行的命令是:

git stash 
git stash apply 

第一个就是,你的本地修改,并将它们推到藏匿,从而从头部删除它们。第二个从堆栈中获取更改,并将它们放回到HEAD中,但也会将其副本留在堆栈中。

+4

你可以在一个命令中通过'git stash save'做一个git别名,紧接着'git stash apply'。 – eestrada

4

我认为在这种情况下更好的解决方案是创建主题分支。

在Git中,分支很便宜。

如果您有要“藏”离开是为了回来上班后做:

git checkout -b myStashBranch 
git add . 
git commit -m "savepoint when I foo..." 

然后,只需切换回你当前的分支:

git checkout - 

并继续处理手头的任务...

如果您想要简单地丢弃刚刚保存的“隐藏”工作:

git branch -D myStashBranch 
+0

只是想补充一点,如果您担心“提交失败”(即代码未编译或未完全实用的提交),则可以在合并到“master”之前始终压缩或重新排序提交',或者重新登上'master'。 – Tonio

1

对于工作流程的你正在谈论的类型,我会说这是最好创建一个临时主题分公司工作。

git checkout -b couldgowrong 

如果你喜欢你的变化,当你这样做,那么只需rebase您的主题分支到您的master分支并删除该分支; rebase将保持您的历史清洁(即没有双父合并)。

git rebase master couldgowrong 
git checkout master 
git branch -D couldgowrong 

如果你不喜欢自己的更改,然后简单地跳过rebase并删除特性分支。

1

你有两个选择:

git stash store -m "WIP on $(git rev-parse --abbrev-ref HEAD): $(git log -1 --format="%h %s")" $(git stash create) 

git add -A; git stash --keep-index 

有优点/缺点两者。第一个并没有混淆你的工作目录的状态,但是相当冗长(尽管把它变成别名会减轻这个影响)。第二个更简单,但意味着所有的更改都将进行(这可能会或可能不会被期望)。

的这些好处在

git stash 
git stash apply 

的是,所有的文件将需要两次修改。如果文件数很多,或者如果您使用的IDE可能会在每次文件更改后尝试重新生成,则这可能会导致速度问题。如果这不是一个问题,而不是通过一切手段使用它。

这本来是很好的Git提供

git stash --keep-working-dir 

如果你会有规律的做这些不是你应该做的别名。