You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何重构GitHub仓库提交历史,保留作者与时间戳并调整Fork结构?

可行的实现方法

完全可以通过Git的提交移植操作实现需求,以下是具体步骤(假设所有仓库默认分支为main,可根据实际分支名替换):

  1. 创建目标Fork
    在GitHub上直接fork用户1的original仓库到自己账号下,得到你的fork(original)仓库。

  2. 本地克隆并配置远程仓库

  • 克隆刚创建的fork(original)仓库到本地:
    git clone git@github.com:你的用户名/original.git
    cd original
    
  • 添加两个远程仓库地址,分别指向用户2的copy仓库和你原来的fork(copy)仓库:
    git remote add copy git@github.com:用户2/copy.git
    git remote add my-old-fork git@github.com:你的用户名/原fork仓库名.git
    
  1. 拉取所有远程仓库的提交
    拉取copy和原fork仓库的最新提交到本地:
git fetch copy
git fetch my-old-fork
  1. 移植copy仓库的新增提交
    先找到original仓库的最新提交哈希值(记为ORIGINAL_LAST),可通过git log original/main --oneline -1获取。然后将copy仓库中在original之后的所有提交移植到当前分支:
git cherry-pick ORIGINAL_LAST..copy/main

此操作会完整保留用户2提交的作者信息、提交时间戳等元数据。如果遇到冲突,解决冲突后执行git cherry-pick --continue即可继续移植,若要终止操作可执行git cherry-pick --abort

  1. 移植自己原fork的新增提交
    找到copy仓库的最新提交哈希值(记为COPY_LAST),通过git log copy/main --oneline -1获取。接着将自己原fork中在copy之后的所有提交移植过来:
git cherry-pick COPY_LAST..my-old-fork/main

同样,此操作会保留你自己提交的原始信息,冲突处理方式同上。

  1. 验证并推送结果
  • 查看提交历史,确认结构、作者信息和时间戳是否符合预期:
    git log --oneline --pretty=format:"%h %an %ad %s"
    
  • 确认无误后,将本地修改推送到自己的fork(original)仓库:
    git push origin main
    

完成后,你的fork(original)仓库就会拥有original的基础提交,接着是用户2copy仓库的所有新增提交,最后是你自己的提交,完全满足需求。

内容的提问来源于stack exchange,提问作者G. Ianni

火山引擎 最新活动