Basic commands of Git

Get Started. It's Free
or sign up with your email address
Basic commands of Git by Mind Map: Basic commands  of Git

1. A Gist containing some good rules link

2. With graph (useful for branches)

3. Initializing a Project

3.1. git init

4. Reporting difference between WD,SA and R

4.1. git status

5. Viewing commits

5.1. Displaying all commits

5.1.1. git log

5.2. With a limit of commits

5.2.1. git log -[n]

5.3. Searching commits by date

5.3.1. git log --since="[yyyy-mm-dd]"

5.3.2. git log --until="[yyyy-mm-dd]"

5.3.3. git log --since="2 weeks ago" --until="3 days ago"

5.3.4. git log --since=2.weeks --until=3.days

5.4. Searching commits by author

5.4.1. git log --author = "[name]"

5.5. Searching commits by commit message

5.5.1. git log --grep = "[message]"

5.6. Getting a compressed list in one line

5.6.1. git log --oneline

5.6.2. git log --oneline -[n]

5.6.3. git log [SHA-value]..[SHA-value] --oneline

5.7. Give the logs that affect to a particular file

5.7.1. git log [SHA-value].. [file_name]

5.8. Showing a diff of what changed in every file

5.8.1. git log -p

5.9. Getting the statics about the changes in each file

5.9.1. git log --stat --summary

5.10. Getting the one-line log with full SHA

5.10.1. git log --format=oneline

5.11. Getting the log information in email format

5.11.1. git log --format=email

5.12. Getting the log in raw format

5.12.1. git log --format=raw

5.13. Try this format

5.13.1. git log --oneline --graph --all --decorate

5.14. Showing the full SHA, author, date, the commit message and the diff of a commit

5.14.1. git log --format=graph

5.14.2. git show [SHA-value]

5.14.3. git show [tree-ish] e.g. HEAD

6. Ignoring files to track or files you don't want to add

6.1. Project directory level

6.1.1. nano .gitignore

6.2. User directory level

6.2.1. Linux / Unix

6.2.1.1. nano /Users/[user_name_directory]/.gitignore_global

6.2.1.1.1. git config --global core.excludesfile ~/.gitignore_global

6.2.2. Windows

6.2.2.1. Use your preference text editor, create a file with .gitignore_global extension

6.2.2.1.1. git config --global core.excludesfile ~/.gitignore_global

6.3. What files to ignore?

6.3.1. A collection of useful .gitignore templates rules link

6.4. Ignoring tracked files

6.4.1. It's going to remove from the Staging Area, not from Repository and my Working Directory either

6.4.1.1. git rm --cached [file_name]

6.5. Tracking empty directories

6.5.1. touch [directory_path/directory_name_to_track]/.gitkeep

6.5.2. [directory_path/directory_name_to_track]> type nul > .gitkeep

7. Navigating the commit tree

7.1. What is a Tree-ish?

7.2. How Git can reference a commit?

7.2.1. full SHA-1 hash

7.2.2. short SHA-1 hash

7.2.2.1. Small Project

7.2.2.1.1. Current commit

7.2.2.1.2. Parent commit

7.2.2.1.3. Grand parent commit

7.2.2.1.4. Great grand parent commit

7.2.2.1.5. [n] parent commit

7.2.2.2. Medium project

7.2.2.3. Large project

7.2.3. HEAD Pointer

7.2.3.1. Current commit

7.2.3.1.1. git ls-tree HEAD

7.2.3.2. Parent commit

7.2.3.2.1. git ls-tree HEAD^

7.2.3.2.2. git ls-tree HEAD~1, git ls-tree HEAD~

7.2.3.3. Grand parent commit

7.2.3.3.1. git ls-tree HEAD~2

7.2.3.4. Great grand parent commit

7.2.3.4.1. git ls-tree HEAD~3

7.2.3.5. [n] parent commit

7.2.3.5.1. git ls-tree HEAD~[n]

7.2.4. Branch reference

7.2.4.1. Current commit

7.2.4.1.1. git ls-tree master

7.2.4.2. Parent commit

7.2.4.2.1. git ls-tree master^

7.2.4.2.2. git ls-tree master~1, git ls-tree master~

