k88hudson / k88hudson/git-flight-rules

I squashed a PR update onto the PR's commit

Open
#288 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
42.6k
Forks
3.2k
PR merge metrics
No merged PRs in 30d

Description

(Parts of this one are implicit in the Flight Rules, but I didn't recognize them.)
Here is how I got into trouble.
1. Open a PR, last commit A. Get feedback requiring lots of fixes.
2. Add new commits B and C, holding first and second rounds of fixes.
3. `git rebase -i` intending to squash C into B, but with literally one extra keystroke squash both C and B into A. Now your local and remote branches each have a single commit, but they are different.
4. Try to push (thinking that locally you have a second commit, holding C squashed into B) and git correctly says you are trying to destroy remote history.

Solution:

1. `git log -1 origin/YOUR_BRANCH_NAME` to recover the hash pr-hash of A you wrote over locally in step 3. above. (Note that the value of pr-hash is in the output of `git reflog`, but it can be hard to identify especially if you've been thrashing around trying to fix things.)
2. `git reset --hard pr-hash` Now you are back to where you were before you started answering PR feedback
3. `git cherry-pick hash-of-B` Add the first round of fixes
4. `git cherry-pick hash-of-C` Add the second round of fixes
5. `git rebase -i` but this time leave B as a pick when you squash C, so you have the original PR plus a single commit holding fixes
6. `git push origin YOUR_BRANCH_NAME`

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.