无需修改索引与工作区,合并三个Git树的可行方案咨询
解决方案
使用git merge-tree --write-tree命令即可完全满足你的需求,这是Git当前推荐的替代旧版三方树合并用法的方式:
命令格式
git merge-tree --write-tree <base-tree-id> <tip1-tree-id> <tip2-tree-id>
核心特性说明
- 不改动提交历史:命令仅在内存中执行合并计算,不会创建任何新提交或修改现有提交
- 可指定三方树:明确接受基础树ID和两个尖端树ID作为参数
- 零副作用:绝对不会修改当前工作区、索引的任何内容
- 输出规则:合并成功时直接输出合并后的树对象ID;若存在冲突,命令以非零状态码退出,无任何树ID输出
实用示例
如果需要合并main分支的基础树、feature-A和feature-B两个分支的尖端树,可先获取对应树ID:
# 获取基础树ID(比如main分支最新提交的树) BASE_TREE=$(git rev-parse main^{tree}) # 获取两个尖端树ID TIP1_TREE=$(git rev-parse feature-A^{tree}) TIP2_TREE=$(git rev-parse feature-B^{tree}) # 执行合并 git merge-tree --write-tree $BASE_TREE $TIP1_TREE $TIP2_TREE
执行后,控制台仅在合并成功时显示合并后的树ID,冲突时无输出。
内容的提问来源于stack exchange,提问作者eftshift0
相关产品推荐
相关产品推荐

