This is a git guide that contain command examples with explanations, different use cases and links to further documentations.
Read this in: Português
# System git config
$ git config --system --edit
# Global git config (User config)
$ git config --global --edit
# Local git config (Project config)
$ git config --edit
# or
$ git config --local --edit
How to create alias
Run the following command:
admin:~$ git config --global --edit
You must add the following command to the .gitconfig file opened into editor:
[alias]
c = !git command
Now, use git c
instead.
# Add files to stage area
$ git add file_name # Add single file.
$ git add . # Add files from current diretory.
$ git add --all # Add all files.
# Create a commit
$ git commit -m "message" # It creates a new commit.
$ git commit --amend --no-edit # It creates a commit merged with the previous commit.
# Putting changes to stash
$ git stash # Stash all modifications.
$ git stash list # Saved stash listing.
$ git stash pop # Returns modifications from stash and clears the list.
$ git stash apply # Returns modifications
$ git stash clear # Clear the stash listinig
File status
Unknown files by git.
admin:~$ git status -s
?? index.js
Files known to git but not added to stage area after modification. They are outside the stage area therefore they will not enter the next commit.
admin:~$ git status -s
M index.js
Files that will enter the next commit.
admin:~$ git status -s
A index.js
# Show status of modified files and current branch.
$ git status
# or
$ git status --s
# Show specific commit details
$ git show
# or
$ git show --oneline
# Commit listing
$ git log
# or
$ git log --oneline
How to add custom git log to the alias:
Add the following command to the alias:
l = !git log --pretty=format:'%C(green)%h %C(yellow)%d %C(white)%s - %C(cyan)%cn, %C(blue)%cr'
New git log:
# Create a new tag
$ git tag v1.0 hash_commit # It creates a Lightweight tag
$ git tag v1.0 -m "Release v1.0" hash_commit # It creates a Annotated tag (for sending github)
# View tags
$ git tag # Show all tags
$ git tag v1.0 # Show a single tag
# Delete tag
$ git tag --delete v1.0 # Delete from local
$ git push --delete origin v1.0 # Delete from remote
Open the global git config --global
and add the following code:
[push]
followTags = true
$ git checkout . # Returns changes to files that are Unstaged and tracked.
$ git checkout [[commit_ref] or [tag_ref]] # Creates a virtual branch with the chosen point to analyze the code.
$ git checkout -b nome_branch # Create a truly branch.
$ git checkout nome_branch # Switch between branches.
$ git merge branch_name . # Merge the current branch with the branch_name.
$ git reset [hash or HEAD~n] --flag
HEAD - Last commit
n - Number of commits below HEAD.
hash - Commit hash ( The default is the last commit (HEAD) )
--flag - It can be --soft, --mixed (default), --hard
# Handling commits
$ git reset HEAD~1 --soft # Goes back to the previous commit by placing the files to Staging area.
$ git reset HEAD~2 --mixed # Goes back 2 commits by placing the files back in the Unstaged area.
$ git reset HEAD~1 --hard # Goes back to the previous commit and undo the modification of the Unstaged area files.
# Handling the current commit (HEAD)
# The default is the HEAD
$ git reset # --mixed tag omitted. Place the files from the Staging Area to Unstaged area.
$ git reset --hard # Undo the modification of files that are in the Unstaged area or Staging area.
$ git revert [hash ou HEAD~1] --flag
$ git revert HEAD~1 # Creates a new commit with the reverse modifications.
$ git revert HAAD~1 --no-edit # Creates a new commit no editing.
$ git revert HEAD~1 --no-commit # Make the reverse changes to the files and add them to Staging area.
$ git clean --flag
$ git clean -n # Show the untracked files.
$ git clean -n -d # Show all untracked files recursively.
$ git clean -f # Delete the untracked files.
$ git clean -f -d # Delete all untracked files recursively.
$ git rm file.ex --flag
$ git rm index.js # Remove the tracked file.
$ git rm folder -r # Remove the tracked files recursively.
Run the following command:
$ git rm index.js --cached'
Run the following command to open the editor:
$ git rebase -i [commit_ref]'
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
Close the editor or use the ---abort
flag to exit rebasing mode.
$ git rebase --abort'