强制Git rebase

时间:2011-07-29 16:16:44

标签: git

用例:相同存储库A,B,B2的三个git克隆。 Repos A和B是正常的,B2是裸的(用--bare制造)。一切都在我的控制之下,即只有一个用户。

在网站B上,我做工作(几个git提交),然后git push B2。

  • 在网站A上,git pull B2。
  • 在网站A上,git rebase -i xx..HEAD压缩一些提交并清理历史记录(一个很棒的命令)。
  • 问:如何将结果传达给网站B?

我能做到:

  • git push --force B2

但这不太对。在git pull B2之后,站点B工作目录将有一个奇怪的历史记录。

我需要一些不使用--force的方法。我想扔掉xx..HEAD B2,然后正常从A推。也许:

在B2(裸体回购)

  • git reset --hard xx

不确定是否足够。我可以通过从站点A重新克隆(删除B2,git init --bare,从A推送)来做到这一点,但这看起来有点矫枉过正。 How to push/pull Git rebase帖似乎相关,但我希望除了“不要这样做”之外还要回答一些问题。

最重要的是,我如何真正完全抛弃对B2的提交,以便A中的重新历史记录被接受为新的提交?

2 个答案:

答案 0 :(得分:4)

 git reset --hard 

只是在你希望它们被抛弃的意义上抛弃提交。

答案 1 :(得分:1)

  

我需要一些不使用--force的方法。我想扔掉xx..HEAD   B2,然后从A正常推送。

嗯,扔掉B2上的xx..HEAD,然后从A正常推送就是--force的确切定义。只需在拉到B时再次使用--force,你就可以了,只要你将B中的任何分支重新设置为提交xx或更早提交之前。