27

据我所知,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 pullRM4变成MY。但是,我不希望我在 MY1-3 中的更改持续存在,我希望 MY4 成为 RM4 的 1:1 副本。

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

它仍应保留在我的存储库中。

那可能吗?

(这适用于 GitHub 项目,我可能会在其中分叉一个项目,进行一些实验,将其单独放置几周,然后想在不保留更改的情况下更新它。目前我删除了我的分叉并重新分叉,这不是t 最好的方法。)

4

3 回答 3

33

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

git branch -m master my_old_master

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

git checkout -b master someRemote

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

于 2010-04-19T03:43:10.670 回答
4

听起来您正在使用 git checkout,它将丢弃您对路径的本地更改。

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

git checkout myfile.h

将从索引中恢复 myfile.h

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

于 2010-04-19T03:30:56.203 回答
2

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

  • 注册一个合并过滤器驱动程序(仅用于此合并:一个keepTheir
  • 做一个git pull --no-commit
  • 检查是否没有需要删除的额外文件(您的 master 中不存在于远程分支中的文件)
  • 犯罪
于 2010-04-19T06:09:40.590 回答