在做一个`git stash`

时间:2015-12-14 21:02:27

标签: git

我有什么方法可以运行git stash让它创建我的文件藏匿处,但也保留它们以便我可以继续编辑它们。

我的动机是,我想创建一些我正在做的工作的临时快照,这样如果我搞砸了,我就可以回到它。但是,我的代码目前还没有我想要实际提交它的状态,如果我的测试按照我的预期运行,我想抛弃旧版本,而不是在我的历史中。

显然我可以复制我的仓库所在的目录,并在其中一个目录中工作,但有更好的方法吗?

5 个答案:

答案 0 :(得分:16)

有(据我所知)没有办法用git stash使用一个命令执行此操作,但您可以使用git stash两次使用。

您要运行的命令是:

git stash
git stash apply

第一个采取您的本地更改并将它们推送到存储区,从而将它们从HEAD中删除。第二个从堆栈中获取更改,并将它们放回HEAD中,但也将它们的副本留在您的存储堆栈中。

答案 1 :(得分:4)

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

在Git中,分支机构很便宜。

如果你有工作,你想“藏匿”回来以后再做这个:

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

然后,只需切换回您当前所在的分支:

git checkout -

继续完成手头的任务......

如果你想要简单地扔掉你刚刚保存的那些“藏匿”的作品:

git branch -D myStashBranch

答案 2 :(得分:3)

您有两种选择:

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

如果你打算做任何规律,你应该做别名。

答案 3 :(得分:1)

对于您正在讨论的工作流类型,我想说最好创建一个临时主题分支来工作。

git checkout -b couldgowrong

如果您在完成后喜欢自己的更改,那么只需将rebase主题分支到您的master分支并删除分支; rebase将保持您的历史记录清洁(即没有双父合并)。

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

如果您不喜欢您的更改,只需跳过rebase并删除主题分支。

答案 4 :(得分:0)

尝试一下,它救了我

如果在“ JetBrains” IDE(IntelliJ,PyCharm等)中使用,

右键单击项目的主父文件夹,然后选择“本地历史记录”,然后选择“显示历史记录”:

enter image description here

现在可以在左侧的新窗口中根据左侧的时间查看项目中一直存在的所有文件,并且当然可以使它们还原或查看差异。