7.2.4.3. Grand parent commit

7.2.4.3.1. git ls-tree master~2

7.2.4.4. Great grand parent commit

7.2.4.4.1. git ls-tree master~3

7.2.4.5. [n] parent commit

7.2.4.5.1. git ls-tree master~[n]

7.2.5. Tag reference

8. Remote Repository

8.1. Listing all remote repositories

8.1.1. git remote

8.1.2. git remote -v

8.1.3. cat .git/config

8.1.4. ls -la .git/refs/remotes

8.1.4.1. ls -la .git/refs/remotes/[alias]

8.1.4.2. cat .git/refs/remotes/[alias]/master

8.1.5. git branch -r

8.1.6. git branch -a

8.2. Adding a remote

8.2.1. git remote add [alias_remote_repo] [URL]

8.3. Removing a remote

8.3.1. git remote rm [alias]

8.4. Creating a remote branch

8.4.1. git push -u [alias] [branch_name]

8.5. Creating non tracking remote branch

8.5.1. git push [alias] [branch_name]

8.6. Cloning from remote server repository

8.6.1. git clone [URL] <alias>

8.7. Viewing changes

8.7.1. git diff [alias]/[branch_name]..[branch_name]

8.8. Converting remote branch from non remote branch

8.8.1. git config branch.[non_tracking_branch_name].remote [alias]

8.8.2. git config branch.[non_tracking_branch_name].merge refs/heads/master

8.8.3. git branch --set-upstream [non-tracking_branch_name] [alias]/[non-tracking_branch_name]

8.9. Pushing changes to the remote repository

8.9.1. git push

8.10. Synchronizing remote repo to local repo

8.10.1. git fetch

8.11. Merging changes

8.11.1. git merge [alias]/[branch_name]

8.12. Synchronizing and merging in one step

8.12.1. git pull

8.13. Checking out remote branches

8.13.1. git branch [new_branch_name] [alias]/[remote_branch_name]

8.14. Deleting remote branch

8.14.1. git push [alias_remote_repo_name] :[remote_branch_name]

8.14.2. git push [alias_remote_repo_name] --delete [remote_branch_name]

9. Repository

9.1. Undoing multiple commits by moving the HEAD Pointer. Rewinding the HEAD pointer back in time, so that it records from there going forward.

9.1.1. git reset

9.1.1.1. The changes are still in the Staging Area and in the Working Directory

9.1.1.1.1. git reset --soft [SHA-value]

9.1.1.2. The changes are still only in the Working Directory

9.1.1.2.1. git reset --mixed [SHA-value]

9.1.1.3. The changes are not tracking and the Working Directory is clean

9.1.1.3.1. git reset --hard [SHA-value]

9.2. Making a new commit which undoes all the changes from an existing one

9.2.1. git revert [SHA-value]

9.3. Amending commits

9.3.1. git commit --amend -m “[message]”

9.4. Retrieving old version from the current branch

9.4.1. git checkout [SHA-value] -- [file_name]

9.5. Sending the changes to the Remote Repository

9.5.1. git push

10. Staging Area

10.1. Viewing the changes

10.1.1. git diff --staged [file_name]

10.1.2. git diff --staged --color-words [file_name]

10.2. Unstaging changes or sending back to the WD

10.2.1. git reset HEAD [file_name]

10.3. Sending the changes to the Repository

10.3.1. git commit -m "[message]"

11. Working Directory

11.1. Viewing the changes

11.1.1. git diff [file_name]

11.1.2. git diff --color-words [file_name]

11.1.3. Showing the difference between the directory at some point in time and my current working directory

11.1.3.1. git diff [SHA-value]

11.1.4. Getting a comparison between at the previous point in time and the working directory with a specific file.

11.1.4.1. git diff [SHA-value] [file_name]

11.1.5. Getting a comparison between two different points in time

11.1.5.1. git diff [SHA-value]..[SHA-value]

11.1.6. Getting a comparison between two different points in time with a specific file

11.1.6.1. git diff [SHA-value]..[SHA-value] [file_name]

11.1.7. Getting a comparison with a tree-ish

11.1.7.1. git diff [SHA-value]..[tree-ish]~[n]

