The manual says:
-I, --ignore-times don't skip files that match size and time
With more details:
Normally rsync will skip any files that are already the same size and
have the same modification timestamp. This option turns off this
"quick check" behavior, causing all files to be updated.
That could be also useful (thanks Attila to pointing this out):
--checksum, -c skip based on checksum, not mod-time & size
This changes the way rsync checks if the files have been changed and are in need of a transfer. Without this option, rsync uses a "quick check" that (by default) checks if each file's size and time of last modification match between the sender and receiver. This option changes this to compare a 128-bit checksum for each file that has a matching size. Generating the checksums means that both sides will expend a lot of disk I/O reading all the data in the files in the transfer, so this can slow things down significantly (and this is prior to any reading that will be done to transfer changed files)
The sending side generates its checksums while it is doing the filesystem scan that builds the list of the available files. The receiver generates its checksums when it is scanning for changed files, and will checksum any file that has the same size as the corresponding sender's file: files with either a changed size or a changed checksum are selected for transfer.
Note that rsync always verifies that each transferred file was correctly reconstructed on the receiving side by checking a whole-file checksum that is generated as the file is transferred, but that automatic after-the-transfer verification has nothing to do with this option's before-the-transfer "Does this file need to be updated?" check.
The checksum used is auto-negotiated between the client and the server, but can be overridden using either the --checksum-choice (--cc) option or an environment variable that is discussed in that option's section.
Worth to mention the
--delete flag if you wanted to remove the destination files which are doesn't exists in the source directory.
Another useful option is the
-n which just mimics what would rsync do without any actual copying or deleting. Only listing. Very useful when you not 100% sure what you do.