docs: private void merge(NodeTask target, NodeTask source) {
          List<StageType> stages = target.getStage();
          List<TaskEvent> events = target.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);
              mergeStates.add(stage);
              // 找到source节点对应的TaskEvent，使用最新值
              TaskEvent sourceEvent = getMatchStage(source, stage);
              if (sourceEvent == null) {
                  mergeEvents.add(event);
              } else {
                  mergeEvents.add(sourceEvent);
              }
          }
          // 添加两者的差集，添加source中特有的节点
          List<StageType> sourceStages = source.getStage();
          List<TaskEvent> sourceEvents = source.getEvent();
          for (int i = 0; i < sourceStages.size(); i++) {
              StageType stage = sourceStages.get(i);
              TaskEvent event = sourceEvents.get(i);
              if (mergeStates.contains(stage)) {
                  continue;
              }
  
              mergeStates.add(stage);
              mergeEvents.add(event);
          }
          // 更新一下数据
          target.setEvent(mergeEvents);
          target.setStage(mergeStates);
  
          target.setShutdown(source.isShutdown());// 更新下shutdown变量
      }