How can I rebase a dependent branch on a squashed commit avoiding conflicts?

52 views Asked by At

I have 3 branches

  • feature A (not managed by me)
  • feature B (managed by me)
  • branch main

My B branch is dependant from the branch A and A is already squashed in the main branch.
This graph shows the curret situation.

current git graph

I want to move (rebase) B on the comment corresponding to Squashed A.
I used the command git checkout B && git rebase main to rebase it but I have a lot of conflicts to manage and is not so easy to avoid problems or bugs.

I have find out This post but I have an already squashed branch (not Squashed by me).
How can I have this result with few commands without having so much throubles with few ?

expected result git graph

1

There are 1 answers

2
Gaël J On BEST ANSWER

The question you linked actually contains the answer to your question:

# With start exclusive, end inclusive
# git rebase --onto <where> <current-start> <current-end>

# Presented in a specific way for your case:
# git rebase --onto <squashed-commit> <old-non-squashed-branch-or-revision> <feature-branch>

# That is:
git rebase --onto main A B

This should give you exact same content as B before the operations.

You can double check by creating a tag before doing anything and using git diff <tag-before-ops> B after the operations.


Important: as suggested by @eftshift0, this is assuming that A has not changed and still is in the state before squashing.

If that's not the case, you may use any ref pointing to the state of A before squashing like B~2 in this very example or the commit hash directly.