如何用远程覆盖本地历史记录?
How to overwrite local history with remote?
最近由于几次错误的提交,我不得不压缩提交。简单地做 git pull --rebase origin master
对我有用,但我的队友已经在旧历史之上合并了新历史。所以我想知道是否可以覆盖本地历史记录?
假设分支 remoteNew
、localOld
和 localNew
中有三个时间线有一个小时前的提交。
以下有效并用新历史完全覆盖旧历史。不过这里需要注意的是,oldHistory 在创建 newHistory 之后没有新的提交。
git checkout localOld
git pull --rebase origin remoteNew
以下内容不符合我的要求。它不会覆盖本地历史记录,而是创建有冲突的合并。
git checkout localNew
git pull --rebase origin remoteNew
我相信这是因为本地有新的提交。虽然我真正想要的是 git push --force
之类的结果,但是为了拉动。另一种方法是用新分支替换 master 分支并重命名。还有其他覆盖本地历史记录的选项吗?
注意:我想澄清一下,这是旧存储库,但团队尚未对其进行处理,我们正处于采用 git 的初始阶段,并在整个团队开始处理之前完成工作流。
要用远程历史覆盖本地历史,将删除所有文件,其中只有在本地历史上。所以要小心!
git fetch --all
git reset --hard <remote>/<branch-name>
因此,使用 git fetch
您可以下载最新的远程历史记录。使用 git reset
,您将分支重置为您刚刚获取的内容。
有关更多信息,请查看此类似问题:How do I force "git pull" to overwrite local files?
git pull --rebase ...
将 运行 对您在远程分支之上的工作进行变基;变基很可能会引发冲突,如果你想继续,你需要修复它们。
只要 rebase 没有完成,localBranch
仍会指向你未修改的分支,你可以检查 localBranch
和 origin/remoteBranch
的历史记录,看看有什么变化登陆远程,并可能与您的本地更改发生冲突:
git log --graph --oneline localBranch origin/remoteBranch
如果您想在远程分支之上完成对本地工作的变基:
- 检查并修复冲突文件中的冲突,
- 运行
git rebase --continue
继续
如果你想取消rebase:
- 运行
git rebase --abort
无论如何,远程分支现已更新。
如果您取消了 rebase,您可以随时从您的 localBranch
重新运行 git rebase origin/remoteBranch
。
最近由于几次错误的提交,我不得不压缩提交。简单地做 git pull --rebase origin master
对我有用,但我的队友已经在旧历史之上合并了新历史。所以我想知道是否可以覆盖本地历史记录?
假设分支 remoteNew
、localOld
和 localNew
中有三个时间线有一个小时前的提交。
以下有效并用新历史完全覆盖旧历史。不过这里需要注意的是,oldHistory 在创建 newHistory 之后没有新的提交。
git checkout localOld
git pull --rebase origin remoteNew
以下内容不符合我的要求。它不会覆盖本地历史记录,而是创建有冲突的合并。
git checkout localNew
git pull --rebase origin remoteNew
我相信这是因为本地有新的提交。虽然我真正想要的是 git push --force
之类的结果,但是为了拉动。另一种方法是用新分支替换 master 分支并重命名。还有其他覆盖本地历史记录的选项吗?
注意:我想澄清一下,这是旧存储库,但团队尚未对其进行处理,我们正处于采用 git 的初始阶段,并在整个团队开始处理之前完成工作流。
要用远程历史覆盖本地历史,将删除所有文件,其中只有在本地历史上。所以要小心!
git fetch --all
git reset --hard <remote>/<branch-name>
因此,使用 git fetch
您可以下载最新的远程历史记录。使用 git reset
,您将分支重置为您刚刚获取的内容。
有关更多信息,请查看此类似问题:How do I force "git pull" to overwrite local files?
git pull --rebase ...
将 运行 对您在远程分支之上的工作进行变基;变基很可能会引发冲突,如果你想继续,你需要修复它们。
只要 rebase 没有完成,localBranch
仍会指向你未修改的分支,你可以检查 localBranch
和 origin/remoteBranch
的历史记录,看看有什么变化登陆远程,并可能与您的本地更改发生冲突:
git log --graph --oneline localBranch origin/remoteBranch
如果您想在远程分支之上完成对本地工作的变基:
- 检查并修复冲突文件中的冲突,
- 运行
git rebase --continue
继续
如果你想取消rebase:
- 运行
git rebase --abort
无论如何,远程分支现已更新。
如果您取消了 rebase,您可以随时从您的 localBranch
重新运行 git rebase origin/remoteBranch
。