How to reconcile detached head and origin/master? Already checked out old hash
介绍和搜索
所以我认为我犯了一个严重的错误,我很担心。我已经分析了这些论坛,寻找独立的负责人,我已经接近找到答案,但是这些场景太具体了,不适用于我所在的位置。如果你找到一个特定的线索来回答我的问题,请链接我。
例如:如何协调分离的头与主/源?
那家伙已经做过
小背景:
- 我刚接触过Git;我只自己使用Git
- 我拥有远程存储库
- 需要旧的代码集,这是时间敏感的问题
- 我学了一点编程,现在在没有其他人编码的工作场所使用它(所以我不能完全寻求帮助)
问题:
为了使用工作代码访问旧的提交,我做了(可能是错误的事情):
1 2 | git log git checkout <hash-of-desired-old-commit> |
我继续完成代码。感谢上帝的版本控制!但是,为什么Git这么复杂?如何保存此工作?我现在是一个超然的人。源站/主服务器在未来的某些提交中,最好全部删除。
我尝试过的:
- 将整个文件夹复制并粘贴到其他位置以备备份
git add -A 后接git commit -m"oh shit, detached head commit" 和git rebase master 。git reset --hard HEAD~3 根据这里的建议:签出旧的提交并使其成为新的提交
问题:我该如何协调我的分离头与原点/主人?一旦和解,我是否需要
提前谢谢。
如果您处于分离的头上,并且想要保存该头当前处于的任何状态,只需创建一个分支:
1 | git branch save-this-head |
现在,你有一个指向那个完全分离的头部的分支,这样你就可以安全地检查它,而不会丢失任何东西:
1 | git checkout save-this-head |
号
现在,你不再处于一个独立的状态。您和您的更改是安全的!如果您有任何挂起的更改,您现在应该提交这些更改,这样我们就可以自由移动。
然后,您可以将这个新分支重新设置为其他分支,例如主分支:
1 | git rebase master |
这应该重放主服务器上丢失的提交。因此,将恢复自分离头部以来所做的更改。
如果您只想停留在该
1 2 | git checkout master git reset --hard save-this-head |
。
这将使
I've read that the longer I wait, garbage collection may come and eat my lost branch
号
首先,只要您保持这种状态,head-will指针将继续查看提交对象(这就是为什么它首先被称为"分离的head")。这将阻止任何垃圾收集删除该提交对象(及其所有父对象)。
即使您意外地离开了分离的head状态,使您所指的提交成为"悬空"提交,Git将在考虑允许对对象进行垃圾收集之前将对象保留数周。而仅仅因为垃圾收集并不意味着GC将实际运行,特别是当您不与存储库交互时。
顺便说一句,在将来,每当你想回到你的历史中的一个承诺,并期望做一些事情(不仅仅是寻找),你应该创建一个分支。即使只是暂时的,拥有它可以让你更自由地四处走动,你也不会因为这种超脱的头脑状态而感到气馁:
1 | git checkout -b fix-something <some-old-hash> |