我们在项目中使用Gerrit,并且我们始终通过在任何传入的新更改之上重新定位本地更改来努力保持线性历史记录。
在我将更改提交到我的本地主分支后,我将它们推入远程:
git push origin HEAD:refs/for/master
这为我的提交创建了Gerrit审核。当我运行git status
时,它表示我的本地分支在一次提交之前超过origin / master,因为我的新提交尚未合并到远程主分支中。请记住,其他开发人员可能还有其他提交尚未合并到远程主分支中。这意味着我不能在我们之上修改我的提交,因为它们还不在远程主分支中。
当我的提交已经合并到远程主分支中时,在任何其他提交之前或之后,以及在我运行git fetch origin
之后,运行git status
表示我的本地主分支和远程有分歧,因为我的提交的本地版本(其sha-1)与远程版本不同。基本上我的提交是在不同的sha-1下重复的。然后我必须运行git reset --hard HEAD~1
来删除我的提交的本地版本,然后git merge origin/master
来快进我的本地分支以包含来自远程主分支的新更改。有什么方法可以避免这种情况吗?
答案 0 :(得分:0)
避免这种情况的好方法是使用rebase
代替merge
。要执行此操作,请在页面/admin/projects/YOUR_PROJECT
中更改项目设置,设置值"必要时重新生成" for"提交类型"条目。
从Gerrit推送提交后,您可以使用git pull --rebase
或git fetch origin ; git rebase origin/master
更新本地存储库。
更进一步,您可以在每次提交时创建一个本地分支,然后将此分支推送到refs/for/master
并以与之前相同的方式进行rebase。它的优点是不会创建对不同提交的依赖。