如何调和分离的头部和起源/大师?已经签出旧哈希

Jen*_*ngs 5 git github git-detached-head

介绍和搜索

所以我认为我犯了一个严重的错误,我很担心。我已经解析了论坛上的超脱头脑,我已经接近找到答案了,但是场景太具体了,不适用于我所处的位置。如果您找到回答我问题的特定线程,请链接我。

例如:如何将分离的 HEAD 与 master/origin 协调?

那家伙已经做了git rebase -i,而我没有。我试过变基,但它没有解决我的问题。

小背景

  • 我是 git 新手;我只自己使用 git
  • 我拥有远程存储库
  • 需要旧代码集,这是时间敏感的问题
  • 我学习了一些编程,并在没有其他人编码的工作场所使用它(所以我不能完全寻求帮助)

问题:

要使用工作代码访问旧提交,我做了(可能是错误的事情):

git log
git checkout <hash-of-desired-old-commit>
Run Code Online (Sandbox Code Playgroud)

我继续完成代码。感谢上帝的版本控制!但是射击,为什么 git 这么复杂?我如何保存这项工作?我现在处于一个超脱的头脑中。Origin/Master 在未来的一些提交中最好全部删除。

我尝试过的

  • 将整个文件夹复制并粘贴到其他地方只是为了备份
  • git add -A跟着git commit -m "oh shit, detached head commit"git rebase master
  • git reset --hard HEAD~3根据此处的建议:检查旧提交并使其成为新提交

问题:我如何将我的超然头与原点/大师调和?一旦和解,我是否需要git push --force或其他什么(特别是--force旗帜)?这个独立的头有工作,我读到我等待的时间越长,垃圾收集可能会来吃我丢失的分支。抱歉,我确实缺乏任何正式的 git 培训……我几乎准备好检查 origin master 然后重写代码。

先感谢您。

pok*_*oke 4

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

\n\n
git branch save-this-head\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,你有一个分支指向那个确切的分离头,所以你可以安全地检查它而不会丢失东西:

\n\n
git checkout save-this-head\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,你不再处于分离的 HEAD 状态。您和您的更改都是安全的!如果您有任何待处理的更改,您应该立即提交这些更改,以便我们可以自由移动。

\n\n

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

\n\n
git rebase master\n
Run Code Online (Sandbox Code Playgroud)\n\n

这应该会重放 master 上缺少的提交。因此,自分离 HEAD 以来所做的更改将被恢复。

\n\n

如果您只想保持该save-this-head状态,并扔掉以前的主控,您可以只检出主控,然后将其重置为保存状态:

\n\n
git checkout master\ngit reset --hard save-this-head\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将master相当于save-this-head丢弃 上的所有其他更改master。如果你想推送它,你可能必须强制推送才能从远程删除提交。

\n\n
\n\n
\n

我读到,我等待的时间越长,垃圾收集可能会来吃掉我丢失的树枝

\n
\n\n

首先,只要保持在该状态,HEAD 指针就会继续查看该提交对象(这就是为什么它\xe2\x80\x99s 称为 \xe2\x80\x9cdetached HEAD\xe2\x80\x9d第一名)。这将防止任何垃圾收集删除该提交对象(及其所有父对象)。

\n\n

即使您不小心离开了分离的 HEAD 状态,使您引用的提交成为\xe2\x80\x9cdangling\xe2\x80\x9d提交,Git 也会将对象保留数周,然后再考虑允许对象被垃圾收集。仅仅因为它受到垃圾收集并不意味着 GC 将实际运行,特别是当您不与存储库交互时。

\n\n
\n\n

顺便提一句。将来,每当您想返回历史记录中的提交并期望执行某些操作(不仅仅是查看)时,您应该创建一个分支。即使它\xe2\x80\x99只是一个临时的,拥有它将使你能够更自由地移动,并且你不会\xe2\x80\x99因为该分离的HEAD状态而放弃做任何事情:

\n\n
git checkout -b fix-something <some-old-hash>\n
Run Code Online (Sandbox Code Playgroud)\n

  • 需要记住的重要一点是,实际上很难失去使用 Git 的工作。一旦你做了某事,你就很安全,所以你不需要害怕。只是有时候恢复起来比其他时候更复杂。但是通过创建分支,您可以非常轻松地创建备份指针,以便在以后需要时轻松恢复:) (3认同)