如何以分离头模式将文件提交到分支

问题描述 投票:1回答:2

我最终遇到了一种奇怪的情况,即我在分支v4.1.0-rc12上签出了先前的提交。我已经修改了一些文件,并且想要将其提交到v4.1.0-rc12分支。

既然自从我签出了先前的提交以来,HEAD指针就处于分离模式,如何在分离模式下将此更改提交给v4.1.0-rc12分支?

我希望我已经完成了“还原”而不是“检出”提交哈希。

有没有可能的解决方案来提交已编辑的文件并将其添加到我的v4.1.0-rc12分支中?

这是我的“ git reflog”显示的内容

 441bfac HEAD@{0}: commit: Resolved #110
 dc00e4f HEAD@{1}: checkout: moving from v4.1.0-rc12 to dc00e4f
 2542748 HEAD@{2}: commit: Login & SignUp revamp (Broken)
 dc00e4f HEAD@{3}: commit: Resolved #109 and #110
 4472914 HEAD@{4}: commit: Resolved #108

我想将441bfac保存到v4.1.0-rc12

任何帮助或想法都将不胜感激。

git git-commit git-detached-head
2个回答
2
投票

方法1:

$ 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步骤成功,则这是到目前为止处理所有问题的最简单方法。如果不是,请继续使用其他方法。


方法2(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为止),这使您能够从中复制内容它随时随地。


方法3:

$ 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分支上的提交(实际上是two提交)。效果与创建临时分支的效果相同。剩下的问题是在完成操作后删除非分支,因此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。]


2
投票
首先,从上一次提交创建新分支,签出到新创建的分支,更新文件,然后提交更改。之后,您可以将更改合并到任何分支。
© www.soinside.com 2019 - 2024. All rights reserved.