Saved by `git fetch` and GitHub
Duodu Randy 💻🐍

Duodu Randy 💻🐍 @iam_randyduodu

About: A Python Developer and Docs-as-Code Expert with experience in building automated technical documentation systems for companies which can be integrated into existing system.

Location:
Accra, Ghana
Joined:
Aug 19, 2021

Saved by `git fetch` and GitHub

Publish Date: Jul 25 '23
0 0

How to Retrieve a Discarded Commit from a Closed Pull Request

Have you ever encountered the heart-stopping moment of accidentally discarding a crucial commit during your development process? I certainly did while working on GitHub. Initially, I wanted to share my experience and knowledge on "How to Retrieve a Discarded Commit from a Closed Pull Request" in this blog post. However, after discovering a powerful solution that saved the day, I knew I had to re-title it to "Saved by git fetch and GitHub".

Objective

In this article, I'll guide you through the steps I took to recover that lost commit, sparing you from future Git stress. So let's dive in and uncover the magic behind git fetch and GitHub's functionality.

A little backstory...☁

Here's what happened: I synced a branch of a forked repository with changes from the main branch of the parent repository. In doing so, I accidentally discarded a crucial commit. Realizing the mistake, I began my quest to recover the commit but made several unsuccessful attempts.

Salvation steps 🏆

Despite the many trial and errors, I eventually found a solution that worked. I discovered the following steps that led to a successful retrieval:

  1. First, I checked the commit history of the pull request (PR) on the parent repository associated with the forked repository. There, I found this entry: "@user123 force-pushed the Test-Feature branch 2 times, most recently from q7a4399 to wa8a5fa". PR commit history
  2. Armed with this information, I clicked on the q7a4399 commit link, which redirected me to the commit page. From there, I clicked the "Browse Files" button in the top-right corner of the GitHub page, leading me to a tree page for commit q7a4399. Commit pageCommit tree page
  3. On the commit page, I copied the fully spelt hexadecimal object name or the full commit ID from the page's URL. The hexadecimal commit ID looked like this: q7a439948dd813bdcdd5b153effca041d197591d.
  4. To retrieve the lost commit, I employed the git fetch command with the following syntax:
git fetch origin +q7a439948dd813bdcdd5b153effca041d197591d:Test-Feature
Enter fullscreen mode Exit fullscreen mode

The command's structure is as follows:
git fetch [<repository> [<refspec>...]]

where:

  • repository: Refers to the Git repository (in this case, "origin" as a shorthand for my remote GitHub repository).
  • refspec: Specifies which refs to fetch and which local refs to update. The format of the parameter is an optional plus "+", followed by the source <src>, followed by a colon ":", and finally, the destination ref <dst>. <src> typically represents a ref, but can also be a fully spelt hexadecimal object name. (E.g. +<src>:<dst> => +q7a439948dd813bdcdd5b153effca041d197591d:Test-Feature)

For more details on the git fetch command, you can refer to its documentation or use the "git fetch --help" command to access the manpage.

By following these steps, I successfully relieved myself from the stress caused by the lost commit.

Conclusion

In conclusion, Git is a powerful tool that requires continuous learning to improve our understanding and expertise. Take the time to explore its capabilities, and you'll find it invaluable in your development workflow.

Comments 0 total

    Add comment