如何解决 Gerrit 上的 "ANCESTOR OUTDATED" 问题?

How to resolve "ANCESTOR OUTDATED" issue on Gerrit?

我在Gerrit上的补丁需要合并,但是出现“ANCESTOR OUTDATED”的错误。这是因为我的补丁所依赖的提交已经outdated/abandoned,并被一个新的合并提交所取代。

我认为我可以简单地执行 git rebase -i HEAD~2 并编辑依赖项。通过编辑依赖项,我的意思是一旦我重新基于依赖项提交(HEAD 后面的 1 次提交),我就可以在那里挑选新的更改。

但是,我收到一条很长的错误消息:

interactive rebase in progress; onto SHA#
Last command done (1 command done):
   edit *** DEPENDENCY
Next command to do (1 remaining command):
   pick *** MY PATCH
You are currently rebasing branch 'temp' on 'SHA#'.

nothing to commit, working directory clean
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git reset'

我怎样才能简单地更新我 HEAD 后面的提交,然后解决 Gerrit 上的这个 ANCESTOR OUTDATED 问题?

编辑:我无法使用 Gerrit 的“Rebase Change”按钮快速进行此变基的原因是因为它说存在合并冲突并且它不能自动到期。

我会推荐你​​:

  • 结帐给你想要的祖传,
  • cherry-pick 你的零钱,
  • 测试你change/solve任何合并冲突(如果有的话)
  • 提交修改*
  • 最后,推送

*我在考虑你提交了一个 gerrit 的 Change-Id;如果没有,您应该定期提交以创建它(由 commit-msg 挂钩负责)。

此外,当我说推送时,我指的是 gerrit 的方法(这是 git push origin HEAD:refs/for/master 而不仅仅是 git push)。

我的解决方案(必须在你项目的工作目录下完成):

  1. git 获取 ssh://repo_of_project official_branch
  2. git checkout -b my_branch FETCH_HEAD
  3. cherry-pick 来自 Gerrit 的最新补丁:git fetch ssh://repo_of_project refs/changes/xx/SHA_ID/xx && git cherry-pick FETCH_HEAD
  4. 解决任何合并冲突
  5. git 添加
  6. git commit --amend
  7. git 推 ...

--> 这几乎可以修复你的分支过时的提交历史,并将你的补丁正确地放在提示处。