问题:
(1)场景一
本地提交commit-A,发现存在问题后,在gerrit上abandon这一单代码;
本地继续修改代码,提交commit-B;
commit-B在gerrt上提交时报错,提示无法merge:can not merge because depend on the changes that are not submit
(2)场景二:多人开发的大项目容易出现以下情况:
先提交commit-A,在submit时这一单发生rebase操作,最终合入时commit -id变了。
本地继续提交第二单代码commit-B,本地commit-B的父节点是commit-A(但本地的local-commit-id与远端的commit-id已经不一致)
commit-B在进行submit时,gerrit认为local-commit-id对应的那一单代码没有合入,提示can not merge due to depend on the changes that are not submit.
应对方法一:
每次提交代码之前,都使用命令git pull --rebase,使本地对远端对齐。
应对方法二:
- 在gerrit上执行abandon命令后,在本地输入命令行
git reset --soft HEAD~1
- 若abandon了多次,则执行多次上述命令(该命令每输入一次 回退一次)
- 再次提交更新commit-Id
原理:
以上命令行是往前退回一次 ,abandon几次则输入几次;
相当于将abandon对应那次提交在本地提交历史中’删除’。 否则, 当你commit B后push并submit时, 会出现如下提示:
submit including parents: this change are depends on other change wich are not ready.
或:
can not merge due to depend on the changes that are not submit
这是因为本地依然存在commit A, 从而导致commit B依赖于commit A, 但是commitA在gerrit上是被abandon掉的, 是不可见 的。所以导致无法submit。