fetches the changes from the main repository and replays your local commits
over it. This is required to keep all your local changes at the top of
FFmpeg’s master tree. The master tree will reject pushes with merge commits.

to double check your changes before committing them to avoid trouble later
on. All experienced developers do this on each and every commit, no matter
how small.

Every one of them has been saved from looking like a fool by this many times.
It’s very easy for stray debug output or cosmetic modifications to slip in,
please avoid problems through this extra level of scrutiny.

Use --global to set the global configuration for all your Git checkouts.

Git will select the changes to the files for commit. Optionally you can use
the interactive or the patch mode to select hunk by hunk what should be
added to the commit.

git commit

Git will commit the selected changes to your current local branch.

You will be prompted for a log message in an editor, which is either
set in your personal configuration file through

git config --global core.editor

or set by one of the following environment variables:
GIT_EDITOR, VISUAL or EDITOR.

Log messages should be concise but descriptive. Explain why you made a change,
what you did will be obvious from the changes themselves most of the time.
Saying just "bug fix" or "10l" is bad. Remember that people of varying skill
levels look at and educate themselves while reading through your code. Don’t
include filenames in log messages, Git provides that information.

Possibly make the commit message have a terse, descriptive first line, an
empty line and then a full description. The first line will be used to name
the patch by git format-patch.

will send the patches created by git format-patch or directly
generates them. All the email fields can be configured in the global/local
configuration or overridden by command line.
Note that this tool must often be installed separately (e.g. git-email
package on Debian-based distros).

Will simulate a push of the local master branch to the default remote
(origin). And list which branches and ranges or commits would have been
pushed.
Git will prevent you from pushing changes if the local and remote trees are
out of sync. Refer to Updating the source tree to the latest revision.

git remote add <name> <url>

Will add additional remote with a name reference, it is useful if you want
to push your local branch for review on a remote host.

git push <remote> <refspec>

Will push the changes to the <remote> repository.
Omitting <refspec> makes git push update all the remote
branches matching the local ones.

Once you have a set of commits that you feel are ready for pushing,
work through the following checklist to doublecheck everything is in
proper order. This list tries to be exhaustive. In case you are just
pushing a typo in a comment, some of the steps may be unnecessary.
Apply your common sense, but if in doubt, err on the side of caution.

First, make sure that the commits and branches you are going to push
match what you want pushed and that nothing is missing, extraneous or
wrong. You can see what will be pushed by running the git push command
with --dry-run first. And then inspecting the commits listed with
git log -p 1234567..987654. The git status command
may help in finding local changes that have been forgotten to be added.

Next let the code pass through a full run of our test suite.

make distclean

/path/to/ffmpeg/configure

make fate

if fate fails due to missing samples run make fate-rsync and retry

Make sure all your changes have been checked before pushing them, the
test suite only checks against regressions and that only to some extend. It does
obviously not check newly added features/code to be working unless you have
added a test for that (which is recommended).

Also note that every single commit should pass the test suite, not just
the result of a series of patches.

Once everything passed, push the changes to your public ffmpeg clone and post a
merge request to ffmpeg-devel. You can also push them directly but this is not
recommended.