Teach you to retrieve data in git stash data
Introduction | Due to incorrect git commands, he deleted the changes saved in stash. After this sad episode we tried to find a way to restore the work he had done and we did it! First a word of warning: when you're implementing a large feature, break it into small chunks and commit them regularly. Working for long periods of time without committing is not a good habit. Let's demonstrate how to recover accidentally deleted changes from stash. |
In the warehouse I used as an example, there is only one source file "main.c", as shown below:
It has only one commit, "Initial commit":
The first version of this file is:
I will write some code in the file. For this example, I don't need to make any big changes, I just need something to put into stash, so we'll just add one line. The output of "git diff" is as follows:
Now, let's say I want to pull some new changes from the remote repository, without committing my own changes yet. So, I decided to stash it first, wait for the changes in the remote warehouse to be pulled, and then revert my changes to the main branch. I executed the following command to move my changes into stash:
git stash
Use the command "git stash list" to view stash. You can see my changes here:
My code is already in a safe place, and the master branch is currently clean (use the command git status to check). Now I just need to pull the changes from the remote repository and revert my changes to the master branch, which is what I should do.
But I executed the command incorrectly:
git stash drop
It removed the stash instead of executing the following command:
stash pop
This command will apply stash before removing it from the stack. If I execute the command git stash list
again, I can see that I deleted the changes without reverting them from the stack to the master branch. OMG! What to do next?
The good news is: git didn't delete the object containing my changes, it just removed the reference to it. To demonstrate this, I use the command git fsck, which verifies the connection and validity of the objects in the database. This is the output after I performed git fsck on the repository:
Due to the parameter --unreachable, I let git-fsck show all unreachable objects. As you can see, it shows that there are no inaccessible objects. And when I deleted my changes from stash and executed the same command again, I got a different output:
There are now three inaccessible objects. So which one is my change? Actually, I don't know. I need to search each object by executing the command git show.
that's it! The ID number 95ccbd927ad4cd413ee2a28014c81454f4ede82c corresponds to my change. Now that I've found the missing changes, I can restore it. One way is to take this ID and put it into a new branch, or commit it directly. Once you have the ID number of your change object, you can decide the best way to revert the change back to the master branch. For this example, I used git stash to revert the changes to my master branch.
git stash apply 95ccbd927ad4cd413ee2a28014c81454f4ede82c
Another important thing to remember is that git will periodically execute its garbage collection program (gc). After it is executed, you can no longer see inaccessible objects using git fsck.
The above is the detailed content of Teach you to retrieve data in git stash data. For more information, please follow other related articles on the PHP Chinese website!

In this sixth installment of our Awk series, we will explore the next command, which is instrumental in enhancing the efficiency of your script executions by skipping redundant processing steps.What is the next Command?The next command in awk instruc

Transferring files in Linux systems is a common task that every system administrator should master, especially when it comes to network transmission between local or remote systems. Linux provides two commonly used tools to accomplish this task: SCP (Secure Replication) and Rsync. Both provide a safe and convenient way to transfer files between local or remote machines. This article will explain in detail how to use SCP and Rsync commands to transfer files, including local and remote file transfers. Understand the scp (Secure Copy Protocol) in Linux scp command is a command line program used to securely copy files and directories between two hosts via SSH (Secure Shell), which means that when files are transferred over the Internet, the number of

One fascinating feature of Linux, in contrast to Windows and Mac OS X, is its support for a variety of desktop environments. This allows desktop users to select the most suitable and fitting desktop environment based on their computing requirements.A

LibreOffice stands out as a robust and open-source office suite, tailored for Linux, Windows, and Mac platforms. It boasts an array of advanced features for handling word documents, spreadsheets, presentations, drawings, calculations, and mathematica

Linux users who manage PDF files have a wide array of programs at their disposal. Specifically, there are numerous specialized PDF tools designed for various functions.For instance, you might opt to install a PDF viewer for reading files or a PDF edi

In the earlier segments of the Awk command series, our focus was primarily on reading input from files. However, what if you need to read input from STDIN?In Part 7 of the Awk series, we will explore several examples where you can use the output of o

Clifm stands out as a distinctive and incredibly swift command-line file manager, designed on the foundation of a shell-like interface. This means that users can engage with their file system using commands they are already familiar with.The choice o

If you prefer not to perform a new installation of Linux Mint 22 Wilma, you have the option to upgrade from a previous version.In this guide, we will detail the process to upgrade from Linux Mint 21.3 (the most recent minor release of the 21.x series


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Linux new version
SublimeText3 Linux latest version

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Zend Studio 13.0.1
Powerful PHP integrated development environment

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft
