【发布时间】:2020-11-07 08:58:42
【问题描述】:
我有一个提交 A B C 的本地仓库和一个提交 D E F 的远程仓库。在他们的历史中没有什么共同点。
我想要一个拉取远程提交并将它们放在本地提交的顶部,这样最后我就有了: A B C D E F 以 F 为 HEAD
我试过 git pull --rebase 但它把本地放在顶部:D E F A B C
如何通过 repo 忽略它们的不同历史,在本地之上获得远程?
【问题讨论】:
我有一个提交 A B C 的本地仓库和一个提交 D E F 的远程仓库。在他们的历史中没有什么共同点。
我想要一个拉取远程提交并将它们放在本地提交的顶部,这样最后我就有了: A B C D E F 以 F 为 HEAD
我试过 git pull --rebase 但它把本地放在顶部:D E F A B C
如何通过 repo 忽略它们的不同历史,在本地之上获得远程?
【问题讨论】:
git pull --rebase 是git fetch 和git rebase origin/<branch> 的组合,当然它是这样做的,因为您不能将您的更改推送到服务器上已经存在的更改之下,而无需重写服务器历史记录,因此会破坏其他所有人的分支。
如果你真的需要这样做:
git checkout -b <new> origin/<branch> 用 D E F 创建新分支git rebase <branch> rebase 到 A B C【讨论】:
git status 会告诉你该怎么做。你会以任何其他方式得到冲突。
git push --force-with-lease
我可以从您的案例中推断出,假设存在以下历史并且当前分支是“本地”:
A---B---C local
/
D---E---F <master/remote>
您可以执行以下两件事。
从此时开始,以下任一命令的结果:您可以签出分支并将远程重新定位到分支。
git rebase master
git rebase master local_branch
A'--B'--C' topic
/
D---E---F master
注意:后一种形式只是git checkout topic 后跟git rebase master 的简写形式。当 rebase 退出时,主题将保持已签出的分支。
【讨论】: