Git分支分叉 | AI生成和翻译

Home 2025.03

当你的本地 main 分支与远程 origin/main 分支在 Git 中出现分叉(分别拥有 74 个和 70 个不同提交)时,说明它们拥有共同祖先,但之后各自产生了独立提交。你的目标是通过将本地分支重置到共同祖先(即”两者的父提交”),然后使用 git pull 获取远程变更,使本地 main 分支与 origin/main 保持一致。这将有效丢弃你的本地分叉提交,采用远程提交。以下是实现此目标的步骤。

修复分叉的步骤

  1. 获取最新远程变更
    首先确保本地仓库拥有来自远程的最新信息。这会更新你对 origin/main 的引用,但尚未更改本地 main 分支。

    git fetch origin
    
  2. 查找共同祖先提交
    使用 git merge-base 识别本地 mainorigin/main 的共同祖先提交。这是分支分叉的起点。

    ancestor=$(git merge-base main origin/main)
    

    该命令将共同祖先的提交哈希值存入变量 ancestor

  3. 将本地 main 重置至共同祖先
    将本地 main 分支重置到共同祖先提交。--hard 选项会同时更新分支指针和工作目录,丢弃此时间点之后的所有本地提交和变更。

    git reset --hard $ancestor
    

    注意:此操作将丢弃工作目录和暂存区中所有未提交的变更,以及本地 main 分支独有的 74 个提交。如需保留这些内容,请先创建备份分支(参见下文”可选备份”)。

  4. 拉取远程变更
    现在从 origin/main 拉取变更。由于本地 main 已处于共同祖先,而 origin/main 领先 70 个提交,这将快速前进你的本地 main 分支以匹配 origin/main

    git pull origin main
    

    完成后,你的本地 main 分支将与 origin/main 完全一致,所有本地分叉提交均被丢弃。

完整命令序列

以下是需要执行的完整命令序列:

git fetch origin
ancestor=$(git merge-base main origin/main)
git reset --hard $ancestor
git pull origin main

会发生什么?

最终你的本地 main 会与 origin/main 完全一致,实现采用远程分支的目标。

可选备份

如果不确定是否要丢弃本地提交,可在重置前创建备份分支进行保留:

git branch backup-main

在执行 git reset 命令前运行此命令。你的 74 个本地提交将保留在 backup-main 分支中,后续可按需查看。

重要说明

遵循这些步骤,你将成功重置本地 main 分支以匹配目标状态。


Back Donate