这些命令用于配置 Git 在 git pull
时的合并策略,具体解释如下:
1. git config pull.rebase false
(默认行为)
git config pull.rebase false # 使用 merge 方式合并
- 行为:当执行
git pull
时,Git 会先fetch
远程变更,然后用 merge 合并到本地分支。 - 特点:
- 保留完整的历史记录,包括合并提交(merge commit)。
- 如果本地和远程分支有分叉(diverged),会产生一个新的合并提交。
- 适用场景:需要保留分支合并历史,或者团队协作中明确使用合并提交的情况。
2. git config pull.rebase true
(推荐线性历史)
git config pull.rebase true # 使用 rebase 方式合并
- 行为:当执行
git pull
时,Git 会先fetch
远程变更,然后用 rebase 将本地提交“移动”到远程分支的最新提交之后。 - 特点:
- 保持提交历史线性,避免多余的合并提交。
- 本地未推送的提交会被重新应用到远程分支的最新提交之后。
- 注意:如果本地提交已推送到远程仓库,强制推送(
git push -f
)可能导致协作问题。
- 适用场景:希望保持提交历史简洁,适合个人分支或团队约定使用 rebase 的情况。
3. git config pull.ff only
(严格快进合并)
git config pull.ff only # 仅允许快进(fast-forward)合并
- 行为:当执行
git pull
时,Git 只允许 快进合并(fast-forward)。如果无法快进,则合并失败。 - 特点:
- 如果远程分支是本地分支的直接延续(即没有分叉),合并会成功。
- 如果存在分叉,Git 会报错,要求手动处理(例如先执行
git rebase
或git merge
)。
- 适用场景:强制保持分支历史线性,适合需要严格避免合并提交的项目。
如何配置?
- 全局配置(对所有仓库生效):
git config --global pull.rebase true # 所有仓库默认使用 rebase
- 单仓库配置(仅对当前仓库生效):
git config pull.ff only # 仅当前仓库启用快进合并
总结表格
配置项 | 合并策略 | 提交历史特点 | 适用场景 |
---|---|---|---|
pull.rebase false | Merge | 可能有合并提交 | 需要保留合并历史 |
pull.rebase true | Rebase | 线性历史,无合并提交 | 保持提交历史简洁 |
pull.ff only | Fast-Forward | 严格线性历史,无合并提交 | 强制禁止分叉合并 |
根据团队协作规范或个人偏好选择合适的策略!