Gerrit - 当前分支和远程分支有分歧

Gerrit - Current branch and remote branch have diverged

首先,我将我的提交推送到 GERRIT 进行审查

其次,我的队友验证了我的提交并提交到 repo

第三,我用命令git fetch同步,我在查看status

时发现当前b运行ch和远程b运行ch不一致

我想知道它是怎么发生的以及如何避免它,有人可以帮助我吗

所有命令我都有运行

git add app/Http/Controllers/StatisController.php

git commit

git push origin HEAD:refs/for/<remote_branch>

提交提交后

git fetch

git status

我收到如下消息:

在 b运行ch 客户端上 你的 b运行ch 和 'origin/remote_branch' 有分歧,分别有 1 和 1 个不同的提交。

(使用 "git pull" 将远程 b运行ch 合并到你的)

根本原因

根据我们掌握的信息,我们不可能知道,但您的提交可能是由 Gerrit 自动合并或自动重新设置的。更改 automerged/autorebased 取决于每个项目中配置的 submit strategy。要了解项目使用的提交策略,请执行以下操作:

  1. 单击 项目 > 列表
  2. 查找项目
  3. 点击项目名称
  4. 单击选项卡 常规
  5. 查看提交类型字段

如何避免此问题

在您的提交合并到远程分支(在 Gerrit 上提交)后忘记您的本地分支(删除它们),并始终启动一个新分支来处理新更改。

进行更改 1

git fetch
git checkout -b LOCAL-1 /origin/REMOTE
# Work on the change
git add .
git commit
git push origin HEAD:refs/for/REMOTE

如果您想进行更改 2:

git fetch
git checkout -b LOCAL-2 /origin/REMOTE
# Work on the change
git add .
git commit
git push origin HEAD:refs/for/REMOTE

如果您需要返工更改 1:

git checkout LOCAL-1
# Rework the change
git add .
git commit --amend
git push origin HEAD:refs/for/REMOTE

在 Gerrit 上合并(提交)更改 1 时:

git branch -D LOCAL-1

在简历中:您的本地分支不应跟随远程分支。

同步当前 b运行ch 的命令是 git pullgit pull 等同于 git fetch + git merge。你已经运行git fetch,所以你可以手动调用git merge(假设当前b运行ch是master):

git merge origin/master

或者强行移动b运行ch:

git reset --hard origin/master

或者你可以 运行 pull:

git pull origin master

如果您的分支出现分歧,您有两种选择。

  1. 将远程分支合并到本地分支。这是 git pull 的默认行为,但这将导致创建合并提交并使分支的历史混乱。

  2. 将您的本地分支重新定位到远程分支 (git rebase origin/the-branch)。这是我的首选选项,因为它创建了一个清晰易读的提交历史记录。