Core Data with CloudKit doesn't seem to document how changes get merged. (I filed a bug, but maybe we can collectively scratch out some details here?)
As far as I can tell, Core Data with CloudKit uses a "last writer wins" approach at the attribute level, and a "last writer wins + merge" approach at the relationship level.
Here's an experiment:
1. Create a Core Data with CloudKit app
2. Create an entity with two text attributes: text1, text2
3. Create an instance of that entity, set some values in text1 and text2, and sync it across two devices
4. Disconnect the two devices from the network
5. On device 1, set text1 to "aaa" and leave text2 as is. Save the changes.
6. On device 2, set text2 to "bbb" and leave text1 as is. Save the changes.
7. Reconnect both devices to the network and allow them to sync.
8. I believe the final result will be that the entity has "bbb" in text2 and the original value in text1, because device 2 saved its changes after device 1.
The thing to note is that the two changes weren't merged even though they changed different attributes. (As far as I can tell the Core Data merge policy is irrelevant when it comes to CloudKit merges.)
I'm not making any comment on whether this behaviour is good or bad, right or wrong; I'm just saying that it should be documented.
(I think the picture for relationships is a little more complex. I think to-one relationships are "last writer wins" while to-many relationships are "merge"—but there are some important experiments I haven't conducted yet.)