The commit
command accepts multiple -m
flags:
$ git commit -m "Commit title" -m "A new paragraph."
Each use adds a new paragraph to the commit message. A similar effect can be achieved using quotes:
$ git commit -m "Commit title > > A new paragraph."
If you belatedly decide that you should have used an editor after all you can pass the -e
flag to open your editor with the partially-complete message intact:
$ git commit -m "Commit title" -m "Now I want an editor..." -e
Adding this snippet to your .gitconfig
file creates a git alias
command which lists all
registered aliases:
[alias] alias = !git config --list | grep alias | sed s/^alias.//
Write a commit message, hit return, instantly notice the typo...
The fix is to run:
$ git commit --amend
This opens the last commit message in your editor, allowing you to rewrite it. I do this often
enough that I've added the following alias to my .gitconfig
file:
[alias] amend = commit --amend
This way I can run git amend
instead.
Discard all changes in the working directory — i.e. restore its state to that at the last commit — by running:
$ git checkout -f
To squash the last N
commits together:
git reset --soft HEAD~N git commit
To squash all the commits after <commit>
:
git reset --soft <commit> git commit
Here <commit>
can be a branch or tag name or a commit hash.
To merge commits from branch main
into branch feature
:
git checkout feature git merge main
This will create a merge commit.
To merge commits from branch feature
into branch main
, squashing all the commits into a single commit:
git checkout main git merge --squash feature git commit
The commit message will be pre-populated with a default message describing the squashed commits.
To rebase branch feature
on top of branch main
:
git checkout feature git rebase main
To list all local and (known) remote branches:
git branch --all
To update the local list of remote branches, pruning branches that no longer exist:
git remote update origin --prune
To automatically prune the local list of remote branches every time git fetch
or git pull
runs:
git config remote.origin.prune true
To push a new local branch to a remote repository:
# Create a new local branch, 'feature'. git checkout -b feature # Push the new local branch to 'origin'. git push -u origin feature
The -u/--set-upstream
flag tells the local branch to track the new remote branch.
Undo the last commit, leaving the files in the working directory unchanged:
git reset --soft HEAD~1
Undo the last commit, resetting the state of the working directory:
git reset --hard HEAD~1
Show the changes made in the most recent commit:
git show
Show the changes made in a particular commit:
git show <commit>
Reset the files in the working directory to their state at an earlier commit foo
without changing HEAD from pointing at the current commit bar
:
git reset --hard foo git reset --soft bar