git-flight-rules icon indicating copy to clipboard operation
git-flight-rules copied to clipboard

I squashed a PR update onto the PR's commit

Open SamPenrose opened this issue 5 years ago • 2 comments

(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

SamPenrose avatar Oct 17 '19 23:10 SamPenrose

Sounds like a good addition, to me! Want to make a PR for this?

RichardLitt avatar Oct 19 '19 12:10 RichardLitt

Ping @SamPenrose

RichardLitt avatar Jun 15 '20 14:06 RichardLitt