- Remotes
-
Staging and reverting changes
- Remove last commit and leave the changes in unstaged
- Unstage a certain number of commits from HEAD
- Unstage changes to a certain file from HEAD
- Revert a file to HEAD state and remove changes
- Undo a previous commit by creating a new replacement commit
- Create a new message for last commit
- Create a new message for older commits
- Add a file to the last commit
- Stashing
- Refs and Log
- Debugging
- Rebasing
Frequently used Git commands
The GitLab support team has collected these commands to help you. You may not need them frequently.
Remotes
Add another URL to a remote, so both remotes get updated on each push
git remote set-url --add <remote_name> <remote_url>
Staging and reverting changes
Remove last commit and leave the changes in unstaged
git reset --soft HEAD^
Unstage a certain number of commits from HEAD
To unstage 3 commits, for example, run:
git reset HEAD^3
Unstage changes to a certain file from HEAD
git reset <filename>
Revert a file to HEAD state and remove changes
To revert changes to a file, you can use either:
git checkout <filename>
git reset --hard <filename>
Undo a previous commit by creating a new replacement commit
git revert <commit-sha>
Create a new message for last commit
git commit --amend
Create a new message for older commits
git rebase -i HEAD~n
Replace n
with the number of commits you want to go back.
This opens your text editor with a list of commits.
In the editor, replace pick
with reword
for each commit you want to change the message:
reword 1fc6c95 original commit message
pick 6b2481b another commit message
pick 5c1291b another commit message
After saving and closing the file, you can update each message in a new editor window.
After updating your commits, you must push them to the repository.
As this rewrites history, a force push is required.
To prevent unintentional overwrites, use --force-with-lease
:
git push --force-with-lease
Add a file to the last commit
git add <filename>
git commit --amend
Append --no-edit
to the commit
command if you do not want to edit the commit
message.
Stashing
Stash changes
git stash save
The default behavior of stash
is to save, so you can also use just:
git stash
Unstash your changes
git stash apply
Discard your stashed changes
git stash drop
Apply and drop your stashed changes
git stash pop
Refs and Log
Use reflog to show the log of reference changes to HEAD
git reflog
Check the Git history of a file
The basic command to check the Git history of a file:
git log <file>
If you get this error message:
fatal: ambiguous argument <file_name>: unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
Use this to check the Git history of the file:
git log -- <file>
Check the content of each change to a file
gitk <file>
Check the content of each change to a file, follows it past file renames
gitk --follow <file>
Debugging
Use a custom SSH key for a Git command
GIT_SSH_COMMAND="ssh -i ~/.ssh/gitlabadmin" git <command>
Debug cloning
With SSH:
GIT_SSH_COMMAND="ssh -vvv" git clone <git@url>
With HTTPS:
GIT_TRACE_PACKET=1 GIT_TRACE=2 GIT_CURL_VERBOSE=1 git clone <url>
Debugging with Git embedded traces
Git includes a complete set of traces for debugging Git commands, for example:
-
GIT_TRACE_PERFORMANCE=1
: enables tracing of performance data, showing how long each particulargit
invocation takes. -
GIT_TRACE_SETUP=1
: enables tracing of whatgit
is discovering about the repository and environment it’s interacting with. -
GIT_TRACE_PACKET=1
: enables packet-level tracing for network operations.
Rebasing
Rebase your branch onto the default
The -i
flag stands for ‘interactive’. Replace <default-branch>
with the name
of your default branch:
git rebase -i <default-branch>
Continue the rebase if paused
git rebase --continue
Use git rerere
To reuse recorded solutions to the same problems when repeated:
git rerere
To enable rerere
functionality:
git config --global rerere.enabled true