Advance Git & GitHub for DevOps Engineers :
Git Branching :
In Git, a branch is a separate line of development that allows multiple contributors to work on different features or bug fixes simultaneously without interfering with each other's work. Branches are an integral part of the Git workflow, and they make it easy to switch between different versions of your code, manage merge conflicts, and collaborate with others on a project. You can create a new branch, switch between existing branches, and merge branches together to bring changes from one branch into another. The main branch in Git is typically called "master."
Git Revert and Reset :
In Git, the revert command is used to undo the changes made in a specific commit. When you revert a commit, Git creates a new commit that undoes the changes made in the original commit. The original commit is not deleted, but its changes are undone in a new commit.
The reset command, on the other hand, discards commits, moving the branch pointer to a previous commit and destroying the commits in the branch that come after it. This is a more destructive operation, as it permanently removes commits from the branch's history.
Git Rebase and Merge :
- What Is Git Rebase : Git rebase is a command that lets users integrate changes from one branch to another, and the logs are modified once the action is complete. Git rebase was developed to overcome merging’s shortcomings, specifically regarding logs.
- What Is Git Merge : Git merge is a command that allows developers to merge Git branches while the logs of commits on branches remain intact. The merge wording can be confusing because we have two methods of merging branches, and one of those ways is actually called “merge,” even though both procedures do essentially the same thing.
Task 1 :
Add a text file called version01.txt inside the Devops/Git/ with “This is first feature of our application” written inside. This should be in a branch coming from master, [hint try git checkout -b dev], swithch to dev branch ( Make sure your commit message will reflect as "Added new feature"). [Hint use your knowledge of creating branches and Git commit command]
- version01.txt should reflect at local repo first followed by Remote repo for review. [Hint use your knowledge of Git push and git pull commands here]
Add new commit in dev branch after adding below mentioned content in Devops/Git/version01.txt: While writing the file make sure you write these lines,
- 1st line>> This is the bug fix in development branch.
- Commit this with message “ Added feature2 in development branch"
- 2nd line>> This is gadbad code
- Commit this with message “ Added feature3 in development branch
- 3rd line>> This feature will gadbad everything from now.
- Commit with message “ Added feature4 in development branch
Restore the file to a previous version where the content should be “This is the bug fix in development branch” [Hint use git revert or reset according to your knowledge]
Task 2 :
- Demonstrate the concept of branches with 2 or more branches with screenshot.
When you create a new project in Git, it creates a default branch called "master." The master branch is the main branch of the repository, and it is where all development begins. As you make changes to the project, you can create new branches to test different ideas or to work on different features.
For example, you might create a branch called "feature1" to work on a new feature for your project. You can continue to make changes to this branch, and when the feature is complete, you can merge it back into the master branch.
- Add some changes to dev branch and merge that branch in master.
- As a practice try git rebase too, see what difference you get.
In Git, "rebase" is an operation that allows you to integrate changes from one branch into another branch. It works by taking the commits from one branch and "replaying" them on top of the other branch.
When you use "git rebase," it effectively replaces the existing commits in the target branch with new ones that include the changes from the source branch. This can be useful in situations where you want to keep the commit history of your branch clean and linear, rather than having multiple merge commits.