git 中的 --no-ff 参数是啥意思

git在合并分支时,一般都会加上 --no-ff 参数,像这样:

$ git checkout develop
$ git merge --no-ff feature

那这里的 --no-ff 参数具体作用是什么呢?
主要是为了禁止 git 的快进式合并。

git 在合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么在合并两者时,git 只会简单地把指针右移,这种操作就是“快进”(fast-forward),像这样:

          A---B---C feature
         /
D---E---F master

现在你要把 feature 分支合并到 master 分支,执行下面命令:

$ git checkout master
$ git merge feature

执行完命令后,结果就会变成:

          A---B---C feature
         /         master
D---E---F 

因为 feature 分支就在 master 的下游,所以上述操作后就会直接移动 master 的指针,最终结果是 master 和 feature 都指向了 C。那我们来看看如果执行 git merge --no-ff feature 命令的话,将会是下面的结果:

          A---B---C feature
         /         \
D---E---F-----------G master

由于 --no-ff 命令禁止了快进式的合并,所以在 master 上会生成一个新的提交,此时 master 会指向 G。

其实从合并后的代码来看,结果是一样的,区别就在于 --no-ff 会让 git 生成一个新的提交对象。

所以你可能会问了,既然如此,为什么要这样?

因为通常我们把 master 作为主分支,上面存放的都是比较稳定的代码,提交频率也很低,而 feature 一般是我们的开发分支,上面会存许多零碎的提交,而快进式合并会把 feature 的提交历史混入到 master 中,搅乱 master 的提交历史。所以如果你根本不在意提交历史,也不爱管 master 干不干净,那么 --no-ff 其实没什么用。不过,如果某一次 master 出现了问题,你需要回退到上个版本的时候,比如上例,你就会发现退一个版本到了 B,而不是想要的 F,因为 feature 的历史合并进了 master 分支里。

 
 
 
 
 
 
 
 
 
 

参考链接:
https://blog.csdn.net/zombres/article/details/82179122

### Git Cherry-Pick 命令参数及选项 Git cherry-pick 是一种用于将特定提交应用到当前分支上的工具。以下是关于 `git cherry-pick` 的主要参数及其用途: #### 主要参数 - `<commit>`...:指定想要挑拣的一个或多个提交哈希值[^4]。 #### 可选参数 - `--edit` 或 `-e`: 默认情况下,cherry-pick 会尝试自动应用更改并创建新提交;如果指定了此标志,则会在每次操作前打开编辑器让用户修改提交信息。 - `-n` 或 `--no-commit`: 应用更改但不自动生成新的提交记录,允许用户进一步调整文件后再做最终提交。 - `-m <parent-number>`: 当处理合并提交时,该选项用来指示应基于哪个父级来重现变更。对于常规线性历史中的单个父节点,默认行为通常是合适的,但对于复杂的合并情况可能需要特别指出哪一个父母作为基础。 - `-s` 或 `--signoff`: 自动向提交消息中添加 Signed-off-by 行,表明作者同意某些贡献协议条款。 - `-x`: 将原始提交 ID 添加至新提交的信息里,以便追踪源出处。 - `--ff`: 如果目标分支已经包含了所请求的提交,则执行快速前进(fast-forward),而不是创建一个新的提交对象。 - `-S[<keyid>]`: 使用 GPG 密钥签名此次提交,可选地提供密钥ID以选择具体的身份验证方式。 #### 控制流程的操作符 - `--continue`: 解决冲突之后继续正在进行中的樱桃采摘过程。 - `--skip`: 跳过当前正在处理的提交,并恢复剩余部分的工作流[^2]。 - `--abort`: 终止整个樱桃采摘序列,并重置工作目录回到最初状态之前的状态[^3]。 - `--quit`: 结束樱桃采摘进程而不完成任何未解决的选择项,保留已完成的部分不变。 ```bash # 示例:带参数的应用单一提交 $ git cherry-pick -x <commit-hash> # 示例:连续挑选多条记录 $ git cherry-pick A..B # 拣选从A(不含)到B之间的所有提交 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西瓜味儿的小志

您的支持是创作的最大动力^_^

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值