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