2017-06-07 36 views
1

我們在我們的項目中使用Gerrit,並且始終在任何傳入的新更改的基礎上重新規劃本地更改,從而保持線性歷史記錄。如何避免將我的更改合併到Gerrit中的主分支後重復提交

我已經提交到我的本地主分支我的變化後,我推他們到遠程:

git push origin HEAD:refs/for/master 

這爲我犯下格里特審查。當我運行git status時,它說我的本地分支在一次提交之前位於origin/master之前,因爲我的新提交尚未合併到遠程主分支中。請記住,其他提交者可能還有其他提交者未提交合併到遠程主分支的提交。這意味着我不能在我們之前重新定義我的提交,因爲它們不在遠程mater分支中。

當我的提交已合併到遠程主分支,在任何其他提交之前或之後,並且在我運行git fetch origin之後,運行git status說我的本地主分支和遠程已經發生分離,因爲本地版本我的提交(它的sha-1)與遠程版本不同。基本上我的提交是在不同的sha-1下複製的。然後我必須運行git reset --hard HEAD~1來刪除我的提交的本地版本,然後git merge origin/master來快速轉發我的本地分支以包含來自遠程主分支的新更改。有什麼辦法可以避免這種情況?

回答

0

避免這種情況的一個好方法是使用rebase而不是merge。爲此,請在頁面/admin/projects/YOUR_PROJECT中更改您的項目設置,將「提交類型」條目的值設置爲「必要時重新分配」。

從Gerrit推送提交後,您可以使用git pull --rebasegit fetch origin ; git rebase origin/master來更新您的本地存儲庫。

若要進一步,您可以創建一個本地分支每次提交,然後將此分支推到refs/for/master和rebase以前相同的方式。它具有不依賴於不同提交的優點。

+0

如果我rebase,我的提交仍將被複制。 –

+0

這是因爲你把它合併到gerrit上。如果它太晚了(你已經合併它),你必須做你提到的問題。我的答案是爲了避免這種情況下的下一次提交。 – Flows

+0

將我的提交推送到遠程後,重新綁定的要點是什麼? –

相關問題