方法一:
$ git checkout v4.1.0-rc12 branch
(see if it succeeds, if so):
$ git add ... # if / as needed
$ git commit
这可能不会工作,因为git checkout 步骤将拒绝切换到分支,如果(且仅当)所述切换会清除您已经进行的更改。
git checkout 步骤将成功,如果可以的话,继续进行您的更改。
如果git checkout 步骤成功,这是迄今为止处理这一切的最简单方法。如果没有,请继续使用其他方法。
方法二(avi's answer):
$ git checkout -b tempbranch
$ git add ... # as and if needed
$ git commit
这(-b tempbranch)创建了一个新的临时分支,指向您之前分离 HEAD 的提交。 git commit 然后在这个临时分支上创建一个新的提交:
o--o--o <-- v4.1.0-rc12 branch
/
...--o--o
\
o <-- tempbranch
现在你可以git checkout 随心所欲,并且你在tempbranch 上所做的提交被永久存储在你的存储库中(嗯,永久的,除非/直到你删除名称tempbranch),这使你能够复制东西随时获取。
方法三:
$ git stash
$ git checkout v4.1.0-rc12 branch
$ git stash apply # or even "git stash pop" but I prefer "apply"
... check everything out ...
... if it all looks right ...
$ git stash drop # "git stash pop" means "apply and then auto-drop"
git stash 所做的是进行一个不在 any 分支上的提交(嗯,实际上是 两个 提交)。效果与制作临时分支时相同。这留下了在完成后删除非分支的问题,因此git stash drop 删除了保存提交的未命名的非分支。
git stash apply 步骤本质上(尽管它比这更复杂)挑选 git stash 所做的提交,无论你现在在哪里:所以这就像挑选你在 tempbranch 上所做的提交。
注意git stash pop 会自动调用git stash drop,即使git stash apply 的结果是一团糟,如果你pop,你已经丢失了临时提交,但如果你apply,则不会。如果一切顺利顺利没有真正的区别,pop 更方便;这只是留下更好的bread-crumb trail 以防万一出现问题的情况。
(顺便说一句,我个人的偏好是,如果可能的话,首先是方法 1,然后通常是 2,然后是 3,但有时——当我确定它会起作用时——我会更喜欢方法 3 而不是方法 2。)