From: Andreas Ericsson <ae@op5.se>
To: Junio C Hamano <junkio@cox.net>
Cc: git@vger.kernel.org, Anton Altaparmakov <aia21@cam.ac.uk>
Subject: Re: Best way to generate a git tree containing only a subset of commits from another tree?
Date: Thu, 23 Mar 2006 04:20:20 +0100 [thread overview]
Message-ID: <442213F4.7040603@op5.se> (raw)
In-Reply-To: <7vu09q54a6.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano wrote:
> Andreas Ericsson <ae@op5.se> writes:
>
>>If you have several topic branches, one for each series of commits,
>>you should be able to do an octopus, like so:
>>
>> $ git pull . <topic-branches-to-publish>
>
>
> Octopus is orthogonal to the issue at hand. Further, I suspect
> that the original repository by Anton is not that cleanly
> organized to have such topic branches -- otherwise the question
> would not have come up to begin with.
>
<sidenote>
I've never understood what orthogonal means in this sense. "at a right
angle" as in flagging for attention or the exactly counter-productive to
what one should use?
</sidenot>
>
>>If you *don't* have several topic branches, or if some commits aren't
>>in topic-branches, you could try something like this (untested,
>>although it shouldn't break anything except the for-linus branch which
>>you can re-create fairly simply)
>>
>> $ for b in <topic-branches-for-linus>; do
>> git checkout $b
>> git rebase for-linus || (git reset --hard; echo $b >> to-merge)
>> done
>
>
>> # now merge what couldn't be rebased
>> $ git checkout for-linus
>> $ git pull . $(cat to-merge)
>
>
> Now you lost me here. When rebase refuses because of
> conflicting changes, you are doing "reset --hard" but I suspect
> you meant "reset --hard ORIG_HEAD" to recover the original head.
I actually meant to reset the for-linus branch, although it would have
to be reset to the state it was before trying the rebase, which means
creating and deleting a tag or some other marker.
I really should install an alco-lock on my MUA.
> Further, I would have expected you to be rebasing on top of
> linus, not for-linus, in case you may already have pulled other
> topic branches into it.
>
Perhaps. I said 'for-linus' to make sure there was an easy way to
recover to state 1 in case of errors. I also rewrote the part above
twice to account for topic branches, so it doesn't make much sense
without the background thinking.
> Your merging those branches that have conflicting changes on top
> of for-linus (that starts out at Linus's tip) is sensible, but
> one word of caution is the history contained within the topic
> branch should be sane. What are you going to do with branches
> that cleanly rebase on top of for-linus?
>
Nothing. 'for-linus' should be updated each time a rebase completes
success-fully, so all the cleanly rebased branches should be in a linear
commit-history on top of each other. Granted, most projects won't have
many topic-branches (or other commit-chains) that rebase on top of each
other like that, but...
>
>>... If your vanilla tree is up-to-date and he pulls
>>from you before pulling from someone else or adding other commits this
>>isn't necessary, although you'll have to do
>>
>> $ git checkout linus; git pull . for-linus
>>
>>to get the vanilla branch up to speed with Linus' HEAD.
>
>
> I am not sure I follow you here.
>
> If Linus hasn't pulled from you, you can either just keep asking
> (you do not have to update for-linus), or rebuild it based on
> more recent Linus's tip.
>
What I meant was that the thing he has in "for-linus" will match what
Linus has in "master" verbatim if Linus doesn't have commits on top of
his "master" that aren't in Anton's "for-linus" (originating from
"linus"). That sentence didn't make sense to me right now.
> $ git fetch linus ;# to update to Linus's tip
> $ git checkout for-linus
> $ git reset --hard linus
>
> If Linus has pulled from you, there is nothing more than the
> above for you to do.
The above command would reset the "for-linus" branch to the state it had
before he applied all his changes. I meant that if he wants to track
Linus' exact HEAD in some branch he could do that by tracking his own if
the changes since merge-base are identical. I was clearly complicating
things by mentioning such a highly conditional exception.
> If you want to rebuild for-linus branch,
> (maybe because you fixed things in some of your topic branches),
> after the above, you could:
>
> $ git pull . this-topic
> $ git pull . that-topic
> ...
>
> This is nicer to Linus _if_ your topics overlap with recent
> changes to the Linus's tree. Otherwise you do not necessarily
> have to rebuild for-linus branch.
>
But it's very nasty in case Linus has already pulled the changes, which
was what I assumed he would have done.
I was most likely a bit diffuse. Everything else seems to be at the
moment, and I like to blend in. ;)
--
Andreas Ericsson andreas.ericsson@op5.se
OP5 AB www.op5.se
Tel: +46 8-230225 Fax: +46 8-230231
next prev parent reply other threads:[~2006-03-23 3:20 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-22 19:28 Best way to generate a git tree containing only a subset of commits from another tree? Anton Altaparmakov
2006-03-22 21:28 ` Radoslaw Szkodzinski
2006-03-23 0:25 ` Petr Baudis
2006-03-23 0:44 ` Andreas Ericsson
2006-03-23 1:38 ` Junio C Hamano
2006-03-23 3:20 ` Andreas Ericsson [this message]
2006-03-23 3:43 ` Linus Torvalds
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=442213F4.7040603@op5.se \
--to=ae@op5.se \
--cc=aia21@cam.ac.uk \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).