ABDiff 帮助

Git 差异与合并工作流

Git使用自己的内部算法执行差异、合并和重基。 这些操作是确定的和全自动的:Git从不依赖外部工具。

然而,有些情况下需要人类判断。 例如,当需要通过视觉或语义而不是文本来评估更改时。 在这些情况下,Git可以调用外部工具来协助检查,而不是决策。

macOS上的一个常见示例是FileMerge.app,它与Xcode命令行工具一起安装,并且可以通过Git作为差异或合并助手启动。

合并

当Git合并分支且无法核对更改时,它会将冲突标记写入每个冲突文件,然后停止合并并通知用户。 对于每个带有冲突标记的文件,Git索引中都记录了三个阶段:常见的我们的他们的。 此时,存储库处于冲突合并状态,Git等待所有冲突解决。

给定一个冲突的文件File.swift生成的文件

要手动修复冲突编辑文件:

  1. 在编辑器中打开文件,并删除冲突标记。
  2. 使用git add对已解决的文件进行分级。

要修复外部工具中的冲突运行:

git mergetool

git mergetool为每个冲突文件启动一次工具,将BASE、我们的、他们的和合并结果路径传递给工具。 Git在启动下一个文件之前等待工具退出。 每个文件的应用程序的退出代码决定了该文件是否被标记为已解决。 您还可以选择显式运行git add <file>来将其标记为分期。

如果配置了多个合并工具,Git将从以下列表中选择第一个:

  1. merge.tool配置。
  2. $GIT_MERGE_TOOL环境变量。
  3. 来自已知已安装工具的自动检测。

调用外部工具

对于每个冲突文件Example.swift Git创建此处的其他文件:

Example_BACKUP_70842.swift
Example_BASE_70842.swift
Example_LOCAL_70842.swift
Example_REMOTE_70842.swift
Example.swift

每个调用的后缀编号都会发生变化。 然后,它调用了我们在Git 集成中看到的配置命令的工具。 对于abd,命令是

abd --base Example_BASE_70842.swift --local Example_LOCAL_70842.swift --remote Example_REMOTE_70842.swift --result Example.swift

该工具应该删除冲突标记并正常退出。 这表明冲突已经解决了。

差异

对于差异,外部工具仅用于目视检查。 Git在应用程序退出时忽略返回代码。 如果您调用git difftool,Git将列举更改的文件,并为每对文件启动外部工具。

通常,最好只拖放您想要比较的文件。 但如果你更喜欢全部比较,请运行git difftool。 调用的外部工具是此列表中第一个找到的:

  1. diff.tool配置。
  2. $GIT_DIFF_TOOL环境变量。
  3. $PATH中的已知工具自动检测。
  4. 回退到vimdiff