最近由于几次错误提交,我不得不压缩提交。简单地做 git pull --rebase origin master
对我有用,但我的队友已经在旧历史之上合并了新历史。所以我想知道是否可以覆盖本地历史记录?
假设分支 remoteNew
、localOld
和 localNew
中的三个时间线有一个小时前的提交。
以下作品并用新历史完全覆盖旧历史。虽然这里需要注意的是,在 newHistory 创建之后,oldHistory 没有新的提交。
git checkout localOld
git pull --rebase origin remoteNew
以下无法如我所愿。它不会覆盖本地历史记录,而是创建一个带有冲突的合并。
git checkout localNew
git pull --rebase origin remoteNew
我相信这是因为本地有新的提交。虽然我真正想要的是 git push --force
之类的结果,但对于拉。另一种方法是用新分支替换 master 分支并重命名它。还有其他覆盖本地历史记录的选项吗?
注意:想清楚这是旧存储库,但团队尚未对其进行处理,我们处于采用 git 的初始阶段并在整个团队开始工作之前完成工作流程。
答案 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
仍会指向您的未修改分支,您可以检查 localBranch
和 origin/remoteBranch
的历史记录以查看发生了哪些更改远程,并可能与您的本地更改冲突:
git log --graph --oneline localBranch origin/remoteBranch
如果您想在远程分支之上完成本地工作的重新定位:
git rebase --continue
以继续如果你想取消rebase :
git rebase --abort
无论如何,远程分支现在已更新。
如果您取消了变基,您可以随时从您的 git rebase origin/remoteBranch
重新运行 localBranch
。