关于git:如何调和分离的头和origin / master?

How to reconcile detached head and origin/master? Already checked out old hash

介绍和搜索

所以我认为我犯了一个严重的错误,我很担心。我已经分析了这些论坛,寻找独立的负责人,我已经接近找到答案,但是这些场景太具体了,不适用于我所在的位置。如果你找到一个特定的线索来回答我的问题,请链接我。

例如:如何协调分离的头与主/源?

那家伙已经做过git rebase -i,我没有做过。我试过重新平衡,但没能解决我的问题。

小背景:

  • 我刚接触过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根据这里的建议:签出旧的提交并使其成为新的提交

问题:我该如何协调我的分离头与原点/主人?一旦和解,我是否需要git push --force或其他东西(特别是--force标志)?这个超脱的脑袋里有工作,我读到我等的时间越长,垃圾收集就可能来吃掉我丢失的树枝。对不起,我确实缺乏任何正式的培训…我几乎准备好了,只需签出源代码管理器,然后重写代码。

提前谢谢。


如果您处于分离的头上,并且想要保存该头当前处于的任何状态,只需创建一个分支:

1
git branch save-this-head

现在,你有一个指向那个完全分离的头部的分支,这样你就可以安全地检查它,而不会丢失任何东西:

1
git checkout save-this-head

现在,你不再处于一个独立的状态。您和您的更改是安全的!如果您有任何挂起的更改,您现在应该提交这些更改,这样我们就可以自由移动。

然后,您可以将这个新分支重新设置为其他分支,例如主分支:

1
git rebase master

这应该重放主服务器上丢失的提交。因此,将恢复自分离头部以来所做的更改。

如果您只想停留在该save-this-head状态,并丢弃前一个主控形状,则只需签出主控形状,然后将其重置为保存状态:

1
2
git checkout master
git reset --hard save-this-head

这将使master相当于save-this-head,从而放弃了master的所有其他变化。如果您想要推送这个,那么您可能需要强制推送,以便从远程删除提交。

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>