Saturday, November 20, 2021

Comparing file changes with git diff command

Hello Guys, in this post we will explore about git diff command options when to use what option etc. Git basic work flow is going happen initially starts at work area. When you add the files then it will be in the stage area. Once you feel everything is good then we will commit those changes then it will goes to local repository area. In simple words we can say work area -> stage area -> repo area.
 
The pictorial representation of my understanding about the git workflow:

Work flow for git diff command exeuction
Work flow for git diff command exeuction


 

How to Compare files in git to get the last changes?

In git we have this nice feature to compare a file what has been changed who did the changes we can track them with the inputs we can pass as options to the 'git diff' command.
Syntax: git diff [code-file]
Examples: You can compare and see all the files which are changed with the last commit.
git diff
You can compare and see specific file, for example we consider index.html file recently modified and then git add executed. That means changes are in the staged area.
git diff index.html
Hint: This will compare after git add


 

How can I compare a file of work area with local repo

We can do compare a file that has changes from local repo, when you run the following command the git with a pointer HEAD node
Syntax: git diff HEAD [codefile]
Examples: When we use HEAD pointer, git will show the changes comparing with the work area file(s) with local repository containing file(s)
git diff HEAD
Specific file changes comparing with the work area file with local repository
 
git diff HEAD ./mist.yml
Hint: This will compare after git commit

Comparing of work area and local repo
git diff with HEAD

 

Compare between stage area and repo area

Git diff with –stage or –cached options between stage area file with last committed file
 
Syntax: 
git diff [--staged] [code.file]
git diff [--cached] [code.file]
Here is the execution of --stage flag where it will be displaying the changes were made between stage area and repo area. Examples
 
git diff --staged
One more example when we choose a specific file:
 
git diff --staged myweb.html
Hint: This will compare git commit file with git add

Compare between stage area and repo area
git diff with staged flag

How to get the comparison between two commits?

We can compare a file at two different commit levels, where we need to provide the input as two different commit IDs. Comparing two different commits
 
Syntax: git diff [commit-SHA-ID] [commit-SHA-ID] [code-file]
Examples: Here I'm using short form of the commit ID, considering min 5 char of SHAcode
 
git diff e220bb005 e5aa90d79
Now focusing on my specific file here it is mist.yml file that changed between given two commit IDs.
 
git diff e220bb005 e5aa90d79 mist.yml 
Hint: This will compare after multiple git commits use git log –pretty=oneliner
IMAGE: git-diff-commit-IDs

The git diff command with commit IDs
git diff with commit IDs

 

How to find the list of files that changed between last two commits?

Here we want to get only the name of the files which were modified between last two commits which can be pointed with the HEAD and last but-one using HEAD^.
 
  git diff --name-only HEAD HEAD^
  

Can I compare two branches?

Yes, it is possible. Now beyond the single branch now, we can compare two branches together this is generally done when a merge request comes and you need to observe the changes.
 
Syntax: git diff branch1..branch2 [codefile]
Examples: Here I've created two branches and have different levels of changes in each. Let's see first compare master branch with the vt-dev development branch.
 
git diff vt-dev..master
Where it shows many changes on the output. Now lets filter to specific file by providing the file name.
 
 git diff vt-dev vt-test mist.yml
IMAGE: The git-diff-branches

The git diff with branches
There is specific file 
git diff option branches on a file



 

Git diff Output Simplified with flags

Simplifying output format with options Stats for the file it is special option which will tells us the file changed were happen to a file and how many changes were made to the file count with a plus symbol. The flag options we have here:
  1. stat
  2. name-only
  3. name-status
 
 
git diff --stat master...vt-dev mist.yml

To show filter out those file name-only will be helpful when you need more concern about the file names:
 
 git diff --name-only vt-dev...feature
 
We can also get the the file is in which Status is it modified or just Added or Updated an existing committed file with the first letter as indicator. Example M - Modified
 
git diff  --name-status vt-dev...feature
>

The git diff command with special flags

No comments:

Categories

Kubernetes (24) Docker (20) git (13) Jenkins (12) AWS (7) Jenkins CI (5) Vagrant (5) K8s (4) VirtualBox (4) CentOS7 (3) docker registry (3) docker-ee (3) ucp (3) Jenkins Automation (2) Jenkins Master Slave (2) Jenkins Project (2) containers (2) create deployment (2) docker EE (2) docker private registry (2) dockers (2) dtr (2) kubeadm (2) kubectl (2) kubelet (2) openssl (2) Alert Manager CLI (1) AlertManager (1) Apache Maven (1) Best DevOps interview questions (1) CentOS (1) Container as a Service (1) DevOps Interview Questions (1) Docker 19 CE on Ubuntu 19.04 (1) Docker Tutorial (1) Docker UCP (1) Docker installation on Ubunutu (1) Docker interview questions (1) Docker on PowerShell (1) Docker on Windows (1) Docker version (1) Docker-ee installation on CentOS (1) DockerHub (1) Features of DTR (1) Fedora (1) Freestyle Project (1) Git Install on CentOS (1) Git Install on Oracle Linux (1) Git Install on RHEL (1) Git Source based installation (1) Git line ending setup (1) Git migration (1) Grafana on Windows (1) Install DTR (1) Install Docker on Windows Server (1) Install Maven on CentOS (1) Issues (1) Jenkins CI server on AWS instance (1) Jenkins First Job (1) Jenkins Installation on CentOS7 (1) Jenkins Master (1) Jenkins automatic build (1) Jenkins installation on Ubuntu 18.04 (1) Jenkins integration with GitHub server (1) Jenkins on AWS Ubuntu (1) Kubernetes Cluster provisioning (1) Kubernetes interview questions (1) Kuberntes Installation (1) Maven (1) Maven installation on Unix (1) Operations interview Questions (1) Oracle Linux (1) Personal access tokens on GitHub (1) Problem in Docker (1) Prometheus (1) Prometheus CLI (1) RHEL (1) SCM (1) SCM Poll (1) SRE interview questions (1) Troubleshooting (1) Uninstall Git (1) Uninstall Git on CentOS7 (1) Universal Control Plane (1) Vagrantfile (1) amtool (1) aws IAM Role (1) aws policy (1) caas (1) chef installation (1) create organization on UCP (1) create team on UCP (1) docker CE (1) docker UCP console (1) docker command line (1) docker commands (1) docker community edition (1) docker container (1) docker editions (1) docker enterprise edition (1) docker enterprise edition deep dive (1) docker for windows (1) docker hub (1) docker installation (1) docker node (1) docker releases (1) docker secure registry (1) docker service (1) docker swarm init (1) docker swarm join (1) docker trusted registry (1) elasticBeanStalk (1) global configurations (1) helm installation issue (1) mvn (1) namespaces (1) promtool (1) service creation (1) slack (1)