【问题标题】:Git merge pending due to an abandoned commit由于放弃提交,Git 合并挂起
【发布时间】:2015-08-11 17:02:44
【问题描述】:

我有两个提交。提交 B 依赖于提交 A。提交 A 被放弃。现在我在合并 B 时遇到错误。它说已提交,由于 B 对 A 的依赖而合并挂起。

我已经用谷歌搜索了,但找不到确切的答案。我需要一步一步的解决方案,因为我是 git 的新手,并且很难理解如何解决这个问题。

事情就是这样。

  1. git 在本地提交 A.

  2. git push for A in remote.

  3. A 被遗弃,但我本地的 git 已提交 A。

  4. git commit in local for B 在同一分支中(使 B 依赖于 A)。

  5. git push B in remote in the same branch.

  6. 现在 B 没有合并,因为 A 被放弃了。

我需要合并 B 并且我希望移除对 A 的依赖。希望现在清楚了!

这是服务器错误:

更改 1184 - 已提交,待合并

在 cmets 中:

Gerrit 代码审查

由于缺少依赖项,无法合并更改。这 还必须提交以下更改: (commit-id, 已废弃)

rebase 会起作用吗?如果有,该怎么做?

【问题讨论】:

  • 您的问题还不清楚。你运行的确切命令是什么?输出是什么?你想达到什么目的?我认为这不能用给出的信息来回答。
  • 所以“B 未合并”是指服务器拒绝提交,因为它不是服务器上当前头部的直接后代?
  • 你能把错误信息贴出来吗?
  • @SvenMarnach 否 两个提交都被推送到服务器上。但是 A 被放弃了,因此没有合并,B 没有合并,因为它依赖于 A。
  • 我对 Gerrit 不熟悉,也不知道那里发生了什么。如果您将分支推送到 git 服务器,所有可以通过 head 提交到达的提交都将自动包含在内,所以我不确定在这种情况下怎么可能结束。我的猜测是,您必须调用git fetch 才能在服务器上获取当前版本的分支,重新设置基准或在远程头上挑选您的提交 B,然后再次推送。因为我真的不知道发生了什么,所以这更像是一个有根据的猜测而不是一个答案。

标签: git gerrit


【解决方案1】:

有几种方法可以解决您的问题。选择你觉得最舒服的那个。

这是一个:

  1. git checkout yourbranch(确保你在正确的分支上)
  2. git reset --hard A^(将所有内容重置为 A 之前的提交)
  3. git cherry-pick B(其中 B 是您要保留的提交的哈希)
  4. git log(确认是你想要的)
  5. git push --force(可能需要根据你平时推送的方式指定其他选项)

这是另一个,结果是等价的:

  1. git checkout yourbranch(确保你在正确的分支上)
  2. git rebase --onto A^ A(在 A 之前的提交之上重新调整 A 之后的所有内容,有效地删除 A)
  3. git log(确认是你想要的)
  4. git push --force(可能需要根据你平时推送的方式指定其他选项)

这是第三个,结果还是一样的:

  1. git checkout yourbranch(确保你在正确的分支上)
  2. git rebase --interactive A^(会打开你的编辑器)
  3. 删除显示提交 A 的行,保存并关闭
  4. git log(确认是你想要的)
  5. git push --force(可能需要根据你平时推送的方式指定其他选项)

【讨论】:

  • 是的,如果你的历史是X <- A <- B,那么git rebase --onto X B~1git rebase --onto A^ A 的同义词(上面建议的第二种解决方案),因为XA 之前的提交(A^表示A 的第一个父级),AB 之前的提交(B~1 相当于B^B 的第一个父级)。很高兴它对你有用。
【解决方案2】:

Here 和你的问题一样。

如果提交 B 依赖于 A,则 B 不能被合并,直到 A 被 合并。既然你放弃了 A,Gerrit 不会自动 合并 B.

你需要做的是修改 B(可能使用git rebase)所以 不再依赖于 A,然后将更改重新提交给 Gerrit。

我如何变基/合并它?

git-review -d 1184 
git rebase origin/master
git status
<edit "both modified" files in status report>
git add <files>
git rebase --continue
git review

查找有关此类问题的更多有用信息here

【讨论】:

  • 我得到 --- 在分支审查/vinay_choudhary/1184 上没有提交,工作目录干净 --- 在 git 状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2011-06-23
  • 2013-06-20
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多