我在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(尤其是this和this one已经学到的东西 - 并没有多大帮助),整个问题出现了,因为我没有使用过分支机构,仅直接在master
上工作。
很好,我保证下次会更好,但如何解决当前的问题?我试图应用许多解决方案,在互联网或这里,在SO上找到,但它们都没有帮助。每个git pull
和git push
声明,我的本地和远程都是最新的,但我认为无法摆脱相关的变化。
答案 0 :(得分:6)
您需要从提交4的祖先中删除与放弃的更改相对应的两个不需要的提交,即,git log
所需的状态仅列出提交4和1.完成后,推送新的修补程序set应该删除声明的依赖项。摆脱提交2和3可以通过多种方式完成,包括
git rebase -i HEAD~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
"解决问题。