变基内容相同但哈希值不同的提交
Rebasing commits that are identical in content, but different in hash
在我从事的一个项目中,有一个奇怪的系统,我基本上可以在其中输入要附加到 master 的新提交。不是在补丁被放入时提交补丁,而是在其元数据中稍作修改(尽管内容是 100% 相同的)。不幸的是,这意味着我的本地提交 ID 在通过系统后与远程不匹配。即,假设我有一个包含三个提交的远程存储库的本地副本:
C1 -> C2 -> C3
现在我在本地创建三个新提交,X4
到 X6
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/master
和 git pull
,然后 git am
只有 X5
和 X6
。这是一个烦人且乏味的过程,有没有更好的方法?
交互式变基可能会解决问题。
你应该可以做到 git pull --rebase=i
在交互式 UI 中,要放弃您的 X4 提交,请将 "pick" 替换为 "drop" 或 "d"。
本地回购
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
在我从事的一个项目中,有一个奇怪的系统,我基本上可以在其中输入要附加到 master 的新提交。不是在补丁被放入时提交补丁,而是在其元数据中稍作修改(尽管内容是 100% 相同的)。不幸的是,这意味着我的本地提交 ID 在通过系统后与远程不匹配。即,假设我有一个包含三个提交的远程存储库的本地副本:
C1 -> C2 -> C3
现在我在本地创建三个新提交,X4
到 X6
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/master
和 git pull
,然后 git am
只有 X5
和 X6
。这是一个烦人且乏味的过程,有没有更好的方法?
交互式变基可能会解决问题。
你应该可以做到 git pull --rebase=i
在交互式 UI 中,要放弃您的 X4 提交,请将 "pick" 替换为 "drop" 或 "d"。
本地回购
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