如何调和分离头和 origin/master?已经签出旧哈希
How to reconcile detached head and origin/master? Already checked out old hash
介绍和搜索
所以我认为我犯了一个严重的错误,我很担心。我已经分析了独立负责人的论坛,我已经接近找到答案,但场景太具体,不适用于我所在的位置。如果您找到可以回答我问题的特定主题,请 link 我。
例如:How can I reconcile detached HEAD with master/origin?
这家伙已经完成了 git rebase -i
,而我还没有。我试过变基,但没有解决我的问题。
背景不多:
- 我是新手 git;我一个人用git
- 我拥有远程存储库
- 需要旧代码集,而且是时间敏感的问题
- 我学习了一些编程知识,并在没有其他人编写代码的工作场所使用它(所以我不能完全寻求帮助)
问题:
为了使用工作代码访问旧提交,我做了(可能是错误的事情):
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
问题:我如何协调我分离的头脑与origin/master?和解后,我是否需要 git push --force
或其他东西(特别是 --force
标志)?这个独立的负责人有工作,而且我读到我等待的时间越长,垃圾收集可能会来吃掉我丢失的分支。抱歉,我确实缺少 git 方面的任何正式培训...我几乎准备好检查 origin master 然后重写代码。
提前谢谢你。
如果你在一个分离的 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
上的所有其他更改。如果你想推送这个,你可能必须强制推送然后才能从远程删除提交。
I've read that the longer I wait, garbage collection may come and eat my lost branch
首先,只要你保持在那个状态,HEAD will pointer 就会一直看着那个提交对象(这就是为什么它首先被称为“分离的 HEAD”)。这将防止任何垃圾收集删除该提交对象(及其所有父对象)。
即使您不小心离开了分离的 HEAD 状态,使您引用的提交成为 “悬空” 提交,Git 也会将对象保留数周在甚至考虑允许对象被垃圾收集之前。仅仅因为它受垃圾收集的影响,并不意味着 GC 实际上会 运行,尤其是当您不与存储库交互时。
顺便说一句。将来,每当您想返回历史记录中的提交并期望 做 某事(除了查看之外)时,您应该只创建一个分支。即使它只是暂时的,拥有它也能让你更自由地移动,并且你不会因为分离的 HEAD 状态而气馁:
git checkout -b fix-something <some-old-hash>
介绍和搜索
所以我认为我犯了一个严重的错误,我很担心。我已经分析了独立负责人的论坛,我已经接近找到答案,但场景太具体,不适用于我所在的位置。如果您找到可以回答我问题的特定主题,请 link 我。
例如:How can I reconcile detached HEAD with master/origin?
这家伙已经完成了 git rebase -i
,而我还没有。我试过变基,但没有解决我的问题。
背景不多:
- 我是新手 git;我一个人用git
- 我拥有远程存储库
- 需要旧代码集,而且是时间敏感的问题
- 我学习了一些编程知识,并在没有其他人编写代码的工作场所使用它(所以我不能完全寻求帮助)
问题:
为了使用工作代码访问旧提交,我做了(可能是错误的事情):
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
问题:我如何协调我分离的头脑与origin/master?和解后,我是否需要 git push --force
或其他东西(特别是 --force
标志)?这个独立的负责人有工作,而且我读到我等待的时间越长,垃圾收集可能会来吃掉我丢失的分支。抱歉,我确实缺少 git 方面的任何正式培训...我几乎准备好检查 origin master 然后重写代码。
提前谢谢你。
如果你在一个分离的 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
上的所有其他更改。如果你想推送这个,你可能必须强制推送然后才能从远程删除提交。
I've read that the longer I wait, garbage collection may come and eat my lost branch
首先,只要你保持在那个状态,HEAD will pointer 就会一直看着那个提交对象(这就是为什么它首先被称为“分离的 HEAD”)。这将防止任何垃圾收集删除该提交对象(及其所有父对象)。
即使您不小心离开了分离的 HEAD 状态,使您引用的提交成为 “悬空” 提交,Git 也会将对象保留数周在甚至考虑允许对象被垃圾收集之前。仅仅因为它受垃圾收集的影响,并不意味着 GC 实际上会 运行,尤其是当您不与存储库交互时。
顺便说一句。将来,每当您想返回历史记录中的提交并期望 做 某事(除了查看之外)时,您应该只创建一个分支。即使它只是暂时的,拥有它也能让你更自由地移动,并且你不会因为分离的 HEAD 状态而气馁:
git checkout -b fix-something <some-old-hash>