Git合并因废弃提交而挂起。

4
我有两个提交记录。提交 B 依赖于提交 A,而提交 A 已经被放弃。现在我合并 B 时出现错误。它说提交已经提交,由于 B 对 A 的依赖关系而等待合并。
我在互联网上搜索了一下,但找不到确切的答案。我需要一步一步的解决方案,因为我是 Git 新手,很难理解如何解决这个问题。
以下是过程:
1. 在本地为 A 提交 Git。
2. 在远程推送 A。
3. A 被放弃了,但我的本地 Git 仍然有提交 A。
4. 在同一个分支中为 B 提交 Git(使 B 依赖于 A)。
5. 将 B 推送到远程相同的分支中。
6. 现在 B 没有合并,因为 A 被放弃了。
我需要将 B 合并,同时希望移除对 A 的依赖关系。现在清楚了吗!
以下是服务器错误:
Change 1184 - Submitted, Merge Pending
在注释中:
Gerrit Code Review Change could not be merged because of a missing dependency. The following changes must also be submitted: (commit-id, which was abandoned)
重新贴基会有效吗?如果可以,如何操作?

你的问题不太清楚。你运行的确切命令是什么?输出是什么?你想要实现什么?我认为无法通过给定的信息来回答这个问题。 - Sven Marnach
那么,“B没有合并”是指服务器拒绝提交,因为它不是当前服务器上的直接后代。 - Sven Marnach
你能发一下错误信息吗? - mbenegas
@SvenMarnach 两个提交都已经推送到服务器。但是A被放弃了,因此没有合并,而B也没有合并,因为它依赖于A。 - VinayChoudhary99
我不熟悉Gerrit,也不知道那里发生了什么。如果你将一个分支推送到git服务器,所有由head commit可达的提交都将自动包含在内,所以我不确定如何才能出现这种情况。我的猜测是,你需要调用git fetch来获取服务器上你的分支的当前版本,然后在远程head的基础上重新设置或挑选你的提交B,然后再次推送。由于我真的不知道发生了什么,这更像是一种有根据的猜测而不是答案。 - Sven Marnach
2个回答

11

有几种方法可以解决您的问题,选择您感到最舒适的一种。

这是其中一种方法:

  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 (可能需要根据您通常如何推送来指定其他选项)

1
是的,如果你的历史记录是 X <- A <- B,那么 git rebase --onto X B~1 等同于 git rebase --onto A^ A(如上所建议的第二个解决方案),因为 XA 的前一个提交(A^ 表示 A 的第一个父提交),而 AB 的前一个提交(B~1 等同于 B^,即 B 的第一个父提交)。很高兴它适用于你。 - jsageryd

1

这里有一个类似于您的问题。

如果提交B依赖于A,则必须在合并A之后才能合并B。由于您已经放弃了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

在此处查找有关此类问题的更多有用信息。


我在git状态中看到以下内容: 分支review/vinay_choudhary/1184 没有要提交的内容,工作目录干净。 - VinayChoudhary99

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接