Flatten history

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

Flatten history

From: Hilco Wijbenga <hidden>
Date: 2016-06-15 22:58:16

Hi all,

I have a (public) "feature" branch that has been kept up-to-date with
"master" by regularly merging master back into it. I would now like to
get all the changes from feature but not any of the commits.
Basically, I want to replay all of feature's commits without creating
those commits.

I thought something like

git cherry-pick -n abcd^..feature

should do the trick (while on master, where abcd is the SHA-1 of the
commit where feature was created) but I get conflicts.

First, why the conflicts? I have done all the merges so cherry-pick
should simply be able to replay them? Second, what is the correct way
of doing this?

Cheers,
Hilco

P.S. The most annoying thing is that I've done this exact thing before
but I can't find what command I used. :-)

Re: Flatten history

From: Felipe Contreras <hidden>
Date: 2016-06-15 22:58:16

On Mon, Jul 29, 2013 at 8:42 PM, Hilco Wijbenga
[off-list ref] wrote:
Hi all,

I have a (public) "feature" branch that has been kept up-to-date with
"master" by regularly merging master back into it. I would now like to
get all the changes from feature but not any of the commits.
Basically, I want to replay all of feature's commits without creating
those commits.

I thought something like

git cherry-pick -n abcd^..feature

should do the trick (while on master, where abcd is the SHA-1 of the
commit where feature was created) but I get conflicts.

First, why the conflicts? I have done all the merges so cherry-pick
should simply be able to replay them? Second, what is the correct way
of doing this?
Perhaps

% git cherry-pick -n --no-merges --right-only --topo-order
--cherry-pick abcd^..feature

-- 
Felipe Contreras

Re: Flatten history

From: Bryan Turner <hidden>
Date: 2016-06-15 22:58:16

On 30 July 2013 13:50, Felipe Contreras [off-list ref] wrote:
On Mon, Jul 29, 2013 at 8:42 PM, Hilco Wijbenga
[off-list ref] wrote:
quoted
Hi all,

I have a (public) "feature" branch that has been kept up-to-date with
"master" by regularly merging master back into it. I would now like to
get all the changes from feature but not any of the commits.
Basically, I want to replay all of feature's commits without creating
those commits.

I thought something like

git cherry-pick -n abcd^..feature

should do the trick (while on master, where abcd is the SHA-1 of the
commit where feature was created) but I get conflicts.

First, why the conflicts? I have done all the merges so cherry-pick
should simply be able to replay them? Second, what is the correct way
of doing this?
Perhaps

% git cherry-pick -n --no-merges --right-only --topo-order
--cherry-pick abcd^..feature

--
Felipe Contreras
Wouldn't git merge --squash do what you're looking for? It seems like
the only way to not get conflicts trying to cherry pick is if you
never had any conflicts while you were merging master into your
feature branch. "Evil" merges, where you actually have to change code,
even if it's just to resolve conflicts, don't tend to replay
correctly.

It seems like this should do it:
% git checkout master
Switched to branch 'master'
% git merge --squash feature
Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested
% git commit

git merge --squash will just apply the changes without creating a
commit. You can then make any final changes you want to and write your
commit message for the feature.

Hope this helps,
Bryan Turner

Re: Flatten history

From: Hilco Wijbenga <hidden>
Date: 2016-06-15 22:58:16

On 29 July 2013 20:50, Felipe Contreras [off-list ref] wrote:
On Mon, Jul 29, 2013 at 8:42 PM, Hilco Wijbenga
[off-list ref] wrote:
quoted
Hi all,

I have a (public) "feature" branch that has been kept up-to-date with
"master" by regularly merging master back into it. I would now like to
get all the changes from feature but not any of the commits.
Basically, I want to replay all of feature's commits without creating
those commits.

I thought something like

git cherry-pick -n abcd^..feature

should do the trick (while on master, where abcd is the SHA-1 of the
commit where feature was created) but I get conflicts.

First, why the conflicts? I have done all the merges so cherry-pick
should simply be able to replay them? Second, what is the correct way
of doing this?
Perhaps

% git cherry-pick -n --no-merges --right-only --topo-order
--cherry-pick abcd^..feature
Thank you for the suggestion but this still gives me conflicts.

Re: Flatten history

From: Hilco Wijbenga <hidden>
Date: 2016-06-15 22:58:16

On 29 July 2013 20:59, Bryan Turner [off-list ref] wrote:
On 30 July 2013 13:50, Felipe Contreras [off-list ref] wrote:
quoted
On Mon, Jul 29, 2013 at 8:42 PM, Hilco Wijbenga
[off-list ref] wrote:
quoted
Hi all,

I have a (public) "feature" branch that has been kept up-to-date with
"master" by regularly merging master back into it. I would now like to
get all the changes from feature but not any of the commits.
Basically, I want to replay all of feature's commits without creating
those commits.

I thought something like

git cherry-pick -n abcd^..feature

should do the trick (while on master, where abcd is the SHA-1 of the
commit where feature was created) but I get conflicts.

First, why the conflicts? I have done all the merges so cherry-pick
should simply be able to replay them? Second, what is the correct way
of doing this?
Perhaps

% git cherry-pick -n --no-merges --right-only --topo-order
--cherry-pick abcd^..feature

--
Felipe Contreras
Wouldn't git merge --squash do what you're looking for? It seems like
the only way to not get conflicts trying to cherry pick is if you
never had any conflicts while you were merging master into your
feature branch. "Evil" merges, where you actually have to change code,
even if it's just to resolve conflicts, don't tend to replay
correctly.

It seems like this should do it:
% git checkout master
Switched to branch 'master'
% git merge --squash feature
Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested
% git commit

git merge --squash will just apply the changes without creating a
commit. You can then make any final changes you want to and write your
commit message for the feature.
Ah, yes "git merge --squash feature" seems to do exactly what I was
looking for. Funny, I thought I did something with rev-list last time
but this --squash is much simpler. :-) Thank you!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help