简介和搜索
所以我认为我犯了一个严重的错误而且我很担心。我已经解析了分离头的论坛,我已经接近找到了答案,但这些场景太具体了,不适用于我所处的位置。如果您找到回答我问题的特定主题,请链接我。
例如:How can I reconcile detached HEAD with master/origin?
这家伙已经完成git rebase -i
,我没有。我尝试过变调,但它没有解决我的问题。
小背景:
问题:
要使用工作代码访问旧提交,我做了(可能是错误的):
git log
git checkout <hash-of-desired-old-commit>
我继续完成代码。谢谢版本控制!但是拍摄,为什么git这么复杂?我该如何保存这项工作?我现在处于一个超然的头脑中。 Origin / Master在将来的某些提交中最好全部删除。
我尝试了什么:
git add -A
后跟git commit -m "oh shit, detached head commit"
和git rebase master
git reset --hard HEAD~3
每个建议:Checkout old commit and make it a new commit 问题:如何将我的分离头与原点/主人调和?一旦调和,我是否需要git push --force
或其他东西(特别是--force
标志)?在这个独立的头上有工作,我读过我等待的时间越长,垃圾收集可能会来吃我失去的分支。对不起,我缺少git的正式培训...我几乎准备好检查原始主人,然后重写代码。
提前谢谢。
答案 0 :(得分:3)
如果您处于分离的HEAD并且想要保存HEAD当前所处的状态,只需创建一个分支:
git branch save-this-head
现在,你有一个指向那个确切分离的HEAD的分支,所以你可以安全地检查它而不会丢失东西:
git checkout save-this-head
现在,你已经不再处于独立的HEAD状态了。您和您的更改是安全的!如果你有任何待定的更改,你现在应该提交,所以我们可以自由移动。
之后,您可以将这个新分支重新绑定到其他内容上,例如主分支:
git rebase master
那应该重播master上缺少的提交。因此,自分离的HEAD以来所做的更改将被恢复。
如果你只是想留在那个save-this-head
状态,然后扔掉以前的主人,你可以结账主人,然后将其重置为保存状态:
git checkout master
git reset --hard save-this-head
这会使master
等同于save-this-head
,从而丢弃master
上的所有其他更改。如果你想推动它,你可能不得不强行推送,以便从遥控器中删除提交。
我读过我等待的时间越长,垃圾收集可能会来吃掉我失去的分支
首先,只要你保持该状态,HEAD将指针将继续查看该提交对象(这就是为什么它首先被称为“分离的HEAD”)。这将阻止任何垃圾收集删除该提交对象(及其所有父对象)。
即使你不小心离开了分离的HEAD状态,让你提到的是“悬空”提交的提交,Git会将对象保持数周,甚至考虑允许对象为垃圾集。并且仅仅因为它受垃圾收集的影响并不意味着GC将实际运行,特别是当您不与存储库交互时。
顺便说一下。在将来,无论何时你想回到历史中的提交并希望做某些事情(除了寻找),你应该只创建一个分支。即使它只是一个临时的,拥有它将允许你更自由地四处走动,你不会因为那个独立的HEAD状态做任何事情而气馁:
git checkout -b fix-something <some-old-hash>