You asked several questions, I'll try to answer them one at a time.
What is the difference between start an approval and wait vs Start an approval?
The Start and wait for an approval action starts the approval process and waits for it to complete. This means your flow will not execute any additional actions until the approval process has completed.
The Create an approval action starts the approval process but it does not wait for it to complete. This means your flow can execute additional actions while users are in the process of the review, however you will not be able to get their responses without using the Wait for an approval action. Using this action will block your flow until the approval process has completed.
Within each of the above I have wait for all the responses Wait for all to approve wait for one approval...
The first two options (the one's that start with Approve/Reject), as you would expect, give the reviewer two options: Approve and Reject. Everyone must approve means that the approval process will not complete until all reviewers have approved, or one reviewer has rejected. First to respond means that that the approval process will complete after the first response, regardless of whether it is Approve or Reject.
The second two options (the one's that start with Custom Responses), enable you to configure which options will be presented to the reviewer. Wait for all responses means that the approval process will not complete until all reviewers have selected one of the custom responses. Wait for one response means the approval process will complete after the first response, regardless of what custom response was selected. The last time I checked, the use of these options required a premium license.
What I need is to the flow to send all the responses (approved or rejected) to the person that change the file BUT I need those replies to go out immediately and not to wait for everybody to respond. Which approval type does that ?
Unfortunately, none of the actions natively support what you want. If you have multiple approvers, you won't get their responses until all of them have submitted their responses or, in the case of Approve/Reject, the first user rejects.
You can implement a flow that does what you want but it's tricky. You could start an approval for each individual user on a parallel branch, that way you'll get their response as soon as they submit it. You can then determine the overall result of the approval after each of the branches have finished.
Update
I learned something new since I posted my answer, you can do what you want with an Apply to each loop. Please see Flow of the Week: Send parallel approval requests to a dynamic set of approvers. The trick is to set the Concurrency Control.
I hope this helps.