我可以告诉git pull覆盖而不是合并?
据我所知,git pull someRemote master
试图将远程分支合并到我的。我可以告诉git pull覆盖而不是合并?
有没有办法说“完全丢弃我的东西,只是让我使用git pull的另一个远程克隆”?我仍然想保留自己的存储库并保存它的历史记录,但是我希望在该命令之后有1:1的someRemote主分支副本。
为了澄清,想象有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项目,我可以在其中分解一个项目,稍微试验一下,让它独立几个星期,但是希望在不更改的情况下更新它,此刻我删除了我的叉子并重新分叉,这不是最好的方法。)
首先,你的主分支重命名为别的东西:
git branch -m master my_old_master
然后,创建一个新的主人:
git checkout -b master someRemote
有关Git的分支名称的伟大的事情是,他们不是真正的自己的地方,他们只是指针的地方(其中一个“地方”是一个SHA1提交ID)。
听起来就像你在git checkout之后,这会放弃你对本地路径的修改。
您可以使用Google Checkout恢复您的更改:
git checkout myfile.h
就会从索引恢复myfile.h
我想结帐只复位我的本地工作副本的最后修订在我的回购协议。它是否适用于遥控器? – 2010-04-19 05:33:51
是的,'git checkout'需要一个提交参数,所以'git checkout origin/foo bar.baz'是可能的。 – Bombe 2010-04-20 12:27:31
如果您想保留当前的主分支但注册新版本(镜像远程分支),您可以;
- 注册合并筛选器驱动程序(只是本次合并:a
keepTheir
one) - 做
git pull --no-commit
- 检查是否有没有需要被删除(在你的主人是不存在的文件的额外文件在远程分支)
- 提交
基本上我必须核弹我的分支?有没有办法让git神奇地合并这些更改,使它看起来像一个新的修订版本?我想保留我的分支和它的历史,我只是想让当前修订版本成为当前远程修订版的1:1副本。或者这仍然有效,新主人与老主人分享历史? – 2010-04-19 05:33:10
@迈克尔:你的改变不会消失;它们仍然存在于my_old_master分支中。如果您只需要一个分支,则您的“远程1:1副本”和“保留我的历史记录”的目标不兼容。因为修订版SHA1包含所有历史记录的SHA1,所以除非* all *历史在两个分支中都相同,否则分支与另一个分支不同。 – 2010-04-19 05:49:26
为了得到这个工作,我必须首先获取远程分支。 – 2011-03-19 20:40:37