git-flight-rules
git-flight-rules copied to clipboard
I squashed a PR update onto the PR's commit
trafficstars
(Parts of this one are implicit in the Flight Rules, but I didn't recognize them.) Here is how I got into trouble.
- Open a PR, last commit A. Get feedback requiring lots of fixes.
- Add new commits B and C, holding first and second rounds of fixes.
git rebase -iintending 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.- 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:
git log -1 origin/YOUR_BRANCH_NAMEto 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 ofgit reflog, but it can be hard to identify especially if you've been thrashing around trying to fix things.)git reset --hard pr-hashNow you are back to where you were before you started answering PR feedbackgit cherry-pick hash-of-BAdd the first round of fixesgit cherry-pick hash-of-CAdd the second round of fixesgit rebase -ibut this time leave B as a pick when you squash C, so you have the original PR plus a single commit holding fixesgit push origin YOUR_BRANCH_NAME
Sounds like a good addition, to me! Want to make a PR for this?
Ping @SamPenrose