- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Explain mixed reset with an example in Git
Mixed reset will move the HEAD pointer to the commit specified. This is the default reset option in git. It also copies content of the commit snapshot to the staging area and not to the working directory. This will lead to overwriting the staging area. The working directory contents will be safe in this case. Let us understand this through an example.
Example
The diagram shows a file named File1.txt within the git repository. A, B, C and D represent lines that are added to the file. The diagram indicates that a commit is performed after adding each line A, B and C. c1 is the commit performed after adding line A, c2 is the commit after adding line B and C3 represents the commit after adding line C. Now add line D. This change is available in the working directory and this change is staged but yet to be committed.
Now, if we perform a mixed reset the HEAD of the master branch to point to c1 commit then we will not lose the changes in the working directory. In our case the line with content D will remain intact in the working directory. But if the content D is staged, then the staged content will be lost as mixed mode replaces the staging area while keeping the working directory intact.
Step 1 − Create a repository add File1.txt with content- A, commit the changes as shown
$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo $ git init Initialized empty Git repository in E:/tut_repo/.git/ $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ echo A>File1.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ cat File1.txt A $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git add . $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git commit -m 'A' [master (root-commit) f12b5e8] A 1 file changed, 1 insertion(+) create mode 100644 File1.txt
Step 2 − Do 2 more commits with contents B and C as shown in the above diagram
$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ echo B>>File1.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ cat File1.txt A B $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git add . $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git commit -m 'B' [master a704cbd] B 1 file changed, 1 insertion(+) $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ echo c>>File1.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ cat File1.txt A B c $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git add . $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git commit -m 'c' [master 31aa99f] c 1 file changed, 1 insertion(+) $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git log --oneline 31aa99f (HEAD -> master) c a704cbd B f12b5e8 A
Step 3 − Make a change in the working directory to add content D and stage the changes.
$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ echo D>>File1.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ cat File1.txt A B C D $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git add . $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git status -s M File1.txt
Step 4 − Now let’s mixed reset the HEAD two commits back HEAD~2, which is our first commit. When we do this type of reset git will replace the staging area only. So, the current changes in the file present in the working directory is unaffected. The file will contain all four lines with contents A,B,C,D
$ git reset --mixed HEAD~2 Unstaged changes after reset: M File1.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git status -s M File1.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ cat File1.txt A B c D $ git diff diff --git a/File1.txt b/File1.txt index f70f10e..b9b94a9 100644 --- a/File1.txt +++ b/File1.txt @@ -1 +1,4 @@ A +B +c +D
After performing a mixed reset, the changes performed in the working directory are intact. The file will contain all four lines. However, the changes in staging area will be replaced by the snapshot of the contents of the first commit - Content A.
- Related Articles
- Explain hard reset with an example in Git
- Explain soft reset with an example in Git
- Explain how reset command works in Git
- How to undo a faulty merge with reset command in Git?
- Explain 3NF with an example in DBMS
- Explain BCNF with an example in DBMS
- Explain trial balance with an example
- Explain asynchronous functions in JavaScript with an example
- Explain about 2NF with an example in DBMS
- Explain rebasing in Git
- Explain Deep cloning an object in JavaScript with an example.
- Is RowSet Scrollable? Explain with an example?
- Explain simultaneous linear equations with an example.
- What is Symbiosis? Explain with an example.
- What is heat? Explain with an example.
