如何用遥控器覆盖本地历史记录?

时间:2021-06-06 20:38:37

标签: git git-rebase git-pull

最近由于几次错误提交,我不得不压缩提交。简单地做 git pull --rebase origin master 对我有用,但我的队友已经在旧历史之上合并了新历史。所以我想知道是否可以覆盖本地历史记录?

假设分支 remoteNewlocalOldlocalNew 中的三个时间线有一个小时前的提交。

以下作品并用新历史完全覆盖旧历史。虽然这里需要注意的是,在 newHistory 创建之后,oldHistory 没有新的提交。

git checkout localOld
git pull --rebase origin remoteNew

以下无法如我所愿。它不会覆盖本地历史记录,而是创建一个带有冲突的合并。

git checkout localNew
git pull --rebase origin remoteNew

我相信这是因为本地有新的提交。虽然我真正想要的是 git push --force 之类的结果,但对于拉。另一种方法是用新分支替换 master 分支并重命名它。还有其他覆盖本地历史记录的选项吗?

注意:想清楚这是旧存储库,但团队尚未对其进行处理,我们处于采用 git 的初始阶段并在整个团队开始工作之前完成工作流程。

2 个答案:

答案 0 :(得分:2)

用远程历史覆盖本地历史,将删除所有文件,其中在本地历史上。所以要小心!

git fetch --all
git reset --hard <remote>/<branch-name>

因此,使用 git fetch,您可以下载最新的远​​程历史记录。使用 git reset,您可以将分支重置为刚刚获取的分支。

有关更多信息,请查看此类似问题:How do I force "git pull" to overwrite local files?

答案 1 :(得分:1)

git pull --rebase ... 将在远程分支之上运行您的工作的变基;变基很可能会引发冲突,如果您想继续,则需要修复它们。

只要 rebase 未完成,localBranch 仍会指向您的未修改分支,您可以检查 localBranchorigin/remoteBranch 的历史记录以查看发生了哪些更改远程,并可能与您的本地更改冲突:

git log --graph --oneline localBranch origin/remoteBranch

如果您想在远程分支之上完成本地工作的重新定位:

  • 检查并修复冲突文件中的冲突,
  • 运行 git rebase --continue 以继续

如果你想取消rebase :

  • 运行git rebase --abort

无论如何,远程分支现在已更新。

如果您取消了变基,您可以随时从您的 git rebase origin/remoteBranch 重新运行 localBranch