boolean (final VirtualFile root, @NotNull GitCommandResult commandResult, @NotNull GitRebaseProblemDetector rebaseConflictDetector) { if (rebaseConflictDetector.isMergeConflict()) { LOG.info("handleRebaseFailure merge conflict"); return new GitConflictResolver(myProject, Collections.singleton(root), makeParams(myProject)) { @Override protected boolean proceedIfNothingToMerge() { notifyUnresolvedRemain(); return false; } @Override protected boolean proceedAfterAllMerged() { return continueRebase(root); } }.merge(); } else if (rebaseConflictDetector.isNoChangeError()) { LOG.info("handleRebaseFailure no changes error detected"); try { if (GitUtil.hasLocalChanges(true, myProject, root)) { LOG.error("The rebase detector incorrectly detected 'no changes' situation. Attempting to continue rebase."); return continueRebase(root); } else if (GitUtil.hasLocalChanges(false, myProject, root)) { LOG.warn("No changes from patch were not added to the index. Adding all changes from tracked files."); stageEverything(root); return continueRebase(root); } else { GitRebaseUtils.CommitInfo commit = GitRebaseUtils.getCurrentRebaseCommit(myProject, root); LOG.info("no changes confirmed. Skipping commit " + commit); mySkippedCommits.add(commit); return skipCommitAndContinue(root); } } catch (VcsException e) { LOG.info("Failed to work around 'no changes' error.", e); VcsNotifier.getInstance(myProject) .notifyError( REBASE_UPDATE_PROJECT_ERROR, GitBundle.message("rebase.update.project.notification.failed.title"), GitBundle.message("rebase.update.project.notification.failed.message", e.getMessage())); return false; } } else { List<VcsException> errors = ContainerUtil.map(collectErrorOutputLines(commandResult), it -> new VcsException(it)); LOG.info("handleRebaseFailure error"); VcsNotifier.getInstance(myProject) .notifyError( REBASE_UPDATE_PROJECT_ERROR, GitBundle.message("rebase.update.project.notification.failed.title"), "", errors); return false; } }