1

我最终遇到了一个奇怪的情况,我在我的分支 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

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

4

2 回答 2

2

首先,从您之前的提交创建新分支,签出新创建的分支,更新您的文件,然后提交更改。之后,您可以将更改合并到任何分支。

于 2016-10-20T09:44:12.633 回答
2

方法一:

$ 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的回答):

$ 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永久存储在您的存储库中(嗯,永久存储,除非/直到您删除 name 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的提交(实际上是两次提交)。效果与制作临时分支时相同。这留下了在完成后删除非分支的问题,因此删除了保存提交的未命名的非分支。git stash drop

无论您现在身在何处,这git stash apply一步本质上(尽管它比这更复杂)都会挑选提交的提交git stash:所以这就像挑选您所做的提交一样tempbranch

请注意,即使 的结果是一团糟,git stash pop自动调用也会丢失您的临时提交,如果是,但不是。如果一切顺利则没有真正的区别并且更方便;这只是留下更好的面​​包屑痕迹以防万一事情变糟的情况。git stash dropgit stash applypopapplypop


(顺便说一句,我个人的偏好是,如果可能的话,首先是方法 1,然后通常是 2,然后是 3,但有时——当我确定它会起作用时——我更喜欢方法 3 而不是方法 2。)

于 2016-10-20T09:59:27.213 回答