Israel Teneda

Israel Teneda

9 useful Git commands

Here we're going to explore some common Git commands, which help you work more fluid with Git, you can revisit this page when whenever you need these commands.

Basic Commands

First we'll begin with some basic commands, these will help you to set up your enviroment and create a local reposiory:

Note: we can have two repositories. A local repository (in your computer) and remote repository (generally a repo on GitHub, GitLab, etc)

# Config/Update your username/email
git config --global user.name "your_name"
git config --global user.email "[email protected]"

# Check your username/email
git config --global user.name
git config --global user.email

# Create your local repository
# you need to run this command in your project folder
git init 

# For an existing repository you can clone that repo
git clone [repository-url]

Now we are going to check a basic workflow to add changes in your project

# When you change a folder/file in your project you can
# show your current unstaged changes with this command
git status

# Add your new changes to staging area
# To do this you can use two commands
# You can add an especifically directory or file, e.g.
git add filename

# You can add all the changes 
# this command stages all your changes
git add -A
# stages new files and modifications, **without deleted files** 
git add . 

# Commit (make a record of your changes)
# -m flag is used to add an inline commit message, instead of open an editor
git commit -m "Commit message" 

# Show commits history
git log

# Send changes to remote repo
git push origin branch-name

Once we know the basic git workflow to save/track changes in our projects. It's moment to see more commands and variation of above commands.

Basic Commands Variations

Instead of execute git add and git commit as differents commands we can do it in one command:

# -a automatically stage all tracked, modified files before the commit
git commit -am "Commit message"

Show one line commits history

git log --pretty=oneline
# Show a tree view
git log --graph --oneline --all

Branch

Command to work with branches

Creating a new branch

# This command only creates the branch but you still are in the current branch
git branch new-branch

Show all branches

# This command only creates the branch but you still are in the current branch
git branch

Deleting a branch

git branch -D new-branch

Checkout

This command is used to move between branches or as alternative to create a branch, also you can restart your changes with this command.

Creating a new branch and moving to the new branch

git checkout -b branch-name

Moving to an specifict branch

git checkout specifict-branch

Return to previus branch

git checkout -

Remove unstaged changes

git checkout .

Stash

This is a useful command, I think is like copy/paste but for your work when yout are working with Git. Usually you can run this command to move your work from one branch to another branch.

Stashinng changes

git stash

List stashing changes

git stash list

Apply last stashed change

git stash apply

Rebase

This is a command to combine your work with others work. It's similar to merge command, but you can do more things, like combine commits or rename them, etc.

Rebase your branch from master branch

git rebase master

Rebase your changes interactively

# rebase interactively with master branch
git rebase -i master
# rebase interactively your last 3 commits
git rebase -i HEAD~3

Interactively means that Git opens your default editor to allow you to manage your commits

Reset and Revert

I usually use this command to reset last change than inentantionally I created. You can use revert when you want to create a explicit commit that show the revert changes, this is specially to send public commits showing the revert changes

Reset/Remove last change

# Keeps the changes in the staging area
git reset --soft HEAD~1
# Remove all modifications in the last change
git reset --hard HEAD~1

Revert a commit

git revert commit-hash # a8c0c0b8q

Fetch and Diff

Fetch is useful when you want to update your local branch with a remote one. Diff allows you to compare the changes of your current branch with other branches

Fetch changes from a remote branch

git fetch origin branch-name

Compare your branch with others

git diff other-branch

Pull & Push

This allows you to send/get changes to/from a remote repository

Get changes from a remote branch

git pull origin branch-name

Send changes to a remote branch

git push origin branch-name
# when you made a rebase, generally you need to force a push
# we use --force-with-lease to don't override other's changes
git push origin branch-name --force-with-lease