git pull从远程存储库获取更改,然后进行合并。可以将其配置为执行 rebase 而不是 merge (可以通过执行 git pull --rebase,也可以通过为要拉入的分支配置 branch.<branch_name>.rebase的真值)。
如果您是从一个分支开始的,那么任何合并类型的提取操作都会将您留在该分支上。另一方面,rebase 命令总是通过使用临时分离的 HEAD (也就是“无分支”)来工作。如果在 rebase-type pull 期间您处于这种状态,那么这是因为 pull 的 rebase 部分遇到了冲突,它正在等待您解决这些冲突并使用 rebase --continue(或 --skip或 --abort)。
如果您正处于一个 rebase (您有一个 .git/rebase-apply目录)的中间,那么它可能停下来让您解决一些冲突。使用 git status检查“未合并”条目。任何这样的条目都应该在文件中嵌入冲突标记(假设它们是纯文本文件)。您应该编辑它们以解决冲突,并通过对它们运行 git add将它们标记为合并。然后运行 git rebase --continue以继续进行 rebase。您可能会遇到更多应该以类似方式处理的冲突(编辑、添加、继续)。如果您决定不再需要特定的提交,可以使用 git rebase --skip跳过它。您可以使用 git rebase --abort中止整个重建基础。当一个 rebase 由于任何冲突而停止时,所有这些 rebase 命令都会在错误消息中列出。一旦所有挂起的提交都被应用(或跳过) ,您的原始分支将被最终的新提交更新,并且您的 HEAD 将被重新连接到它(如果您中止,您的 HEAD 将被重新连接,而不会更新分支)。
如果分离的 HEAD 不是由于在重建基地中间发生的冲突,那么在拉取之前的某个时刻分离了 HEAD。您将需要评估树的当前状态,以决定您想要做什么。您可以使用 git show-branch --current --all或 git log --graph --oneline --decorate --all或者像 gitk这样的图形化工具来查明当前(分离的) HEAD 与其他分支之间的关系。如果您决定保留 HEAD 的内容,那么您可以使用 git branch new_branch_name为它们创建一个新的分支。如果要覆盖现有分支,则使用 git branch --force existing_branch_name。然后使用 git checkout branch_name将存储库的 HEAD 重新连接到分支。
Note that, in case of a "git pull --rebase" run while the HEAD is detached, Git tried to find the upstream branch of the detached HEAD (which by definition does not exist) and emitted unnecessary error messages.