You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Git仓库A的指定提交应用到仓库B的对应目录?

将仓库A的指定提交应用到仓库B的对应目录

问题原因

你之前的操作失败,是因为在A_dir目录下生成的补丁,文件路径是相对于仓库A根目录的(比如A_dir/xxx.txt),而你在B_dir目录下执行git apply时,B仓库里的目标文件路径是相对于B仓库根目录的(比如B_dir/xxx.txt),路径不匹配导致Git找不到要修改的文件,所以补丁没生效,仅留下未跟踪的补丁文件。

解决方法

方法一:修正补丁路径后应用

适合不想添加远程仓库的场景:

  • 进入仓库A的根目录,生成路径相对A_dir的补丁:
    cd /path/to/repoA
    git format-patch <commit_id> -1 --relative=A_dir -o /tmp
    
    (--relative=A_dir让补丁里的文件路径仅保留A_dir下的相对路径,-o /tmp指定补丁输出到临时目录,避免污染仓库A)
  • 切换到仓库B的B_dir目录,复制并应用补丁:
    cd /path/to/repoB/B_dir
    cp /tmp/0001.patch .
    git apply --check 0001.patch  # 先检查补丁是否可正常应用
    git apply 0001.patch          # 应用补丁
    
  • 确认生效后,删除补丁文件:rm 0001.patch

方法二:用git cherry-pick(推荐,保留提交信息)

更可靠,还能完整保留原提交的信息:

  • 进入仓库B的根目录,添加仓库A为临时远程:
    cd /path/to/repoB
    git remote add temp-repoA /path/to/repoA
    
  • 拉取仓库A的提交记录:
    git fetch temp-repoA
    
  • 切换到B_dir所在的目标分支(比如main),执行cherry-pick并指定路径过滤:
    git checkout main
    git cherry-pick <commit_id> --strategy-option=theirs -- B_dir/
    
    (--strategy-option=theirs表示如果有冲突,优先使用仓库A提交的内容;若需要手动解决冲突,可去掉该参数)
  • 完成后删除临时远程:
    git remote remove temp-repoA
    

内容的提问来源于stack exchange,提问作者AllenHu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:31:16