2014-04-10 25 views
1

我有一個分支主線跟蹤遠程分支來源/主線陷入底墊 - >合併循環使用Git

我的地方分支出去的同步與遠程分支,所以我做了一個混帳拉,現在當我做git的狀態,我得到:

Your branch is ahead of 'origin/mainline' by 2 commits. 

現在我想squansh這些成一個單一的承諾,所以我跑

git rebase -i HEAD~2 

它開闢了在那裏我可以壁球提交,並選擇一個要使用的文件。我期待它只顯示2個提交(我原來的頂級提交+合併後),但它有3個提交沒有合併提交。如果我繼續前進,並將它們拼湊成一個單獨的一個,Git會抱怨我有一個衝突,(與拉後的衝突相同)。

如果我解決衝突並運行git rebase - 繼續它最終在我有2個提交的狀態!請幫我解決這個,即時通訊在這裏呆了將近一天!

回答

2

通常情況下,Rebase通常不會保留合併,您必須通過-p--preserve-merges標誌才能完成此操作。

但是,您與遠程進行同步的過程不正確,可能會導致您重寫已提交併與其他人共享的提交,這可能會導致許多同步和衝突問題。

如果你想要做一個南瓜,然後,而不是做一個拉和合並,你應該有牽強,而是重建基礎:

git fetch origin 
git rebase origin/mainline mainline 
git rebase -i mainline~2 

你可以,如果你想在最後兩個命令組合,但這樣做他們分別具有的優點是,你可以通過之後做git diff [email protected]{1}來證實你沒有搗亂任何東西。

因此,要擺脫目前的狀況,您可以執行硬重置回mainline^,或者在您嘗試執行合併/拉取之前執行的任何提交,然後運行上面的rebase命令。

+0

是的,工作。我必須硬重置我所做的合併,然後運行rebase origin/mainline哪些工作!感謝您的迴應。你還提到,做一個git獲取更新本地回購,而不是一個git拉。我做了一個快速搜索,差異b/w 2似乎是pull在提取後嘗試合併。但是,在推送我的代碼之前,這就是我想要做的事情?即將最新更改導入我的本地分支 – broun

+0

@ maver1k有兩種不同的方式來更新您的本地分支,您可以將更改合併到該分支中,也可以在新更改之前對其進行重新設置。但是如果你打算通過壓縮提交來改變歷史,你通常應該改變而不是合併,因爲否則就像我說的,如果你不明白你在做什麼,你最終會重寫已經存在的歷史與其他人分享,這可能不是你想要做的。 –