void (@NotNull ProgressIndicator indicator) { try { List<FilePath> dirtyPaths = new ArrayList<>(); List<File> toRefresh = new ArrayList<>(); //perform adding for (Map.Entry<VirtualFile, List<FilePath>> toAddEntry : GitUtil.sortFilePathsByGitRootIgnoringMissing(myProject, selectedToAdd).entrySet()) { List<FilePath> files = toAddEntry.getValue(); executeAdding(toAddEntry.getKey(), files); dirtyPaths.addAll(files); } //perform deletion for (Map.Entry<VirtualFile, List<FilePath>> toRemoveEntry : GitUtil.sortFilePathsByGitRootIgnoringMissing(myProject, selectedToRemove).entrySet()) { List<FilePath> paths = toRemoveEntry.getValue(); executeDeletion(toRemoveEntry.getKey(), paths); dirtyPaths.addAll(paths); } //perform force move if needed Map<FilePath, MovedFileInfo> filesToForceMove = map2Map(toForceMove, info -> Pair.create(info.getNewPath(), info)); dirtyPaths.addAll(map(toForceMove, fileInfo -> fileInfo.getOldPath())); for (Map.Entry<VirtualFile, List<FilePath>> toForceMoveEntry : GitUtil.sortFilePathsByGitRootIgnoringMissing(myProject, filesToForceMove.keySet()).entrySet()) { List<FilePath> paths = toForceMoveEntry.getValue(); toRefresh.addAll(executeForceMove(toForceMoveEntry.getKey(), paths, filesToForceMove)); dirtyPaths.addAll(paths); } VcsFileUtil.markFilesDirty(myProject, dirtyPaths); RefreshVFsSynchronously.refreshFiles(toRefresh); } catch (VcsException ex) { GitVcsConsoleWriter.getInstance(myProject).showMessage(ex.getMessage()); } }