git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* put THEIR commits AFTER my commits with a single rebase command
@ 2013-04-18  5:18 Ilya Basin
  2013-04-18  6:21 ` Johan Herland
  2013-04-18  6:31 ` Johannes Sixt
  0 siblings, 2 replies; 6+ messages in thread
From: Ilya Basin @ 2013-04-18  5:18 UTC (permalink / raw)
  To: git

I asked this on stackoverflow, but no reply.
http://stackoverflow.com/questions/15971244/git-put-their-commits-after-my-commits-with-a-single-rebase-command

Suppose master and origin/master diverged.
I'm on master and I want to put the commits from origin/master after my commits and then push --force.  

         A---B---C origin/master
        /
    D---E---F---G *master

desired result:

         A---B---C origin/master
        /
    D---E---F---G---A'---B'---C' *master



Variant 1:

    git branch -f tmp
    git reset --hard origin/master
    git rebase tmp

This variant is bad, because 'git reset --hard' checks out some files and 'git rebase' rewrites them again before applying commits. It's a redundant job.  
Variant 2:

    git branch -f tmp origin/master
    git rebase --onto master master tmp
    git branch -f master
    git checkout master

Too many commands. I want to do this with just one command. And I want
to stay be on branch master in case of rebase conflicts.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: put THEIR commits AFTER my commits with a single rebase command
  2013-04-18  5:18 put THEIR commits AFTER my commits with a single rebase command Ilya Basin
@ 2013-04-18  6:21 ` Johan Herland
  2013-04-18  6:59   ` Re[2]: " Ilya Basin
  2013-04-18  6:31 ` Johannes Sixt
  1 sibling, 1 reply; 6+ messages in thread
From: Johan Herland @ 2013-04-18  6:21 UTC (permalink / raw)
  To: Ilya Basin; +Cc: Git mailing list

On Thu, Apr 18, 2013 at 7:18 AM, Ilya Basin <basinilya@gmail.com> wrote:
> I asked this on stackoverflow, but no reply.
> http://stackoverflow.com/questions/15971244/git-put-their-commits-after-my-commits-with-a-single-rebase-command
>
> Suppose master and origin/master diverged.
> I'm on master and I want to put the commits from origin/master after my commits and then push --force.
>
>          A---B---C origin/master
>         /
>     D---E---F---G *master
>
> desired result:
>
>          A---B---C origin/master
>         /
>     D---E---F---G---A'---B'---C' *master

Note that if other people are working on top of origin/master, then
what you are proposing is quite rude to them, since they must now
manually rebase their own work on top of your rebased history.
Rewriting public history is generally considered evil.

> Variant 1:
>
>     git branch -f tmp
>     git reset --hard origin/master
>     git rebase tmp
>
> This variant is bad, because 'git reset --hard' checks out some files and 'git rebase' rewrites them again before applying commits. It's a redundant job.
> Variant 2:
>
>     git branch -f tmp origin/master
>     git rebase --onto master master tmp
>     git branch -f master
>     git checkout master
>
> Too many commands. I want to do this with just one command. And I want
> to stay be on branch master in case of rebase conflicts.

git cherry-pick master..origin/master


...Johan

--
Johan Herland, <johan@herland.net>
www.herland.net

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: put THEIR commits AFTER my commits with a single rebase command
  2013-04-18  5:18 put THEIR commits AFTER my commits with a single rebase command Ilya Basin
  2013-04-18  6:21 ` Johan Herland
@ 2013-04-18  6:31 ` Johannes Sixt
  2013-04-18  8:33   ` Re[2]: " Ilya Basin
  1 sibling, 1 reply; 6+ messages in thread
From: Johannes Sixt @ 2013-04-18  6:31 UTC (permalink / raw)
  To: Ilya Basin; +Cc: git

