我可以告诉git pull覆盖而不是合并吗?

时间:2010-04-19 03:24:35

标签: git git-pull

据我所知,git pull someRemote master尝试将远程分支合并到我的。

有没有办法说“完全丢弃我的东西,只需使用git pull让我另一个克隆遥控器”?我仍然希望保留自己的存储库并保留它的历史记录,但我想在该命令之后获得someRemote主分支的1:1副本。

为了澄清,想象有2个存储库,RM和MY。数字是提交,这假设只有一个分支(主)。

RM1 --- RM2 --- RM3 --- RM4 --- RM5 --- RM6 ...
|                        |
+-> MY1 --- MY2 --- MY3 -+-> MY4 --- MY5 --- MY6 ...

所以我将自己的存储库作为RM1的克隆启动。然后我愉快地发展,RM愉快地发展,但我们从不分享我们的工作。在MY3之后,我意识到我的分支并不是那么好,但RM4非常好。所以我想git pull RM4进入MY。但是,我不希望MY1-3中的更改持续存在,我希望MY4是RM4的1:1副本。

但是,我想保留我的历史,理想情况下我希望在MY3和RM4之间或在MY3和RM2-4之间进行更改。

它应该仍然存在我的存储库。

这可能吗?

(这适用于GitHub项目,我可以在这些项目中分叉项目,试验一下,不管它几个星期但是想要更新它而不保留我的更改。目前我删除了我的分叉并重新分叉,这不是最好的方法。)

3 个答案:

答案 0 :(得分:33)

首先,将您的主分支重命名为其他内容:

git branch -m master my_old_master

然后,创建一个新的主人:

git checkout -b master someRemote

关于Git的分支名称的好处在于它们本身并不是实际的位置,它们只是指向地方的指针(其中“地方”是SHA1提交ID)。

答案 1 :(得分:4)

听起来像是在git checkout之后,这会丢弃你对路径的本地更改。

您可以使用结帐恢复您的更改:

git checkout myfile.h

将从索引

恢复myfile.h

http://git-scm.com/docs/git-checkout

答案 2 :(得分:2)

如果您想保留当前的主分支但注册新版本(镜像远程分支),您可以;

  • 注册合并过滤器驱动程序(仅适用于此合并:a keepTheir one
  • 执行git pull --no-commit
  • 检查是否没有需要删除的额外文件(主服务器中远程分支中不存在的文件)
  • 提交