Skip to main content

Command Palette

Search for a command to run...

Advance Git & GitHub for DevOps Engineers

Updated
6 min read
Advance Git & GitHub for DevOps Engineers
O

Hi there! I'm Ojas Jawale, a passionate Cloud, DevOps and Cyber Security enthusiast. I love to dive into the latest new technologies and sharing my journey through blog. I'm always eager to learn and grow in this ever-evolving field of DevOps and Cyber Security. You'll find me writing about CI/CD pipelines, automation, containerization with Docker, and other exciting tech topics related to software quality and deployment. My goal is to demystify complex DevOps and Cyber Security concepts, provide practical tips on automation and testing, and inspire others in the developer and operations community. Let's connect, learn, and build amazing, high-quality software together!

  1. What is Git Branching?

  • Git branching is a feature in Git that allows you to diverge from the main line of development and continue to do work without messing up that main line.

  • Git branching is like creating a copy of your project to work on without affecting the original.

  • Branching means you can create a copy of your project to work on a specific feature, fix a bug, or experiment with new ideas without affecting the main project.


  1. What is Git Revert and Reset?

Git Revert

  • "Git revert" is used to undo the changes introduced by a specific commit by creating a new commit with the opposite changes. This method maintains the project history intact, making it clear what was changed and why it was reverted.

  • Use case: When you want to undo changes in a way that preserves the history of the repository.

linux$ git revert <commit-hash>

Git reset

  • "Git reset" is used to undo changes by moving the current branch pointer to a different commit.

  • Moves the branch pointer back to a previous commit, effectively discarding any commits made after that point.

  • Rewrites the commit history, which can be risky if others have already pulled your code.

There are three types of reset,

  • Soft Reset (--soft): Moves the branch pointer to a different commit but leaves your working directory and the index (staging area) unchanged.
linux$ git reset --soft <commit-hash>
  • Mixed Reset (--mixed): Moves the branch pointer to a different commit and resets the index, but leaves your working directory unchanged.
linux$ git reset --mixed <commit-hash>
  • Hard Reset (--hard): Moves the branch pointer to a different commit and resets both the index and working directory to match that commit.
linux$ git reset --hard <commit-hash>

For a better understanding of Git Rebase and Merge, check out this article.


  1. What is Git Rebase and Merge?

Git Merge

  • "Git merge" combines changes from one branch into another. It creates a new commit, called a "merge commit," which has two parent commits.

  • Suppose you want to merge two branch then first go to the main base branch and then try to merge branch that you want to merge, for e.g,

linux$ git checkout master # Switched to master branch
linux$ git merge feature-branch # Trying to merge branch feature-branch to main

Git Rebase

  • "Git rebase" moves or combines a sequence of commits to a new base commit. Instead of creating a merge commit, rebase rewrites the project history by creating new commits for each commit in the original branch.

  • When you want to incorporate changes from one branch into another without creating a merge commit, resulting in a cleaner project history.

linux$ git checkout feature-branch
linux$ git rebase master

For a better understanding of Git Rebase and Merge, check out this article.


  1. Task 1 : Feature Development with Branches

Create a Branch and Add a Feature

  • Add a text file called version01.txt inside the Devops/Git/ directory with “This is the first feature of our application” written inside.
linux/Devops/Git/Adv_git$ ls
version01.txt
linux/Devops/Git/Adv_git$ cat version01.txt
This is the first feature of our application.
  • Create a new branch from "master".
linux/Devops/Git/Adv_git$ git branch dev
linux/Devops/Git/Adv_git$ git branch
  dev
* master
  • Commit your changes with a message reflecting the added feature.
linux$ git checkout dev
D       README.md
Switched to branch 'dev'

linux$ git add version01.txt
linux$ git commit -m "Added new feature"

Push Changes to GitHub

  • Push your local commits to the repository on GitHub.
/linux/Devops/Git/Adv_git$ git status
On branch dev
nothing to commit, working tree clean

linux/Devops/Git/Adv_git$ git push origin dev
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Writing objects: 100% (3/3), 300 bytes | 150.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'dev' on GitHub by visiting:
remote:      https://github.com/ojasjawale/Adv_git/pull/new/dev
remote:
To github.com:ojasjawale/Adv_git.git
 * [new branch]      dev -> dev

Add More Features with Separate Commits

  • Update version01.txt with the following lines, committing after each change.

  • 1st line: This is the bug fix in development branch

linux/Devops/Git/Adv_git$ git commit -am "Added feature2 in development branch"
[dev 4cf98e2] Added feature2 in development branch
 1 file changed, 2 insertions(+)

linux/Devops/Git/Adv_git$ git log --oneline
4cf98e2 (HEAD -> dev) Added feature2 in development branch
63c03df (origin/dev) Added new feature
9f59996 (origin/master, origin/HEAD, master) Initial commit
  • 2nd line: This is Gadbad code.
linux/Devops/Git/Adv_git$ echo "This is gadbad code" >> version01.txt

linux/Devops/Git/Adv_git$ git commit -am "Added feature3 in development branch"
[dev 04600e2] Added feature3 in development branch
 1 file changed, 2 insertions(+)

linux/Devops/Git/Adv_git$ git log --oneline
04600e2 (HEAD -> dev) Added feature3 in development branch
4cf98e2 Added feature2 in development branch
63c03df (origin/dev) Added new feature
9f59996 (origin/master, origin/HEAD, master) Initial commit
  • 3rd line: This feature will Gadbad everything from now.
linux/Devops/Git/Adv_git$ echo "This feature will gadbad everything from now" >> version01.txt       

linux/Devops/Git/Adv_git$ git commit -am "Added feature4 in development branch"
[dev 5dc8e94] Added feature4 in development branch
 1 file changed, 1 insertion(+)

linux/Devops/Git/Adv_git$ git log --oneline
5dc8e94 (HEAD -> dev) Added feature4 in development branch
04600e2 Added feature3 in development branch
4cf98e2 Added feature2 in development branch
63c03df (origin/dev) Added new feature
9f59996 (origin/master, origin/HEAD, master) Initial commit

Restore the File to a Previous Version

  • Revert or reset the file to where the content should be “This is the bug fix in development branch”.
linux/Devops/Git/Adv_git$ cat version01.txt
This is the first feature of our application.

This is the bug fix in development branch
This is gadbad code
This feature will gadbad everything from now
linux$ git revert HEAD~2

linux/Devops/Git/Adv_git$ cat version01.txt
This is the bug fix in development branch

  1. Task 2 : Working with Branches

Demonstrate Branches

  • Create 2 or more branches and take screenshots to show the branch structure.
linux$ git branch stg
linux$ git branch prd
linux$ git branch
* dev
  master
  prd
  stg

Merge Changes into Master

  • Make some changes to the dev branch and merge it into master.
linux/Devops/Git/Adv_git$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

linux/Devops/Git/Adv_git$ git merge dev
Updating 9f59996..6f3f6fe
Fast-forward
 README.md     | 1 -
 version01.txt | 1 +
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 README.md
 create mode 100644 version01.txt

Practice Rebase

  • Try rebasing and observe the differences.
linux/Devops/Git/Adv_git$ git rebase master
Current branch master is up to date.

Connect Me

LinkedIn | GitHub

Follow me for more amazing content :)

More from this blog

Untitled Publication

52 posts