变基内容相同但哈希值不同的提交

Rebasing commits that are identical in content, but different in hash

在我从事的一个项目中,有一个奇怪的系统,我基本上可以在其中输入要附加到 master 的新提交。不是在补丁被放入时提交补丁,而是在其元数据中稍作修改(尽管内容是 100% 相同的)。不幸的是,这意味着我的本地提交 ID 在通过系统后与远程不匹配。即,假设我有一个包含三个提交的远程存储库的本地副本:

C1 -> C2 -> C3

现在我在本地创建三个新提交,X4X6

C1 -> C2 -> C3 -> X4 -> X5 -> X6

然后我提交X4到系统,变成了C4(内容相同,hash不同)。这意味着遥控器现在有

C1 -> C2 -> C3 -> C4

和我当地的

C1 -> C2 -> C3 -> X4 -> X5 -> X6

我想从远程 C4 拉取,删除我的本地 X4 并将 X5 附加到`C4,这样我就可以在本地获得:

C1 -> C2 -> C3 -> C4 -> X5 -> X6

现在我正在通过本地 运行 git format-patch,然后 git reset --hard origin/mastergit pull,然后 git am 只有 X5X6。这是一个烦人且乏味的过程,有没有更好的方法?

交互式变基可能会解决问题。

你应该可以做到 git pull --rebase=i
在交互式 UI 中,要放弃您的 X4 提交,请将 "pick" 替换为 "drop" 或 "d"。

变基文档:https://git-scm.com/book/en/v2/Git-Branching-Rebasing

本地回购

C1---C2---C3---X4---X5---X6 (master)

远程回购

C1---C2---C3---C4 (origin/master)

从远程获取更改 (来源)

git fetch origin

本地回购

C1---C2---C3---X4---X5---X6 (master)
           \
            C4 (origin/master)

重新设置当前分支 (master) 到C4并省略X4

git rebase --onto C4 X4

本地回购

C1---C2---C3---C4---X5---X6 (master)
                \
                 (origin/master)

More info on rebase onto