Git Merge和Git Merge –no-ff有什么区别?

2021年11月28日19:33:22 发表评论 183 次浏览
Git Merge 和 Git Merge 的区别 --no-ff
Git Merge和Git Merge --no-ff差异比较

Git 是一个版本控制系统或 VCS,主要用于源代码管理以及跟踪对文件或一组文件所做的更改。它可以简化处理同一项目的多个开发人员的各个流程。

简而言之,Git 弥合了分配给单个任务的不同开发人员的个人工作与所需输出之间的差距。其中的顶部Git命令是git的合并。它有几个变体,包括 git merge --no-ff 命令。

尽管这两个 git 命令执行的基本功能是相同的,即将两个或多个分支合并为一个分支,但必须知道 Git merge 命令的两个变体之间存在某种程度的区别,以便将这两个尽最大可能使用。

Git Merge和Git Merge --no-ff有什么区别?但是在比较这两个git命令之前,我们先来了解一下git merge操作究竟是什么意思以及其他一些相关的概念,即fast-forward merge和3-way merge。

Git 合并命令

git merge 命令采用 git 分支创建的不同开发线,并将它们组合成一个分支。尽管更新当前分支以反映结果合并,但目标分支保持不变。git 命令通常用于:

  • git checkout - 选择当前分支。
  • git branch -d - 删除过时的目标分支。

过程

Git Merge和Git Merge --no-ff差异比较:Git merge 命令将许多提交序列合并(合并)到一个统一的历史记录中。该命令首先接受两个提交指针,这些指针通常是要合并的两个分支中的最新提交。

接下来,它开始为两者寻找一个共同的基础提交。找到后, git merge 命令会创建一个新的合并提交,它将两个排队的合并提交序列中的每一个组合所做的更改组合在一起。

与其他提交相比,合并提交是独一无二的,因为它具有两个父提交。创建合并提交时,Git 会自动尝试合并单独的历史记录。如果遇到在两个历史记录中都被更改的数据,则需要用户干预。

准备

为了确保合并过程的顺利进行,在执行合并提交之前需要注意以下事项:

  • 确认接收分支-为此,请执行 git status 命令以确保 HEAD 指向相关的合并接收分支。如果没有,请使用 git checkout <branch> 命令切换到所需的接收分支。
  • 获取最新的远程提交-通过执行 Git fetch 命令确保接收和合并的分支符合最新的远程更改,用于拉取最新的远程提交,然后是 Git pull 命令,用于确保主分支具有最新更新。

Fast Forward Merge 和 3-way Merge

一个快进合并是当蠢货传入提交,而不是构建一个合并提交移动分支指针点。虽然这通常发生在没有任何本地更改的情况下执行 git pull 命令时,但它也可能发生在 git merge 命令中。

因为从目标分支可到达的所有提交现在都可以通过当前分支获得,所以快进合并结合了两个分支的历史记录。但是,当分支发散时,不可能进行快进合并。

当没有到目标分支的线性路径时,Git 使用 3 路合并来合并两个分支。它使用专用提交将两个历史记录联系在一起。之所以这么叫,是因为在三路合并中,Git 使用三个提交来生成合并提交;两个分支尖端和它们的共同祖先。

通常,开发人员将快进合并用于小功能或错误修复,而 3 路合并则保留用于集成长时间运行的功能。

git merge 与 git merge --no-ff

Git Merge和Git Merge --no-ff有什么区别?通常,开发人员利用 git merge 命令来合并两个分支。git 命令将两个或多个提交合并(组合)到一个历史记录中。它的一般语法是:

git merge <branch>

默认情况下, git merge 命令是快进合并。当从当前分支尖端到目标分支存在线性路径时,可以进行快进合并。

在这种情况下,Git 并没有真正合并两个分支,而是集成了历史记录,即先前的提交,将当前分支提示向上移动到目标分支提示。

对于在快进合并期间需要合并提交的场景,我们使用带有 --no-ff 标志的 Git 合并命令。这个 git 命令的一般语法是:

git merge --no-ff <branch>

Git merge --no-ff 命令将指定分支合并到当前分支中的命令中,并确保即使是快进合并也能执行合并提交。它有助于记录相关 git repo 中所有执行的合并命令。

当 Git 检测到当前 HEAD 是你尝试合并的提交的祖先时,使用 --no-ff 参数可防止 Git 合并命令执行快进合并。

没有快进合并

大多数时候,首选快进合并。然而,有时可能需要防止发生快进合并。通常,这是在维护明确的分支拓扑时。

为此,可以使用 git merge 命令传递 --no-ff 参数。结果, git merge 命令将构造一个提交合并而不是快进。

如果 git merge 不能快进怎么办?

Git Merge和Git Merge --no-ff差异比较:如果你希望执行 Git 合并命令来显式执行快进合并,并且如果不能快进需要退出怎么办?有没有办法做到这一点?就在这里。

为此,你必须使用 --ff-only 参数,而不是使用 --no-ff 参数。在这种情况下,如果过程中出现错误,你可以返回并决定是合并还是rebase。

如何合并 2 个以上的分支?

git merge 命令提供对一系列合并策略的支持。对于合并两个以上的分支,有两种策略可用:

1. Octopus

这种Git合并策略主要用于合并主题分支头。这是拉取或合并多个分支时的默认合并策略。因此,这是合并两个分支时使用的策略。

虽然章鱼合并策略适用于解决多于两个头的情况,但它不能用于执行需要手动解决的复杂合并。

2. Ours

Ours合并策略可以解决任意数量的头。然而,合并的结果树属于当前分支头的树,并忽略来自其余分支的所有更改。它通常用于取代侧枝的旧发展历史。

结论

Git Merge和Git Merge --no-ff有什么区别?到目前为止,你必须清楚 git merge 和 Git merge --no-ff 命令之间的区别。理解差异对于正确使用这两个 git 命令很重要。

在文章中发现错误/误导性信息?道歉!请通过下面的专用评论部分与我们分享相同的内容,以帮助我们尽快修复它。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: