如何覆盖Git命令?配置pull别名后git pull未执行预期rebase
问题分析与解决
为什么你的别名没生效?
Git的内置命令(比如原生git pull)优先级远高于自定义别名,所以你设置的alias.pull根本不会被触发——执行git pull时,Git直接调用了内置的merge模式,而非你定义的rebase参数,这就是为什么会出现「Not possible to fast-forward, aborting」的报错(默认merge模式下,分支分叉无法快进时就会中止)。
正确解决方案(不用换命令)
直接通过Git原生配置项修改git pull的默认行为,步骤如下:
- 先删掉无效的别名:
git config --global --unset alias.pull - 设置全局
pull.rebase配置为merges:git config --global pull.rebase merges
这样设置后,你每次执行git pull都会自动采用pull --rebase=merges的逻辑,完全不用更换命令,匹配你的使用习惯。
补充说明
pull.rebase=merges的作用是:在rebase时保留本地已有的合并提交,仅将远程新增的提交重放到本地分支顶端,既避免了不必要的合并节点,又不会丢失你之前的合并操作记录。
内容的提问来源于stack exchange,提问作者Liu Hao
相关产品推荐
相关产品推荐

