DEV Community

Abhay Singh Kathayat
Abhay Singh Kathayat

Posted on

Mastering Git Branching and Merging: A Complete Guide to Git Branches, Merge, Rebase, and More

Branching and Merging in Git: A Complete Guide

Git’s powerful branching and merging capabilities make it an essential tool for collaboration and managing different versions of a project. Branches allow you to work on different features or bug fixes independently, and later merge or rebase those changes back into the main project. In this article, we’ll cover everything you need to know about working with branches, merging, and resolving conflicts.


14. Git Branch: Understanding Branches

A branch in Git is essentially a pointer to one of the commits in your project. Branches allow you to diverge from the main line of development and continue working independently without affecting the main codebase. This is particularly useful for features, bug fixes, or experiments.

How to List All Branches

To see all the branches in your repository, run:

git branch
Enter fullscreen mode Exit fullscreen mode

This will list all the branches in the repository, with an asterisk (*) next to the currently active branch.


15. Creating Branches: How to Create a New Branch

In Git, creating a new branch is simple. Use the git branch command followed by the branch name.

Create a New Branch

git branch <branch-name>
Enter fullscreen mode Exit fullscreen mode

This creates a new branch but doesn’t automatically switch to it. You’re still on the current branch until you explicitly switch to the new branch.

Create and Switch to a New Branch

To create a branch and switch to it in a single command, use:

git checkout -b <branch-name>
Enter fullscreen mode Exit fullscreen mode

Alternatively, if you're using Git 2.23 or later, you can use the git switch command:

git switch -c <branch-name>
Enter fullscreen mode Exit fullscreen mode

This will both create and immediately switch to the new branch.


16. Switching Branches: Moving Between Branches

Switching branches allows you to work on different features or fixes in isolation, which can later be merged back into the main branch or other branches.

How to Switch Branches

To switch from the current branch to another existing branch, use the following command:

git checkout <branch-name>
Enter fullscreen mode Exit fullscreen mode

Alternatively, for Git 2.23 and later, you can use:

git switch <branch-name>
Enter fullscreen mode Exit fullscreen mode

Check Out a Remote Branch

If you want to switch to a branch that exists on a remote repository (but not yet locally), you can check it out directly:

git checkout -t origin/<branch-name>
Enter fullscreen mode Exit fullscreen mode

This creates a new local branch and tracks the remote branch.


17. Deleting Branches: Cleaning Up After Work

After you’ve completed the work on a branch, you may want to delete it to keep your repository clean. Git allows you to delete both local and remote branches.

Delete a Local Branch

To delete a local branch that is no longer needed:

git branch -d <branch-name>
Enter fullscreen mode Exit fullscreen mode

The -d option will only delete the branch if it has already been merged into the current branch or any other branch. If you want to force delete a branch that has unmerged changes, use:

git branch -D <branch-name>
Enter fullscreen mode Exit fullscreen mode

Delete a Remote Branch

To delete a branch on the remote repository (e.g., after merging it), use:

git push origin --delete <branch-name>
Enter fullscreen mode Exit fullscreen mode

18. Git Merge: Combining Branches

Merging is how you bring the changes from one branch into another. It allows you to combine the work of different branches together.

How to Merge a Branch

To merge another branch into your current branch, use the git merge command:

git merge <branch-name>
Enter fullscreen mode Exit fullscreen mode

For example, if you want to merge the feature-branch into your current branch (say, main), first switch to the main branch:

git checkout main
git merge feature-branch
Enter fullscreen mode Exit fullscreen mode

How Merge Works

  • Fast-forward Merge: If the branch you’re merging has no new commits since the point where it diverged from the current branch, Git will simply move the pointer of the current branch forward.
  • Recursive Merge: If there are changes in both branches, Git will try to automatically combine them.

19. Merge Conflicts: Resolving Conflicts

A merge conflict occurs when changes in two branches are incompatible and Git cannot automatically resolve them. This happens when two different commits modify the same part of the same file.

How to Handle Merge Conflicts

  • When a conflict occurs, Git marks the file as conflicted and pauses the merge process. You’ll see conflict markers like this in the conflicted file:
  <<<<<<< HEAD
  Your changes here
  =======
  Other branch's changes here
  >>>>>>> branch-name
Enter fullscreen mode Exit fullscreen mode
  • Manually edit the file to resolve the conflict by choosing one version of the changes or merging the changes yourself. After resolving the conflict, stage the file:
  git add <file-name>
Enter fullscreen mode Exit fullscreen mode
  • Then, complete the merge by committing:
  git commit
Enter fullscreen mode Exit fullscreen mode

Tips for Avoiding Merge Conflicts

  • Communicate with your team to ensure that multiple people aren’t modifying the same code at the same time.
  • Merge frequently to minimize the scope of potential conflicts.

20. Git Rebase: Rewriting History

Rebasing is an alternative to merging. Instead of merging the entire branch, git rebase moves or "reapplies" your commits on top of another branch.

How to Rebase a Branch

To rebase your current branch onto another branch (usually the main branch), run:

git rebase <branch-name>
Enter fullscreen mode Exit fullscreen mode

For example:

git rebase main
Enter fullscreen mode Exit fullscreen mode

This applies your commits from the current branch on top of the latest commits from main.

Why Use Rebase?

  • Linear History: Rebasing creates a cleaner, linear commit history, which is easier to read and understand.
  • Avoiding Merge Commits: Rebasing avoids the creation of merge commits, resulting in a simpler commit history.

21. Interactive Rebase: Rewriting Commit History

Interactive rebasing allows you to modify a series of commits in a more detailed way. This feature is useful for cleaning up commit history before pushing to a shared repository.

How to Perform an Interactive Rebase

To rebase the last few commits interactively, use:

git rebase -i HEAD~<number-of-commits>
Enter fullscreen mode Exit fullscreen mode

For example, to modify the last 3 commits:

git rebase -i HEAD~3
Enter fullscreen mode Exit fullscreen mode

This will open a text editor with a list of commits, allowing you to:

  • Pick: Keep the commit as is.
  • Reword: Edit the commit message.
  • Edit: Modify the commit content.
  • Squash: Combine commits into one.
  • Fixup: Squash but discard the commit message.

How Interactive Rebase Helps

  • Squash Commits: You can merge multiple commits into one, which is useful for cleaning up commits that represent minor changes.
  • Reword Commit Messages: If you’ve made a typo or need to clarify a message, you can easily reword the commit messages during an interactive rebase.

Conclusion

Branching and merging are foundational concepts in Git that allow you to work on different aspects of your project without disrupting the main codebase. Git provides several powerful tools for managing branches, such as git branch, git merge, and git rebase, each with specific use cases. Understanding how to manage branches and resolve merge conflicts is crucial for effective collaboration and version control.

Whether you prefer a clean, linear history with rebase or want to preserve the context of merges, Git’s flexibility gives you the control you need over your project’s history.


Top comments (0)