缺少Gerrit中的依赖

时间:2013-12-10 14:22:35

标签: git dependencies gerrit

我在Gerrit中有四个变化,每个变化取决于之前的变化(当然除了第一个)。我放弃了第二和第三,并审查了第一和第四。由于首先不依赖任何东西,Gerrit设法自动合并它。现在,第四个(取决于被遗弃的第三个)是一个真正的问题。

Gerrit将Submitted, Merge Pending声明为:

Change could not be merged because of a missing dependency.
The following changes must also be submitted:

给我两个被遗弃的变化的更改ID。我怎样才能摆脱这种混乱?

通过谷歌搜索和SO-ing(尤其是thisthis one已经学到的东西 - 并没有多大帮助),整个问题出现了,因为我没有使用过分支机构,仅直接在master上工作。

很好,我保证下次会更好,但如何解决当前的问题?我试图应用许多解决方案,在互联网或这里,在SO上找到,但它们都没有帮助。每个git pullgit push声明,我的本地和远程都是最新的,但我认为无法摆脱相关的变化。

3 个答案:

答案 0 :(得分:6)

您需要从提交4的祖先中删除与放弃的更改相对应的两个不需要的提交,即,git log所需的状态仅列出提交4和1.完成后,推送新的修补程序set应该删除声明的依赖项。摆脱提交2和3可以通过多种方式完成,包括

  • 进行交互式rebase(git rebase -i HEAD~4并删除您不想要的两个提交的行)或
  • 根据上游分支和樱桃采摘提示4开始新分支。

答案 1 :(得分:1)

好的,这是我修改后的答案

起点是连续4次提交的地方:

#git log --graph --decorate --oneline
* 448fd95 (HEAD, master) Change 4
* 3950f5f Change 3
* 8753adf Change 2
* cdcfe20 Change 1

接下来,从头部

创建一个临时分支
#git branch temp
#git log --graph --decorate --onelin
* 448fd95 (HEAD, temp, master) Change 4
* 3950f5f Change 3
* 8753adf Change 2
* cdcfe20 Change 1

现在您需要重置主人才能摆脱不需要的历史记录:

#git reset --hard cdcfe20
HEAD is now at cdcfe20 Change 1
#git log --graph --decorate --oneline
* cdcfe20 (HEAD, master) Change 1

Cherry将你的变化4选入主人

#git cherry-pick 448fd95
[master 19c5ba1] Change 4
 1 file changed, 1 insertion(+), 1 deletion(-)
#git log --graph --decorate --oneline
* 19c5ba1 (HEAD, master) Change 4
* cdcfe20 Change 1

现在你可以将最后一个更改推送到gerrit并且你的依赖关系是固定的

答案 2 :(得分:1)

我使用了answer from Magnus并执行了交互式rebase并删除了我之前的提交,但仍然存在一些合并冲突。然后我手动更新文件以解决冲突。

最后添加了修改后的文件,然后运行" git rebase --continue"解决问题。