Rebase is one of two Git utilities that focuses on integrating changes from one branch onto another. the opposite change integration utility is git merge. Merge is usually a forward-moving change record. Alternatively, rebase can rewrite history also. Rebase has two main modes: "manual" and "interactive" mode.
Rebasing is that the process of moving or combining a sequence of commits to a replacement base commit. Rebasing is most useful and simply visualized within the context of a feature branching workflow.
Rebasing is changing the bottom of your branch from one plan to another making it appear as if you'd created your branch from a special commit. Internally, Git accomplishes this by creating new commits and applying them to the required base. it's extremely important to know that albeit the branch looks an equivalent, it's composed of entirely new commits.
The primary reason for rebasing is to take care of linear project history. for instance, consider a situation where the master branch has progressed since you started performing on a feature branch. you would like to urge the newest updates to the master branch in your feature branch, but you would like to stay your branch's history clean so it appears as if you have been working off the newest master branch. this provides the later advantage of a clean merge of your feature branch back to the master branch. Why can we want to take care of a "clean history"? the advantages of getting a clean history to become tangible when performing Git operations to research the introduction of a regression. A more real-world scenario would be:
1. A bug is identified within the master branch. A feature that was working successfully is now broken.
2. A developer examines the history of the master branch using git log due to the "clean history" the developer is quickly ready to reason about the history of the project.
3. The developer can't identify when the bug was introduced using git log, therefore, the developer executes a git bisect.
4. Because the git history is clean, git bisect features a refined set of commits to match when trying to find the regression. The developer quickly finds the commit that introduced the bug and is in a position to act accordingly.
You have two options for integrating your feature into the master branch: merging directly or rebasing then merging. the previous option leads to a 3-way merge and a merge commit, while the latter leads to a fast-forward merge and a wonderfully linear history. the subsequent diagram demonstrates how rebasing onto the master branch facilitates a fast-forward merge.