我有什么方法可以运行git stash
让它创建我的文件藏匿处,但也保留它们以便我可以继续编辑它们。
我的动机是,我想创建一些我正在做的工作的临时快照,这样如果我搞砸了,我就可以回到它。但是,我的代码目前还没有我想要实际提交它的状态,如果我的测试按照我的预期运行,我想抛弃旧版本,而不是在我的历史中。
显然我可以复制我的仓库所在的目录,并在其中一个目录中工作,但有更好的方法吗?
答案 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)