所以,由于我的代码存在根本问题,我最终不得不更改项目的整个目录树 - 或者我认为。所以我在重大改变之前做了一个提交,然后在做出我不需要的更改后意识到。所以我执行了
git checkout ##SHA##
我能够让整个项目以应有的方式运转,但现在我遇到了另一个问题。我不再在我工作的分支机构中签出。如何保留我现有的代码并重新回到分支机构工作?
git branch -a
说我在
* (no branch)
任何人都知道我能做什么而不仅仅是制作一个新分支并删除旧分支?
答案 0 :(得分:6)
永远不要git checkout <hash>
。它旨在临时检查提交(因此您看到的是无分支)。您想要做的是,在分支中git reset --hard <hash>
(如果您在工作目录中需要更改,则删除--hard。)
要恢复:
git checkout the_branch
git reset --hard <hash>
请注意,上面的<hash>
与尝试“还原”更改时git checkout
使用的{{1}}相同。
答案 1 :(得分:2)
结帐回您的分支,然后合并您在无头分支上所做的更改:
git checkout my_branch
git merge ##SHA##
然后,您应该在最近的提交中拥有分支my_branch
。
答案 2 :(得分:1)
git branch -b branch_for_new_code
git checkout branch_i_was_on
git merge branch_for_new_code
对于未来,请记住一个简单的经验法则:当你做一些你不确定的事情时,先做一个分支。最后,只有结帐分支名称,除非你真的知道你在做什么。
答案 3 :(得分:0)
如果您确定自己所在的地方,则可以:
git branch -D my_branch
git checkout -b my_branch
这会删除旧的分支指针,并创建一个指向当前HEAD的新指针。