Am 4/18/2013 7:18, schrieb Ilya Basin:
> desired result:
> 
>          A---B---C origin/master
>         /
>     D---E---F---G---A'---B'---C' *master
> 
> 
> 
> Variant 1:
> 
>     git branch -f tmp
>     git reset --hard origin/master
>     git rebase tmp

Variant 1a:

   git reset --hard origin/master
   git rebase @{1}

> 
> This variant is bad, because 'git reset --hard' checks out some files
> and 'git rebase' rewrites them again before applying commits. It's a
redundant job.
>
> Variant 2:
> 
>     git branch -f tmp origin/master
>     git rebase --onto master master tmp
>     git branch -f master
>     git checkout master
> 
> Too many commands. I want to do this with just one command. And I want
> to stay be on branch master in case of rebase conflicts.

Perhaps this one:

   git merge origin/master
   git rebase ORIG_HEAD

-- Hannes

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re[2]: put THEIR commits AFTER my commits with a single rebase command
  2013-04-18  6:21 ` Johan Herland
@ 2013-04-18  6:59   ` Ilya Basin
  0 siblings, 0 replies; 6+ messages in thread
From: Ilya Basin @ 2013-04-18  6:59 UTC (permalink / raw)
  To: Johan Herland; +Cc: Git mailing list

JH> git cherry-pick master..origin/master

Thanks Johan.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re[2]: put THEIR commits AFTER my commits with a single rebase command
  2013-04-18  6:31 ` Johannes Sixt
@ 2013-04-18  8:33   ` Ilya Basin
  2013-04-18 11:03     ` Johannes Sixt
  0 siblings, 1 reply; 6+ messages in thread
From: Ilya Basin @ 2013-04-18  8:33 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: git


JS> Perhaps this one:

JS>    git merge origin/master
JS>    git rebase ORIG_HEAD

JS> -- Hannes

Wouldn't I have to resolve conflicts twice?


BTW, during the rebase, can I tell git to rewrite a different branch
upon rebase success or abort?

    git branch -f tmp origin/master
    git rebase --onto master master tmp
    if [ $? -ne 0 ]; then
       # modify some file in .git/ ?
    else
        git branch -f master
        git checkout master
    fi



-- 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: put THEIR commits AFTER my commits with a single rebase command
  2013-04-18  8:33   ` Re[2]: " Ilya Basin
@ 2013-04-18 11:03     ` Johannes Sixt
  0 siblings, 0 replies; 6+ messages in thread
From: Johannes Sixt @ 2013-04-18 11:03 UTC (permalink / raw)
  To: Ilya Basin; +Cc: git

Am 4/18/2013 10:33, schrieb Ilya Basin:
> 
> JS> Perhaps this one:
> 
> JS>    git merge origin/master
> JS>    git rebase ORIG_HEAD
> 
> JS> -- Hannes
> 
> Wouldn't I have to resolve conflicts twice?

Yes. But you did run 'git config rerere.enabled true' when you started
with git, didn't you? ;-)

Anyway, Johan's idea to use git cherry-pick is much better.

> BTW, during the rebase, can I tell git to rewrite a different branch
> upon rebase success or abort?
> 
>     git branch -f tmp origin/master
>     git rebase --onto master master tmp
>     if [ $? -ne 0 ]; then
>        # modify some file in .git/ ?

What do you expect here? Failure of git rebase means that it is not
complete, yet. So far, nothing has been rewritten. So what? Perhaps you mean:
	# never mind
	git rebase --abort

>     else
>         git branch -f master
>         git checkout master
>     fi

-- Hannes

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-04-18 11:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-18  5:18 put THEIR commits AFTER my commits with a single rebase command Ilya Basin
2013-04-18  6:21 ` Johan Herland
2013-04-18  6:59   ` Re[2]: " Ilya Basin
2013-04-18  6:31 ` Johannes Sixt
2013-04-18  8:33   ` Re[2]: " Ilya Basin
2013-04-18 11:03     ` Johannes Sixt

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).