docs: private NodeTask retain(NodeTask targetTask, NodeTask sourceTask) {
          List<StageType> stages = targetTask.getStage();
          List<TaskEvent> events = targetTask.getEvent();
  
          List<StageType> mergeStates = new ArrayList<StageType>();
          List<TaskEvent> mergeEvents = new ArrayList<TaskEvent>();
          // 合并两者的交集的数据
          for (int i = 0; i < stages.size(); i++) {
              StageType stage = stages.get(i);
              TaskEvent event = events.get(i);
  
              // 找到source节点对应的TaskEvent
              TaskEvent sourceEvent = getMatchStage(sourceTask, stage);
              if (sourceEvent != null && sourceEvent != event) {// 存在相同的stage节点，判断event是否相同，不同则则添加
                  mergeStates.add(stage);
                  mergeEvents.add(event);
              }
          }
  
          // 添加targtTask中特有的stage/event
          for (int i = 0; i < stages.size(); i++) {
              StageType stage = stages.get(i);
              TaskEvent event = events.get(i);
              if (getMatchStage(sourceTask, stage) == null) {
                  mergeStates.add(stage);
                  mergeEvents.add(event);
              }
          }
  
          if (mergeStates.size() > 0) {
              NodeTask result = new NodeTask();
              result.setPipeline(targetTask.getPipeline());
              result.setEvent(mergeEvents);
              result.setStage(mergeStates);
              result.setShutdown(targetTask.isShutdown());
              return result;
          } else {
              return null;
          }
  
      }