
- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
What is a fast-forward merge in Git?
Fast forward merge can be performed when there is a direct linear path from the source branch to the target branch. In fast-forward merge, git simply moves the source branch pointer to the target branch pointer without creating an extra merge commit.
Let us look at an example implementing fast-forward merge.
We have a master branch with 3 commits.
Next, we create a branch called feature branch. In git a branch is nothing but a pointer to a commit. At this point both feature and master are pointing to the same commit.
Now let us switch to the feature branch and do a couple of commits. Now we need to bring the changes to the master branch. There is a linear path from feature to master.
In order to merge the changes to the master branch, all git has to do is to change the pointer of master forward. This is what we call fast-forward merge.
Let us understand fast-forward merge through a real-world example.
Let us say we have a directory called MAIN_V1.0. The code in this directory is of version 1.0. We take a copy of this directory and call it as BUGFix_V1.0. Code in BUGFix_V1.0 is identical to the code in the MAIN directory. Now let’s say we made changes in the BugFix directory and made it to BUGFix_V2.0. Once we have completed the changes in bugfix, how do we bring the changes back to the MAIN folder?
Solution 01 − Copy all files from Bugfix to Main. This is not the best solution as copy operations may take long time if we have many files in the Bugfix version 2.0 folder. There should be a better way
Solution 02 − Since there is no additional change in the MAIN directory and everything in MAIN is essentially the first version of BUGFix directory, we can simply rename BUGFix to MAIN. From this point forward, we can say this is our new MAIN directory. The concept of fast forward merge in git is very similar to this solution.
So, if two branches have not diverged and there is a direct linear path from the target branch to the source branch, Git runs a fast forward merge.
Example
$ git init $ echo hello>hello.txt $ git add . $ git commit -m 'first' $ echo hello>>hello.txt $ git add . $ git commit -m 'second' $ echo hello>>hello.txt $git commit -m 'third' $ git add . $ git commit -m 'third' $git branch feature $ git switch feature $ echo world>>hello.txt $ git add . $ git commit -m 'world1' $ echo world>>hello.txt $ git add . $ git commit -m 'world2' $ git switch master $ git merge feature $ git merge feature
Output
Updating 1c80cb1..571c901 Fast-forward hello.txt | 2 ++ 1 file changed, 2 insertions(+)
- Related Questions & Answers
- How to disable fast forward merges? What are its pros and cons in Git?
- What is 3-way merge or merge commit in Git?
- What is merge conflict in Git? How to handle merge conflicts?
- Why is git branching fast compared to other version control systems?
- How to abort a merge conflict in Git?
- What is the forward contract?
- How to undo a faulty merge with reset command in Git?
- How to undo a faulty merge with revert command in Git?
- What is the short status in Git?
- What is Feed-Forward Neural Networks?
- What is a forward reference in JShell in Java 9?
- What is .git folder and why is it hidden?
- What is Compatibility Testing? Forward & Backward Testing
- What is the difference between HEAD and master in git?
- What is Compatibility Testing? Forward & Backward Testing (Example)