因为我的代码存在一个根本性的问题,所以我不得不更改整个项目的目录树。在进行大规模更改之前,我进行了提交,然后才意识到其实并不需要进行这些更改。因此,我进行了
git checkout ##SHA##
我已经成功让整个项目按照预期工作,但现在出现了一个不同的问题。我不再在我正在工作的分支中签出。我该如何保留现有的代码并回到分支内继续工作?
git branch -a
说我在
* (no branch)
有没有人知道我可以做什么,除了创建一个新分支并删除旧分支?
因为我的代码存在一个根本性的问题,所以我不得不更改整个项目的目录树。在进行大规模更改之前,我进行了提交,然后才意识到其实并不需要进行这些更改。因此,我进行了
git checkout ##SHA##
我已经成功让整个项目按照预期工作,但现在出现了一个不同的问题。我不再在我正在工作的分支中签出。我该如何保留现有的代码并回到分支内继续工作?
git branch -a
说我在
* (no branch)
有没有人知道我可以做什么,除了创建一个新分支并删除旧分支?
永远不要执行git checkout <hash>
。它的作用是暂时检查一个提交(因此你看到了没有分支)。你想要做的是,在分支中执行git reset --hard <hash>
(如果你需要工作目录中的更改,则删除--hard)。
恢复方法:
git checkout the_branch
git reset --hard <hash>
<hash>
将与您在尝试“还原”更改时使用的git checkout
所使用的哈希值相同。git checkout <hash>
的真正用途! - Jeremy Iglehart<hash>
是好的...为什么我不能只是git checkout my_branch
,然后git merge <hash of the current commit that I know works>
呢?或者我必须创建一个新分支,以便我可以提交它,然后将该新分支合并到实验之前保存的提交中吗? - Jeremy Iglehart回到你的分支,然后将你在无头分支上所做的更改合并:
git checkout my_branch
git merge ##SHA##
接下来,您应该在您最近提交的分支my_branch
上。
git log
命令并复制顶部提交哈希值,切换到目标分支并与该哈希值合并。 - dorshgit branch -b branch_for_new_code
git checkout branch_i_was_on
git merge branch_for_new_code
对于未来,请记住一个简单的经验法则:当您做一些不确定的事情时,请先创建一个分支。最后,除非您确实知道自己在做什么,否则只检出分支名称。
git branch -D my_branch
git checkout -b my_branch
这会删除旧的分支指针,并创建一个新的指向当前 HEAD 的指针。
git checkout master
吗?或者你的分支名称。 - jweyrich