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

How to commit files in detached head mode to a branch

我遇到了一个奇怪的情况,我检查了我的分支 v4.1.0-rc12 上的先前提交。我修改了一些文件,我想把它提交到 v4.1.0-rc12 分支。

现在 HEAD 指针处于分离模式,因为我检查了之前的提交,我如何在分离模式下将此更改提交到 v4.1.0-rc12 分支?

我希望我已经完成 "revert" 而不是 "checkout" 提交哈希。

是否有任何可能的解决方案来提交编辑后的文件并将其添加到我的 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 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 步骤成功,这是迄今为止处理这一切的最简单方法。如果没有,请继续使用其他方法。


方法二():

$ 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 上所做的提交将永久存储在你的存储库中(好吧,永久 unless/until 你删除名称 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。)