Update tar.gz
-u, --update
only append files newer than copy in archive
so this sequence will do what you need:
# First create the tar file. It has to be UNCOMPRESSED for -u to work
tar -cvf my.tar some-directory/
# ... update some files in some-directory
# ... add files in some-directory
# Now update only the changed and added files
tar -uvf my.tar some-directory/
# Compress if desired
gzip my.tar
You can not update compressed TAR archive (.tar.gz) in one step. But, if you have enough free space you can do this:
Extract .tar file from .tar.gz file:
gunzip filename.tar.gz
Update uncompressed .tar file with tar -u command:
tar -uf filename.tar new_file
Compress the updated .tar file:
gzip filename.tar
Speedup
If you have multi-core CPU, I recommend to use pigz instead of gzip for extract and create .gzfiles. (pigz is a multi-threaded implementation of gzip)
Simply replace gzip/gunzip commands to pigz/unpigz.