Find successor of common ancestor

6 messages, 4 authors, 2016-06-15 · open the first message on its own page

Find successor of common ancestor

From: Enrico Weigelt <hidden>
Date: 2016-06-15 22:49:08

Hi folks,


suppose the following situation:

I've forked some branch A into B, now A and B have evolved 
independently for quite some time into A' and B'. Now I'd like
to rebase B' along A' history line step by step - first on A+1, 
then A+3, ... until A' (that's what I'd call zip-rebase).

For this I need to find out the successor commit A (along the A'
history line). Does anyone know how to do that ?


cu
-- 
----------------------------------------------------------------------
 Enrico Weigelt, metux IT service -- http://www.metux.de/

 phone:  +49 36207 519931  email: weigelt@metux.de
 mobile: +49 151 27565287  icq:   210169427         skype: nekrad666
----------------------------------------------------------------------
 Embedded-Linux / Portierung / Opensource-QM / Verteilte Systeme
----------------------------------------------------------------------

Re: Find successor of common ancestor

From: Santi Béjar <hidden>
Date: 2016-06-15 22:49:08

On Fri, Jul 16, 2010 at 10:29 AM, Enrico Weigelt [off-list ref] wrote:
Hi folks,


suppose the following situation:

I've forked some branch A into B, now A and B have evolved
independently for quite some time into A' and B'. Now I'd like
to rebase B' along A' history line step by step - first on A+1,
then A+3, ... until A' (that's what I'd call zip-rebase).
This is just what "git rebase"  does:

$ git checkout B'
$ git rebase A'

HTH,
Santi

Re: Find successor of common ancestor

From: Enrico Weigelt <hidden>
Date: 2016-06-15 22:49:08

* Santi Béjar [off-list ref] wrote:
On Fri, Jul 16, 2010 at 10:29 AM, Enrico Weigelt [off-list ref] wrote:
quoted
Hi folks,


suppose the following situation:

I've forked some branch A into B, now A and B have evolved
independently for quite some time into A' and B'. Now I'd like
to rebase B' along A' history line step by step - first on A+1,
then A+3, ... until A' (that's what I'd call zip-rebase).
This is just what "git rebase"  does:

$ git checkout B'
$ git rebase A'
Yes, but I need to find out A+1 for my zip-rebase.


cu
-- 
----------------------------------------------------------------------
 Enrico Weigelt, metux IT service -- http://www.metux.de/

 phone:  +49 36207 519931  email: weigelt@metux.de
 mobile: +49 151 27565287  icq:   210169427         skype: nekrad666
----------------------------------------------------------------------
 Embedded-Linux / Portierung / Opensource-QM / Verteilte Systeme
----------------------------------------------------------------------

Re: Find successor of common ancestor

From: Johan Herland <hidden>
Date: 2016-06-15 22:49:08

On Friday 16 July 2010, Enrico Weigelt wrote:
* Santi Béjar [off-list ref] wrote:
quoted
On Fri, Jul 16, 2010 at 10:29 AM, Enrico Weigelt [off-list ref] 
wrote:
quoted
quoted
Hi folks,


suppose the following situation:

I've forked some branch A into B, now A and B have evolved
independently for quite some time into A' and B'. Now I'd like
to rebase B' along A' history line step by step - first on A+1,
then A+3, ... until A' (that's what I'd call zip-rebase).
This is just what "git rebase"  does:

$ git checkout B'
$ git rebase A'
Yes, but I need to find out A+1 for my zip-rebase.
IINM you have the following situation

A0---A1---A2---A3---A4  <-- A'
  \
   B1---B2---B3--B4  <-- B'

...and you want to rebase B' (i.e. B1 through B4), first onto A1, then 
onto A2, the onto A3, and finally onto A4. I have no idea WHY you would 
want to do this (rebasing directly onto A4 (like Santi suggests) is 
much cheaper), but you can certainly coax Git into doing it, anyway.

To list commits A1, A2, A3, A4 (in that order), do:

  git rev-list --reverse B'..A'

You can now loop over the results like this:

  git checkout B'
  for a in $(git rev-list --reverse ..A'); do
      git rebase $a
  done


Hope this helps,

...Johan

-- 
Johan Herland, [off-list ref]
www.herland.net

Re: Find successor of common ancestor

From: Enrico Weigelt <hidden>
Date: 2016-06-15 22:49:08

* Johan Herland [off-list ref] wrote:
IINM you have the following situation

A0---A1---A2---A3---A4  <-- A'
  \
   B1---B2---B3--B4  <-- B'

...and you want to rebase B' (i.e. B1 through B4), first onto A1, then 
onto A2, the onto A3, and finally onto A4. I have no idea WHY you would 
want to do this (rebasing directly onto A4 (like Santi suggests) is 
much cheaper), but you can certainly coax Git into doing it, anyway.
If the branches go off too far, you can easily end up in a lot of 
unresolvable conflicts, while on zip-rebase, there's great chance
that 3way-merge will catch this.
To list commits A1, A2, A3, A4 (in that order), do:

  git rev-list --reverse B'..A'

You can now loop over the results like this:

  git checkout B'
  for a in $(git rev-list --reverse ..A'); do
      git rebase $a
  done
Thx, I'll have a try :)


cu
-- 
----------------------------------------------------------------------
 Enrico Weigelt, metux IT service -- http://www.metux.de/

 phone:  +49 36207 519931  email: weigelt@metux.de
 mobile: +49 151 27565287  icq:   210169427         skype: nekrad666
----------------------------------------------------------------------
 Embedded-Linux / Portierung / Opensource-QM / Verteilte Systeme
----------------------------------------------------------------------

Re: Find successor of common ancestor

From: Avery Pennarun <hidden>
Date: 2016-06-15 22:49:08

On Fri, Jul 16, 2010 at 4:29 AM, Enrico Weigelt [off-list ref] wrote:
I've forked some branch A into B, now A and B have evolved
independently for quite some time into A' and B'. Now I'd like
to rebase B' along A' history line step by step - first on A+1,
then A+3, ... until A' (that's what I'd call zip-rebase).
You haven't *really* explained what you want to do here, but that
doesn't really effect the answer to your actual question...
For this I need to find out the successor commit A (along the A'
history line). Does anyone know how to do that ?
git rev-list --first-parent --reverse $(git merge-base A B)..A

Have fun,

Avery
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help