private void createActions() {

		Icon icon = new GIcon("icon.plugin.myprogramchanges.merge");
		mergeAction = new DockingAction("Update", getName()) {
			@Override
			public void actionPerformed(ActionContext context) {
				AppInfo.getFrontEndTool().merge(tool, currentProgram.getDomainFile(), null);
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				return currentProgram != null && currentProgram.getDomainFile().canMerge();
			}
		};

		mergeAction.setToolBarData(new ToolBarData(icon, "Repository"));
		mergeAction.setDescription("Update checked out file with latest version");
		mergeAction.setHelpLocation(new HelpLocation("VersionControl", mergeAction.getName()));

		icon = new GIcon("icon.plugin.myprogramchanges.checkin");
		checkInAction = new DockingAction("CheckIn", getName()) {
			@Override
			public void actionPerformed(ActionContext context) {
				AppInfo.getFrontEndTool().checkIn(tool, currentProgram.getDomainFile());
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				return currentProgram != null &&
					currentProgram.getDomainFile().modifiedSinceCheckout();
			}
		};

		checkInAction.setToolBarData(new ToolBarData(icon, "Repository"));
		checkInAction.setDescription("Check in file");
		checkInAction.setHelpLocation(new HelpLocation("VersionControl", checkInAction.getName()));

		tool.addAction(mergeAction);
		tool.addAction(checkInAction);
	}
Manages the markers to display areas where changes have occurred
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/misc/MyProgramChangesDisplayPlugin.java