The proper way would be to do like this:
1. Open the project that matches the program in the PLC (project "a").
2. Save this project with a new name (project "b").
3. Open the other project from which you want to copy the blocks (project "c").
4. Copy the blocks from "c" to "b".
5a. If you are well aware of where the blocks are used, then open the calling blocks in project "b" and save. If it is an FC or FB you may have to update blocks calls manually. If the blocks are FBs, then take note if the IDBs have changed (*).
6a. Download all the affected blocks to the PLC.
5b. If you are not 100% sure where the copied blocks are used, then you should run a block consistency check of project "b".
Then do an offline/online block compare of all blocks for project "b". Make a note of ALL blocks where a significant change has been made (not just the timestamp) (*).
6b. If you are sure that you a aware of all affected blocks, then download all blocks where a significant change has been made.
*: NOTICE that if FBs have a change to the declaration so that the IDBs are affected, then these IDBs will have to be downloaded and will thus lose their online status. This in turn may mean you cannot perform a download while the program is running.