2011-07-29 78 views
3

使用案例:同一個存儲庫A,B,B2的三個git克隆。 Repos A和B是正常的,B2是裸露的(用--bare製成)。在我的控制下,即只有一個用戶。強制使用Git rebase

現場B,我工作(幾個git提交),然後git推B2。

  • 現場A,git pull B2。
  • 現場A,git rebase -i xx..HEAD壓扁一些提交和清理歷史記錄(一個偉大的命令)。
  • 問:如何將結果傳達給站點B?

我可以這樣做:

  • 混帳推--force B2

但是,這並不完全正確。站點B的工作目錄在git pull B2後會有一個奇怪的歷史記錄。

我需要一些方法來不使用--force。我想扔掉xx..HEAD上 B2,然後從A也許正常推進:

在B2(裸回購)

  • 的git的復位 - 硬XX

不確定這是否足夠。我可以通過從站點A重新克隆(刪除B2,git init --bare,從A推入)來實現,但這看起來像是矯枉過正。 How to push/pull Git rebase後似乎相關,但我希望除了「不這樣做」之外的一些答案。底線,我如何才能真正完全拋棄B2上的提交,這樣來自A的重新發布的歷史將被接受爲新的提交?

回答

0

我需要一些方法來不使用--force。我想扔掉xx..HEAD上 B2,然後從A通常能促進

嗯,扔掉xx..HEAD對B2,然後從通常的推動是相當多的確切定義--force。當拉到B時,只要再次使用--force即可,只要您在拉動之前將B中的任何分支重新綁定爲xx或更早。

2
git reset --hard 

只是在你想讓它們被扔掉的意義上拋棄提交。