2011-01-07 69 views
2

我已經壓扁了2個提交(A和B)到一個新的提交(C)。前兩個提交(A和B)被刪除。 我把這些提交從我的開發倉庫推到了一箇中央倉庫(裸倉庫)。兩個回購的git-log確認提交A和B已被刪除。問題是,當我拉第三個存儲庫已經有(A和B)它現在有所有三個提交(A,B和C)。Git存儲庫在重新綁定後不同步

我還以爲拉將同步這些變化。我需要結賬A〜1,然後合併新的更改嗎?這似乎很麻煩,特別是在生產環境中。

+2

它通常建議混帳重訂只能在尚未與其他存儲庫正是這個原因,共享代碼中使用。我不能簡明扼要地解釋爲什麼,但如果你閱讀「自下而上的Git」 – 2011-01-07 01:55:45

+0

[如何在某人推動rebase或重置到發佈的分支之後恢復/重新同步?](http:// stackoverflow.com/questions/4084868/how-do-i-recover-resynchronise-after-someone-pushes-a-rebase-or-a-reset-to-a-publ) – 2011-01-07 07:07:10

回答

7

這主要是覆蓋"Recovering from upstream rebase",但它是一個有點模糊,我的口味。

你應該知道,git pull origin master正好等於git fetch master; git merge origin/master。換句話說,你已經要求git將B和C合併在一起。有一個原因是爲了重新發布已經發布的更改是不明智的:因爲重新提交舊的提交很容易。

由於這是一個簡單的南瓜,git pull --rebase就能算出這個。重置到錯誤合併之前的位置,並說git pull --rebase origin master(或git rebase origin/master,因爲您已經提取)。這將神奇地將A,B和任何後來的提交移植到C上,並且它會注意到A + B = C。

您可能希望將其設置爲默認值,因爲它可以避免像這樣設置配置branch.<name>.rebase爲true。