如何在保留历史记录的同时强制从远程仓库中更改本地仓库?

时间:2016-08-04 22:58:17

标签: git git-pull

我知道如果我想用远程仓库中的文件强行覆盖本地仓库,我会这样做:

git fetch --all
git reset --hard origin/master

问题在于,当我去看当地回购的历史时,它已经完全抹杀了历史,并用远程回购历史的副本替换了它。

有没有办法可以在保留历史记录的同时进行强制覆盖?

例如,如果我在本地仓库中有一个文件,其中包含以下内容:

- ContentA
- ContentB
- ContentC

我在远程仓库中有相同的文件,内容如下:

- ContentA
- ContentC
- ContentD

从远程仓库拉出后,我希望历史记录显示该文件:

Version #1
- ContentA
- ContentB
- ContentC

Version #2
- ContentA
- ContentC
- ContentD

我不希望它显示这个(来自强制覆盖):

Version #1
- ContentA
- ContentC
- ContentD

我也不想让它显示(来自合并):

Version #1
- ContentA
- ContentB
- ContentC

Version #2
- ContentA
- ContentB
- ContentC
- ContentD

这可能吗?

1 个答案:

答案 0 :(得分:1)

您无法让遥控器为您执行合并。你需要进行合并,然后你推送它所拥有的东西,它只是快速转发到你的提交。因此,您需要安排提交以解决您想要的任何内容,然后推送

您可以使用--no-commit选项进行合并,然后使用git checkout --ours或git checkout --thehis选择您想要的哪一方文件,然后git添加这些文件,最后git提交结束合并,以选择您想要的文件更改。至于你想要的历史,你可以编辑实际的提交注释,如果这就是你想要的。