Jen*_*ngs 5 git github git-detached-head
介绍和搜索
所以我认为我犯了一个严重的错误,我很担心。我已经解析了论坛上的超脱头脑,我已经接近找到答案了,但是场景太具体了,不适用于我所处的位置。如果您找到回答我问题的特定线程,请链接我。
例如:如何将分离的 HEAD 与 master/origin 协调?
那家伙已经做了git rebase -i
,而我没有。我试过变基,但它没有解决我的问题。
小背景:
问题:
要使用工作代码访问旧提交,我做了(可能是错误的事情):
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 然后重写代码。
先感谢您。
如果您位于分离的 HEAD 上并且想要保存 HEAD 当前所处的任何状态,只需创建一个分支:
\n\ngit branch save-this-head\n
Run Code Online (Sandbox Code Playgroud)\n\n现在,你有一个分支指向那个确切的分离头,所以你可以安全地检查它而不会丢失东西:
\n\ngit checkout save-this-head\n
Run Code Online (Sandbox Code Playgroud)\n\n现在,你不再处于分离的 HEAD 状态。您和您的更改都是安全的!如果您有任何待处理的更改,您应该立即提交这些更改,以便我们可以自由移动。
\n\n之后,您可以将这个新分支重新设置为其他分支,例如 master 分支:
\n\ngit rebase master\n
Run Code Online (Sandbox Code Playgroud)\n\n这应该会重放 master 上缺少的提交。因此,自分离 HEAD 以来所做的更改将被恢复。
\n\n如果您只想保持该save-this-head
状态,并扔掉以前的主控,您可以只检出主控,然后将其重置为保存状态:
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
首先,只要保持在该状态,HEAD 指针就会继续查看该提交对象(这就是为什么它\xe2\x80\x99s 称为 \xe2\x80\x9cdetached HEAD\xe2\x80\x9d第一名)。这将防止任何垃圾收集删除该提交对象(及其所有父对象)。
\n\n即使您不小心离开了分离的 HEAD 状态,使您引用的提交成为\xe2\x80\x9cdangling\xe2\x80\x9d提交,Git 也会将对象保留数周,然后再考虑允许对象被垃圾收集。仅仅因为它受到垃圾收集并不意味着 GC 将实际运行,特别是当您不与存储库交互时。
\n\n顺便提一句。将来,每当您想返回历史记录中的提交并期望执行某些操作(不仅仅是查看)时,您应该创建一个分支。即使它\xe2\x80\x99只是一个临时的,拥有它将使你能够更自由地移动,并且你不会\xe2\x80\x99因为该分离的HEAD状态而放弃做任何事情:
\n\ngit checkout -b fix-something <some-old-hash>\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
2674 次 |
最近记录: |