11.1.8. Ignoring whether or not someone changed spaces

11.1.8.1. git diff --stat --summary [SHA-value]..[tree-ish]~[n]

11.1.8.2. git diff --ignore-space-change [criteria]

11.1.8.3. git diff -b [criteria]

11.1.9. Ignoring all space, every single change that could be made to space

11.1.9.1. git diff --ignore-all-space [criteria]

11.1.9.2. git diff -w [criteria]

11.1.10. Comparing with the latest commit

11.1.10.1. git diff --cached

11.2. Undoing changes from the current branch

11.2.1. git checkout -- [file_name]

11.3. Sending the changes to the Staging Area

11.3.1. git add [file_name]

11.3.2. git add .

11.4. Deleting file(s) and sending to the Staging Area

11.4.1. git rm [file_name]

11.5. Moving or renaming file(s) and sending to the Staging Area

11.5.1. git mv [file_name]

11.6. Sending the changes to the Repository (tracked files)

11.6.1. git commit -am "[message]"

11.7. Deleting untracked files

11.7.1. Testing run

11.7.1.1. git clean -n

11.7.2. Removing files

11.7.2.1. git clean -f

12. Branching

12.1. Viewing all the branches in our local repository

12.1.1. git branch

12.2. Creating a new branch

12.2.1. git branch [branch_name]

12.3. Where the HEAD pointer points to?

12.3.1. cat .git/HEAD

12.3.1.1. Result: ref: refs/heads/[current_branch_name]

12.3.1.1.1. Checking the heads directory

12.3.1.1.2. Take a look what's in the [current_branch_name] branch

12.4. Switching branches

12.4.1. git checkout [new_branch_name]

12.4.1.1. Examples for naming git branches

12.4.2. Creating a new branch and switch at the same time

12.4.2.1. git checkout -b [branch_name]

12.4.2.2. git checkout -b [branch_name] [alias_for_remote_repository]/[remote_branch_name]

12.5. Comparing branches

12.5.1. git diff [branch_name]..[branch_name]

12.5.2. git diff --color-words [branch_name]..[branch..name]

12.6. Renaming branches

12.6.1. git branch -m [old_branch_name] [new_branch_name]

12.7. Deleting branches

12.7.1. git branch -d [branch_name_to_delete]

12.7.2. git branch -D [branch_name_to_delete]

12.8. Configuring the command prompt to show the branch

12.8.1. Windows

12.8.1.1. Create a new file on NotePad and save it as .bash_profile: export PS1='Your-Name[\W]$(__git_ps1 "(%s)"): '

12.8.1.2. In order to run that file: source ~/.bash_profile

12.8.2. Unix

12.8.2.1. Download the .git-prompt.sh file from Command Line: curl -o ~/.git-prompt.sh \ https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh

12.8.2.2. Edit the .bash_profile and ADD the following code: if [ -f ~/.git-prompt.sh ]; then source ~/.git-prompt.sh export PS1='Your-Name[\W]$(__git_ps1 "(%s)"): ' fi

12.9. Showing all branches that are completely included into the checkout (current) branch that we are on

12.9.1. git branch --merged

12.10. Merging code

12.10.1. git merge [branch_name]

12.10.1.1. Fast-Forward

12.10.1.2. git merge --no-ff [branch_name]

12.10.1.3. git merge --ff-only [branch_name]

12.10.1.4. True merge or Non-Fast-Forward merge

12.10.2. Merging conflicts

12.10.2.1. Resolving merge conflicts

12.10.2.1.1. Abort the merge

12.10.2.1.2. Resolve the conflicts manually

12.10.2.1.3. Merge tool

13. Saving changes in the stash

13.1. git stash save "[message]"

13.2. Viewing stashed changes

13.2.1. git stash list

13.2.2. git stash show stash@{n}

13.2.3. git stash show -p stash@{n}

13.3. Retrieving stashed changes

13.3.1. git stash pop stash@{n}

13.3.2. git stash apply stash@{n}

13.4. Deleting stashed changes

13.4.1. git stash drop stash@{n}

13.4.2. git stash clear

14. Setting up aliases

14.1. git config --global alias.[alias] “[git_command]”