/Engine/Source/Runtime/GameplayTags/Classes/GameplayTagContainer.h
Adds all the tags that match between the two specified containers to this container. WARNING: This matches any parent tag in A, not just exact matches! So while this should be the union of the container this is called on with the intersection of OtherA and OtherB, it's not exactly that. Since OtherB matches against its parents, any tag in OtherA which has a parent match with a parent of OtherB will count. For example, if OtherA has Color.Green and OtherB has Color.Red, that will count as a match due to the Color parent match! If you want an exact match, you need to call A.FilterExact(B) (above) to get the intersection of A with B. If you need the disjunctive union (the union of two sets minus their intersection), use AppendTags to create Union, FilterExact to create Intersection, and then call Union.RemoveTags(Intersection).
void AppendMatchingTags ( [FGameplayTagContainer](API\Runtime\GameplayTags\FGameplayTagContainer) const & OtherA, [FGameplayTagContainer](API\Runtime\GameplayTags\FGameplayTagContainer) const & OtherB )