The Arduino IDE (or the upload tool used by the Arduino IDE) sends a signal for the microcontroller to reset.
The microcontroller resets.
The bootloader runs and waits (normally only for a short time) for an upload to start.
The upload tool sends the program to the microcontroller, where the bootloader writes it to flash memory.
On the boards with native USB (like the one you're using), the way the IDE signals the microcontroller to reset is by opening a serial connection at 1200 baud. There is some special code running on the microcontroller in the background of your sketch that does the reset when it detects that 1200 baud connection.
In some cases, your sketch code might cause that reset code to be missing or not working correctly, which will mean the bootloader never runs and the upload fails with the error you're seeing.
The fix is to manually reset the board.
Try this:
Press and release the reset button on your board quickly twice.
You should now see the LED on the board pulsing, which means the bootloader is running.
The double reset causes the bootloader to run until the board is reset normally, powered off, or an upload is done.
Select the port of your board from the Tools > Port menu.
The port may be different when the bootloader is running so don't assume you already have the correct port selected.
Start an upload in the Arduino IDE.
The upload should now finish successfully.
After this, you should be able to go back to doing normal uploads without needing to use the reset button technique. If you still need to do the reset trick to do uploads after this, the problem may be caused by your code. You can verify this by uploading a simple sketch like File > Examples > 01.Basics > BareMinimum.