我在我的存储库中做一些工作,注意到一个文件发生了本地更改。我不再需要它们了,所以我删除了文件,以为我可以签出一份新的副本。我想做的Git相当于
svn up .
使用git pull似乎不起作用。一些随机搜索让我找到了一个有人推荐的网站
git checkout HEAD^ src/
(src是包含已删除文件的目录)。
现在我发现我有一个分离的脑袋。我不知道那是什么。我怎么撤销?
我在我的存储库中做一些工作,注意到一个文件发生了本地更改。我不再需要它们了,所以我删除了文件,以为我可以签出一份新的副本。我想做的Git相当于
svn up .
使用git pull似乎不起作用。一些随机搜索让我找到了一个有人推荐的网站
git checkout HEAD^ src/
(src是包含已删除文件的目录)。
现在我发现我有一个分离的脑袋。我不知道那是什么。我怎么撤销?
当前回答
吉特告诉我怎么做。
如果键入:
git checkout <some-commit_number>
保存状态
git add .
git commit -m "some message"
然后:
git push origin HEAD:<name-of-remote-branch>
其他回答
由于“分离的头状态”使您处于临时分支,所以只需使用git checkout,这将使您处于上一个分支。
如果您已经更改了不想丢失的文件,可以将其推送。我已经在分离模式下提交了它们,之后您可以移动到一个临时分支以稍后在master中集成。
git commit -m "....."
git branch my-temporary-work
git checkout master
git merge my-temporary-work
摘自:
如何处理在分离的头脑中做出的承诺
当我开始使用git时,这对我来说是一件令人困惑的事情,后来我明白了为什么会发生这种情况,以及处理这种情况的最佳方法是什么。
出现这种情况的根本原因是,通常gitHEAD总是指向某个分支,当您试图将HEAD指向某个特定的提交时,就会将HEAD置于分离的HEAD状态。
HEAD连接时的状态-
cat .git/HEAD # output--> ref: refs/heads/master or ref: refs/heads/main
当HEAD处于分离状态时-
cat .git/HEAD # output--> b96660a90cad75867453ebe1b8d11754bbb68b0e <commit hash>
解决方案-
git stash # Temporarily shelves (or stashes) changes
git branch # Find your default branch
git switch master # Point HEAD to master or main branch
git stash pop # Apply all the changes you had previously
处于“分离头部”意味着head指的是特定的未命名提交(与命名分支相对)(cf:https://git-scm.com/docs/git-checkout部分分离的头部)。实际上,这意味着您签出了一个提交,但没有与之关联的分支名称。
您可以选择只创建与提交相关联的新分支
gitbranch新的分支名称。
这允许您将当前状态保存在名为new branch name的新分支中,而不再处于分离的头部状态。
或者,如果您希望返回到以前的状态,则需要选择之前选择的分支
git结帐@{-1}
分离头部是指:
你不再在树枝上,您已在历史记录中检出一次提交
如果没有更改:可以通过应用以下命令切换到master
git checkout master
如果您有要保留的更改:
在分离HEAD的情况下,提交工作正常,除非没有命名分支得到更新。若要使用已提交的更改更新主分支,请在您所在的位置创建一个临时分支(这样,临时分支将具有您在分离的HEAD中所做的所有已提交更改),然后切换到主分支并将临时分支与主分支合并。
git branch temp
git checkout master
git merge temp