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

如何合并同一Git仓库中两个asm.py的提交历史并关联至dir/asm.py

实现方案

你可以根据仓库协作场景选择以下两种方案之一:

方案1:不修改现有提交历史(适合多人协作仓库)

该方案无需调整已有的提交记录,仅通过Git自带的复制/重命名检测能力即可追溯完整历史:

  • 提交C中两个asm.py的内容完全匹配,你可以先正常提交删除根目录./asm.py的变更,后续使用以下命令查看dir/asm.py的完整历史:
    git log --follow --find-copies=100% dir/asm.py
    
    参数说明:
    • --follow:开启文件重命名/复制历史跟踪
    • --find-copies=100%:检测内容100%匹配的文件复制行为,刚好匹配提交C的场景

方案2:重写提交历史(适合单人开发/可同步强制更新的仓库)

该方案修改提交历史后,无需额外参数即可直接查看dir/asm.py的完整提交链路:

  1. 先切换到master分支并同步最新代码,确保本地工作区无未提交变更:
    git checkout master
    git pull
    
  2. 通过git log --oneline找到提交C的父提交(即提交B)的哈希值,启动交互式rebase:
    git rebase -i <提交B的哈希值>
    
  3. 在弹出的编辑界面中,将提交C对应的行开头的pick修改为edit,保存退出,此时rebase会暂停在提交C的位置。
  4. 修改提交C的内容,将「新增dir/asm.py」的行为改为「移动./asm.py到目标路径」,让Git识别为文件重命名:
    # 撤销提交C的原有变更
    git reset HEAD^
    # 执行文件移动操作
    git mv asm.py dir/asm.py
    # 如果提交C包含其他变更,此时执行git add添加对应变更即可
    # 复用原提交C的提交信息生成新提交
    git commit -C HEAD@{1}
    # 继续完成剩余的rebase流程
    git rebase --continue
    
  5. 重写完成后验证历史,此时不需要加额外参数就能看到完整的提交链路:
    git log dir/asm.py
    
  6. 如需推送到远程仓库,使用强制推送命令:
    git push --force origin master
    
    注意:多人协作场景下需提前通知所有协作者将本地master分支rebase到远程新的master分支,避免历史冲突。

两种方案操作完成后,根目录的./asm.py可直接删除提交,不会影响dir/asm.py的历史追溯能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:39:02