我在一个尚未准备好承诺的分支上,但我想尝试一些实验性的东西。我想隐藏分支的当前状态,以便在出现问题时可以恢复。
当我执行git stash时,它会将分支恢复到之前的提交,因此工作树是干净的,我可以签出一个新的实验分支。一旦进入新分支,我运行git stash apply以获取原始状态以尝试我的实验性更改。
我做了一些更改并决定废弃它们。当我结帐到第一个分支并运行git stash apply我得到一个错误,我在实验分支中做的所有更改都在那里。如何在实验变更之前获得原始状态?感谢。
例如:
test.txt
的文件并执行初始提交。 git checkout -b branch1
并在文本文件类型"分支1更改"。 git stash
来保护当前分支的未提交状态。它删除了我刚刚做的,工作树是干净的。 git checkout -b experiment
。 git stash apply
并恢复原状态。 git checkout branch1
。现在来自实验分支的更改已经存在,当我尝试git stash apply
恢复旧状态时,我收到错误。我想知道正确的方法来简单地保护一个分支的当前状态,这个状态还没有准备好为了尝试实验而提交。
答案 0 :(得分:3)
--amend
选项进行后续提交,或者使用交互式rebase压缩它。 (或其他方式,视情况而定。)
(我不是说你不能使用存储 - 这毕竟是一种临时提交的机制。但正如你所观察到的那样,以这种方式使用存储不是'自然或直观,这是因为这不是什么藏匿的设计。存储是为了保留您的WIP和分阶段的变化,而你转移做其他事情,这与检查有些不同 - 指出您的更改,以便您可以继续工作,然后恢复到当前状态。)
答案 1 :(得分:1)
Git阶段本身的创建部分是为了处理您当前的确切场景。
要添加Mark的答案,在您的情况下,您甚至可能不需要存储或提交。您可以暂存当前已完成的工作,然后尝试一些事情,这将改变您的工作目录,但不阶段。然后,如果您对这项工作感到满意,可以将其添加到舞台上。否则,您可以将工作目录中已更改的文件重置为上次暂存时的状态。工作流程看起来像这样:
obj, _ = Ingredient.objects.get_or_create(**ingredient)
如果实验确实有效,那么您可以再次执行# work work work
git add test.txt
# try something out, modify test.txt
# if it didn't work out, then just reset test.txt to the stage
git checkout -- test.txt
,将更改添加到舞台并提交。