2017-06-07 16 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

将我的提交推送到远程后,重新绑定的要点是什么? –

相关问题