有没有什么办法可以运行git stash
让它创建一个我的文件的存储空间,但也要保留它们,以便我可以继续编辑它们。保存更改,同时做一个`git存储'
我的动机是,我想为我正在做的一些工作创建一个临时快照,以便我可以回头看看它,如果我弄糟了。但是,我的代码目前还没有处于我想要实际提交它的状态,如果我的测试正常工作,我想扔掉旧版本,而不会记录在我的历史记录中。
很明显,我可以制作一份我的回购目录所在的目录,并在其中一个目录中工作,但有没有更好的方法?
有没有什么办法可以运行git stash
让它创建一个我的文件的存储空间,但也要保留它们,以便我可以继续编辑它们。保存更改,同时做一个`git存储'
我的动机是,我想为我正在做的一些工作创建一个临时快照,以便我可以回头看看它,如果我弄糟了。但是,我的代码目前还没有处于我想要实际提交它的状态,如果我的测试正常工作,我想扔掉旧版本,而不会记录在我的历史记录中。
很明显,我可以制作一份我的回购目录所在的目录,并在其中一个目录中工作,但有没有更好的方法?
有(只要我知道)没有办法做到这一点与git stash
与一个命令,但你可以做到这一点与git stash
两次使用。
要运行的命令是:
git stash
git stash apply
第一个就是,你的本地修改,并将它们推到藏匿,从而从头部删除它们。第二个从堆栈中获取更改,并将它们放回到HEAD中,但也会将其副本留在堆栈中。
你可以在一个命令中通过'git stash save'做一个git别名,紧接着'git stash apply'。 – eestrada
我认为在这种情况下更好的解决方案是创建主题分支。
在Git中,分支很便宜。
如果您有要“藏”离开是为了回来上班后做:
git checkout -b myStashBranch
git add .
git commit -m "savepoint when I foo..."
然后,只需切换回你当前的分支:
git checkout -
并继续处理手头的任务...
如果您想要简单地丢弃刚刚保存的“隐藏”工作:
git branch -D myStashBranch
只是想补充一点,如果您担心“提交失败”(即代码未编译或未完全实用的提交),则可以在合并到“master”之前始终压缩或重新排序提交',或者重新登上'master'。 – Tonio
对于工作流程的你正在谈论的类型,我会说这是最好创建一个临时主题分公司工作。
git checkout -b couldgowrong
如果你喜欢你的变化,当你这样做,那么只需rebase
您的主题分支到您的master
分支并删除该分支; rebase
将保持您的历史清洁(即没有双父合并)。
git rebase master couldgowrong
git checkout master
git branch -D couldgowrong
如果你不喜欢自己的更改,然后简单地跳过rebase
并删除特性分支。
你有两个选择:
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
如果你会有规律的做这些不是你应该做的别名。
这听起来像你试图伪造一个提交。你为什么要伪造一个提交而不是只做一个提交? –
@BradMace如果他想做备份,但不想用无意义的提交混淆他的提交历史呢? –
@ JosephK.Strauss我并不打算说他错了,只是想明白他的目标是什么。 (我认为他在5分钟的编辑窗口中编辑了更多信息)。在这种情况下,我的建议是在提交主要回购之前进行提交,然后压缩它们。 –