2017-10-10 166 views
0

我有一個本地提交後,起源高手的頭,並希望結合最後兩個提交。因此,假設歷史如下:Git rebase - 我壓扁沒有刪除提交

* e9199ba - (HEAD -> master) 
|   test 
* c4e3b53 - (origin/master, origin/HEAD) 
|   Saturn ring angle change in X and Y 

,並希望進行一次提交,而不是e9199bac4e3b53。 我的git git rebase -i HEAD~2而被壓扁第二承諾:

pick c4e3b53 Saturn ring angle change in X and Y 
squash e9199ba test 

結果我有兩個獨立提交 - 新壓扁一個老主人的一個:

* 216b314 - (HEAD -> master) 
|   Suqashed commits 
| * c4e3b53 - (origin/master, origin/HEAD) 
|/   Saturn ring angle change in X and Y 

有什麼不對嗎?這是出於原始主人的頭?在這種情況下如何組合它們?或者也許有一些歷史顯示問題?

回答

2

正如你說:

...我有兩個獨立提交 - 新壓扁一個老主人的一個

這是你應該期待什麼,因爲git rebase作品通過複製提交(也許有一些修改,例如壓扁),然後讓你的Git將自己的分支名稱指向新副本。

origin/master不是你自己的,重新啓動的分支。這是你的遠程跟蹤分支,它記得一些其他 Git有其他 Git的master。因此,您的origin/master會繼續記住其他Git所擁有的內容,這是在您稍做修改之前的原始提交。

那個其他的Git倉庫本身 - 你叫origin的那個 - 還有其他的提交。由於origin有它,所以從origin複製的任何人也擁有它。您必須說服origin以及任何從origin複製的人切換到您的閃亮新提交。

如果你對origin有控制權,你可能會用閃亮的新提交來使用「強制推送」來覆蓋它現在在master中的任何內容。 (origin存儲庫仍然會有舊的提交,雖然可能非常簡要,直到它執行「垃圾回收」過程。)然後,您還必須說服origin的所有用戶也切換,就像您一樣,只是像你迫使origin去做。正是如何你可以並且將會這樣做取決於你。

請注意,如果其他人也被推向origin,它可能是你的力量推動要擦去承諾他們有加,依賴於c4e3b53。推動前你應該與其他人協調。 (如果沒有這樣的其他人,這使得協調更容易。)