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