一文搞懂 Git 合并与比较:C、A、I、K、T 到底代表什么?
2026/6/1 1:32:14 网站建设 项目流程

一文搞懂 Git 合并与比较:C、A、I、K、T 到底代表什么?

在使用 Git 图形化工具(如 Git GUI、SourceTree、VS Code 的 Git 面板、GitKraken 等)进行冲突解决或提交管理时,你经常会看到类似这样的按钮或菜单项:

合并(M)
比较当前项和传入的项(A)
比较当前项©(目标)
比较传入的项(I)(源)
保留当前项(K)(目标)
获取传入的项(T)(源)
暂存(S)

它们到底是什么意思?分别代表什么?
本文将用一个清晰易懂的“双人修改同一个文件”的例子,帮你彻底理解这些操作背后的逻辑。


一、背景:什么时候会出现这些选项?

这些操作最常见于合并冲突三方合并视图中。

假设:

  • 你从远端拉取代码(git pull
  • 或者合并另一个分支(git merge feature
  • 或者变基(git rebase

此时,Git 发现同一个文件的同一块区域被别人改成了不同的样子,就会产生冲突。

图形工具会把冲突区域拆分成:

  • 当前项 (Current)— 当前分支上的内容(也叫“目标”,你本地的或目标分支的)
  • 传入的项 (Incoming)— 要合并进来的分支的内容(也叫“源”,别人的或另一个分支的)
  • 合并结果 (Merged)— 你手动或通过这些操作最终保留的内容

理解这三个角色,是搞懂上述选项的前提。


二、术语对照表(英文 → 中文)

原文常见中文含义
Current当前项 / 目标你当前所在分支(或本地)的内容
Incoming传入的项 / 源要合并进来的分支的内容
Merged合并结果最终写入文件的内容
Compare比较查看两个版本之间的差异
Keep保留最终采纳哪个版本
Take获取 / 采纳与 Keep 类似,也是选择某个版本
Stage暂存标记为解决冲突,准备提交

三、逐个选项详解(结合场景)

🧩 1. 合并(M)

含义
执行标准的三方合并。它会尝试智能地合并当前项和传入项,如果能自动合并就自动合并,否则高亮冲突让你继续手动选择。

使用场景
你希望 Git 自动帮你合并,而不是完全听某一个版本。

背后逻辑
相当于git merge在无冲突时的自动行为,或在冲突工具中自动合并非冲突行。


🧩 2. 比较当前项和传入的项(A)

含义
当前项(Current)传入的项(Incoming)进行对比,只显示两个版本的差异,不涉及合并结果。

使用场景
你想看清楚“我的改动”和“别人的改动”到底哪里不一样。

相当于
git diff <当前分支> <传入分支>但只针对冲突文件。


🧩 3. 比较当前项©(目标)

含义
当前项(Current)合并结果(Merged)进行比较。

使用场景
在你手动修改合并结果后,检查你最终保留的内容与原来自己版本的区别。

典型用途
确保你没有意外丢掉自己的重要修改。


🧩 4. 比较传入的项(I)(源)

含义
传入的项(Incoming)合并结果(Merged)进行比较。

使用场景
确认你从对方的改动中保留了哪些、丢弃了哪些。

典型用途
审查对方的修改是否被合理采纳。


🧩 5. 保留当前项(K)(目标)

含义
完全使用当前项(Current)的内容,丢弃传入项(Incoming)的所有冲突修改。

使用场景
你确信自己的改法完全正确,对方的改法不应该进入最终版本。

相当于
命令行执行git checkout --ours <文件>并标记冲突已解决。

⚠️注意:这会直接丢掉对方的修改,需谨慎使用。


🧩 6. 获取传入的项(T)(源)

含义
完全使用传入的项(Incoming)的内容,丢弃当前项(Current)的冲突修改。

使用场景
你认可对方的改法完全覆盖你的改法,或者你之前改错了。

相当于
命令行执行git checkout --theirs <文件>并标记冲突已解决。


🧩 7. 暂存(S)

含义
标记该冲突文件已解决,并将当前编辑器中的合并结果放入暂存区(Staging Area),准备提交。

注意
这不是“临时保存未完成的工作”(那是git stash),而是“冲突解决完成,可以 commit 了”。

使用场景
你完成某个文件的冲突合并后,告诉 Git “这个文件搞定了”。

相当于
git add <冲突文件>


四、一个完整例子帮你串起来

假设你在main分支,合并feature分支:

  • 当前项(Current)

    score=100# 你本地 main 分支
  • 传入的项(Incoming)

    score=95# feature 分支

工具显示冲突。

你的操作过程示例:

  1. 先点比较当前项和传入的项(A)
    → 发现对方把 100 改成了 95,你是 100。

  2. 决定保留谁?

    • 保留当前项(K)→ 最终是 100(你的胜出)
    • 获取传入的项(T)→ 最终是 95(对方的胜出)
    • 合并(M)→ 手动改成 98,两边都不全用。
  3. 手动修改合并结果后,点比较当前项©比较传入的项(I)反复确认。

  4. 确认无误后,点暂存(S)并提交。


五、常见误区对照表

错误理解正确理解
暂存(S) 是临时保存暂存 =git add,冲突解决完成
比较当前项© = 比较当前和传入实际是比较当前与最终结果
获取传入的项(T) 会合并不会合并,是完全覆盖
必须一步步点这些按钮熟练后可直接选 keep / take

六、总结一句话记忆版

操作一句话解释
合并(M)自动合并两边
比较当前项和传入的项(A)我的 vs 别人
比较当前项©我的 vs 最终结果
比较传入的项(I)别人的 vs 最终结果
保留当前项(K)只要我的
获取传入的项(T)只要别人的
暂存(S)解决完了,add 它

七、写在最后

很多初学者看到这些选项会一头雾水,但只要理解“当前项(我的)”、“传入项(别人的)”、“合并结果(最终)”这三个角色,再加上“比较”是看差异、“保留/获取”是选谁、“暂存”是提交前的最后一步,就能非常从容地处理 Git 冲突。

下一篇预告:Git 合并与 Rebase 中的冲突差异,以及 --ours / --theirs 的隐蔽陷阱。

如果你也在团队协作中遇到过搞不清“保留当前项”还是“获取传入的项”,欢迎转发给你的同事,一起告别合并恐惧。


你的点赞与在看,是作者继续写出高质量 Git 文章的最大动力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询