如何解决 Git 中“拒绝合并不相关历史记录”的错误

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将指导你解决 Git 中“拒绝合并不相关历史记录”的错误,这是在尝试合并具有冲突历史记录的存储库时常见的问题。通过了解 Git 存储库历史记录并学习有效的技巧,你将能够成功合并项目并保持干净的 Git 工作流程。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git(("Git")) -.-> git/GitHubIntegrationToolsGroup(["GitHub Integration Tools"]) git/BranchManagementGroup -.-> git/merge("Merge Histories") git/BranchManagementGroup -.-> git/log("Show Commits") git/BranchManagementGroup -.-> git/reflog("Log Ref Changes") git/CollaborationandSharingGroup -.-> git/remote("Manage Remotes") git/GitHubIntegrationToolsGroup -.-> git/repo("Manage Repos") subgraph Lab Skills git/merge -.-> lab-417643{{"如何解决 Git 中“拒绝合并不相关历史记录”的错误"}} git/log -.-> lab-417643{{"如何解决 Git 中“拒绝合并不相关历史记录”的错误"}} git/reflog -.-> lab-417643{{"如何解决 Git 中“拒绝合并不相关历史记录”的错误"}} git/remote -.-> lab-417643{{"如何解决 Git 中“拒绝合并不相关历史记录”的错误"}} git/repo -.-> lab-417643{{"如何解决 Git 中“拒绝合并不相关历史记录”的错误"}} end

理解 Git 存储库历史记录

Git 是一个分布式版本控制系统,它允许开发者随着时间的推移管理和跟踪其代码库的更改。Git 的核心概念是存储库,它是文件及其修订历史的集合。

Git 存储库与提交历史记录

Git 存储库是一个目录,其中包含项目的所有文件和文件夹,以及对这些文件所做更改的完整历史记录。每当开发者进行更改并提交时,Git 都会创建项目的一个新快照,称为提交。这些提交相互链接形成提交历史记录,它代表了项目随时间的演变。

分支与合并

Git 允许开发者在存储库中创建多个分支,使他们能够同时处理不同的功能或修复 bug,而不会影响主代码库。当开发者完成在某个分支上的工作时,他们可以将其合并回主分支,将自己的更改与项目的其他部分集成。

graph LR A[初始提交] --> B[功能分支] A --> C[修复 bug 分支] B --> D[合并功能] C --> E[合并修复 bug]

远程仓库与协作

在像 Git 这样的分布式版本控制系统中,开发者可以通过与他人共享存储库来进行协作。这些共享的存储库称为远程仓库,它们允许开发者将本地更改推送到中央位置,并拉取其他人所做的更改。

命令 描述
git remote add origin <url> 添加一个新的远程仓库
git push origin master 将本地更改推送到远程 “origin” 仓库
git pull origin master 从远程 “origin” 仓库拉取更改

通过理解 Git 存储库、提交历史记录、分支和远程协作的基本概念,开发者可以使用 LabEx Git 平台有效地管理项目并进行协作。

解决“拒绝合并不相关历史记录”错误

理解该错误

当你尝试合并两个具有完全不同提交历史记录的存储库时,Git 中会出现“拒绝合并不相关历史记录”错误。Git 的设计目的是防止不相关存储库之间的意外合并,以避免数据丢失或意外行为。

确定原因

此错误通常在你尝试将本地存储库与独立创建的远程存储库合并时出现,且它们没有任何共同的提交历史记录。例如,如果你在 LabEx 上创建一个新存储库,然后尝试将其与现有的本地存储库合并,Git 将拒绝执行合并。

解决该错误

要解决“拒绝合并不相关历史记录”错误,你可以在合并存储库时使用 --allow-unrelated-histories 选项。此选项告诉 Git 继续进行合并,即使两个存储库具有完全不同的历史记录。

git pull origin master --allow-unrelated-histories

不过,需要注意的是,使用此选项可能会导致冲突,因为 Git 会尝试合并来自两个存储库的所有文件和提交。你需要手动解决合并过程中出现的任何冲突。

避免该错误

要首先避免“拒绝合并不相关历史记录”错误,你可以遵循以下步骤:

  1. 在 LabEx 上创建一个新存储库并在本地克隆它。
  2. 将你现有的本地存储库添加为新 LabEx 存储库的远程仓库。
  3. 将本地存储库的更改推送到新的 LabEx 存储库。
git remote add origin <LabEx_repository_url>
git push -u origin master

通过遵循此过程,你可以确保本地和远程存储库具有共享的提交历史记录,并且在尝试合并它们时不会遇到“拒绝合并不相关历史记录”错误。

合并具有冲突历史记录的存储库

理解合并冲突

当你尝试合并两个具有冲突提交历史记录的存储库时,Git 可能会遇到相同文件或代码行以不同方式被修改的情况。这被称为合并冲突,需要手动干预来解决。

识别合并冲突

在尝试合并存储库后,你可以通过运行 git status 命令来识别合并冲突。Git 会列出有冲突更改的文件,你需要在合并完成之前解决这些冲突。

git status
## 位于分支 master
## 你有未合并的路径。
##   (解决冲突并运行 “git commit”)
#
## 未合并的路径:
##   (使用 “git add <文件>...” 标记解决方案)
#
##       双方修改:      README.md

解决合并冲突

要解决合并冲突,你需要手动编辑冲突文件并选择保留哪些更改。Git 会用特殊标记标记冲突部分,例如 <<<<<<< HEAD=======>>>>>>> 分支名。你需要删除这些标记并保留所需的更改。

<<<<<<< HEAD
这是本地存储库中的内容。
=======
这是远程存储库中的内容。
>>>>>>> 远程分支

解决冲突后,你可以使用 git add 暂存更改,然后使用 git commit 提交合并后的更改。

避免合并冲突

为避免合并冲突,建议通过定期从远程存储库拉取最新更改并推送本地更改来使本地和远程存储库保持同步。这可以使用以下命令完成:

git pull
git push

通过保持存储库同步,你可以在合并来自不同源的更改时将遇到合并冲突的可能性降至最低。

总结

在本 Git 教程中,你已经学会了如何通过理解 Git 存储库历史记录、解决冲突以及合并具有冲突历史记录的存储库来处理“拒绝合并不相关历史记录”错误。有了这些技能,你现在可以自信地管理你的 Git 项目并保持无缝的协作流程。