git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: interactive rebase results across shared histories

From
MNMoritz Neeb <lists@moritzneeb.de>
Date
Feb 21, 2016, 02:12 UTC
Message-ID
<56C91D21.90306@moritzneeb.de>
In-Reply-To
<87io1j6laz.fsf@gmail.com>
Hi Seb,
On 02/20/2016 11:58 PM, Seb wrote:
Show 8 quoted lines
> Hello,
> 
> I've recently learnt how to consolidate and clean up the master branch's
> commit history.  I've squashed/fixuped many commits thinking these would
> propagate to the children branches with whom it shares the earlier parts
> of the its history.  However, this is not the case; switching to the
> child branch still shows the non-rebased (dirty) commit history from
> master.  Am I misunderstanding something with this?

I am not sure what you meand by "child branch". If I understand corretly, you have something like:

            A---B---C topic
           /
      D---E---F---G master
then you merge the topic:
            A---B---C topic
           /         \
      D---E---F---G---H master

and then you do something like "git rebase -i E" to linearize history and maybe squash some commits, to result in something like:

      D---E---F---G---AB'---C' master
Where AB' is a squashed commit containing the changes from A and B.

Now, your misunderstanding may be in the fact of "what happened to the topic branch?". Because looking at the whole graph, you have something like this:

          A---B---C topic
         /
    D---E---F---G---AB'---C' master

where it is important to note, that the topic still points to C. Which is totally correct, because you did not say anything about topic after the merge. If you wanted to continue working on the topic branch, then maybe a non-interactive rebasing, like described in the rebase manpage would be something you might want to do before rebasing. E.g., from the start doing "git rebase master topic" leads to:

                     A'--B'--C' topic
                    /
       D---E---F---G master
and then you could squash your commits as you like with "git rebase -i G":
	      AB'--C' topic
             /
D---E---F---G master

and maybe fast-forward merging master with "git merge master", then you have both branches pointing to C':

    D---E---F---G---AB'--C' topic,master
The same could've been reached in one step via "git rebase -i master topic".

Maybe, to get a better understanding, you could use visualization tool like "tig" or "gitk" to observe what happens to your commits (hashes) and branches (labels) and just play around with some of these operations.

Previous: SebNext: Seb
Message 2 of 13 in “interactive rebase results across shared histories”
  1. SebFeb 20, 2016
  2. Moritz NeebFeb 21, 2016
  3. SebFeb 21, 2016
  4. Eric SunshineFeb 21, 2016
  5. SebFeb 22, 2016
  6. DavidFeb 22, 2016
  7. SebFeb 23, 2016
  8. Moritz NeebFeb 23, 2016
  9. Kevin DaudtFeb 23, 2016
  10. SebFeb 23, 2016
  11. DavidFeb 26, 2016
  12. SebFeb 26, 2016
  13. Stepan KasalFeb 26, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.