协慌网

登录 贡献 社区

修复一个 Git 分离的头?

我在我的存储库中做了一些工作,发现文件有本地更改。我不再想要它们所以我删除了文件,以为我可以签出一份新的副本。我想做 Git 相当于

svn up .

使用git pull似乎不起作用。一些随机搜索引导我到一个有人推荐做的网站

git checkout HEAD^ src/

src是包含已删除文件的目录)。

现在我发现我有一个超然的头。我不知道那是什么。我怎么撤消?

答案

分离头意味着您不再在分支上,您已在历史记录中检出单个提交(在这种情况下是 HEAD 之前的提交,即 HEAD ^)。

如果要删除与分离的 HEAD 关联的更改

你只需要检查你所在的分支,例如

git checkout master

下次更改文件并希望将其恢复到索引中的状态时,请不要先删除文件,只需执行此操作

git checkout -- path/to/foo

这会将文件 foo 恢复到索引中的状态。

如果要保持更改与分离的 HEAD 相关联

  1. 运行git log -n 1 ; 这将显示分离的 HEAD 上的最新提交。复制并粘贴提交哈希。
  2. 运行git checkout master
  3. 运行git branch tmp <commit-hash> 。这将在一个名为tmp的新分支中保存您的更改。
  4. 如果您想将所做的更改git merge tmpmaster ,请从master分支运行git merge tmp 。运行git checkout master后,你应该在master分支上。

如果您更改了不想丢失的文件,可以推送它们。我已将它们以分离模式提交,之后您可以移动到临时分支以便稍后在 master 中集成。

git commit -m "....."
git branch my-temporary-work
git checkout master
git merge my-temporary-work

摘自:

如何处理分离头中的提交

没有创建临时分支的解决方案。

当您在此模式下已经更改了某些内容时,如何退出(“修复”)分离的 HEAD 状态并且可选地,您希望保存更改:

  1. 提交您想要保留的更改。如果要接管在分离的 HEAD 状态下所做的任何更改,请提交它们。喜欢:

    git commit -a -m "your commit message"
  2. 放弃您不想保留的更改。硬重置将丢弃您在分离的 HEAD 状态下所做的任何未提交的更改:

    git reset --hard

    (如果没有这个,第 3 步就会失败,抱怨分离的 HEAD 中修改过的未提交文件。)

  3. 看看你的分公司。通过检出之前处理过的分支退出分离的 HEAD 状态,例如:

    git checkout master
  4. 接管你的提交。您现在可以通过挑选来接管您在分离的 HEAD 状态下所做的提交,如我对另一个问题的回答所示。

    git reflog
    git cherry-pick <hash1> <hash2> <hash3> …