如何以分离头模式将文件提交到分支
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。)
我遇到了一个奇怪的情况,我检查了我的分支 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。)