threads / discuss / 5837

Commit to more than one branch at once?

Subject: Commit to more than one branch at once?

## tl;dr

5 messages between Oct 6, 2006 and Oct 6, 2006.

replies: 4people: 4as markdown or json

Stefan Richter· Oct 6, 2006, 18:18 UTC · lore
Hi all,

if I git-cherry-pick a commit from branch A into branch B, this is shown as a difference in "git-log B..A".

Is it possible to commit a change to two or more branches but preserve the identity of the change? IOW, is there an alternative to git-cherry-pick that does not have above mentioned side effect?

-- 
Stefan Richter
-=====-=-==- =-=- --==-
http://arcgraph.de/sr/
Linus Torvalds· Oct 6, 2006, 18:37 UTC · re: Stefan Richter · lore

Re: Commit to more than one branch at once?

On Fri, 6 Oct 2006, Stefan Richter wrote:
Show 7 quoted lines
> 
> if I git-cherry-pick a commit from branch A into branch B, this is shown
> as a difference in "git-log B..A".
> 
> Is it possible to commit a change to two or more branches but preserve
> the identity of the change? IOW, is there an alternative to
> git-cherry-pick that does not have above mentioned side effect?

If you _merge_ the change into both branches, it will be the identical commit in both.

So for example, one thing people can do is to have a separate "fixes" branch that is used for generic bugfixes and, which is merged into all other relevant branches.

		Linus
Sean· Oct 6, 2006, 18:38 UTC · re: Stefan Richter · lore

Re: Commit to more than one branch at once?

On Fri, 06 Oct 2006 20:18:42 +0200 Stefan Richter <stefanr@s5r6.in-berlin.de> wrote:

Show 6 quoted lines
> if I git-cherry-pick a commit from branch A into branch B, this is shown
> as a difference in "git-log B..A".
> 
> Is it possible to commit a change to two or more branches but preserve
> the identity of the change? IOW, is there an alternative to
> git-cherry-pick that does not have above mentioned side effect?
Short answer:
No.
Slightly longer answer:

Only merging the branches will make the commit show up in branch B with the same SHA1 number (or identity) that it had in branch A. This is a fundamental part of Git. The sha1 of each commit is based in part on the sha1 of its parent. Thus it's impossible[1] to copy a commit to another branch (ie. reparent it) without changing its identity.

Sean
[1]  Okay, more or less impossible.. don't ask me do the math.
Stefan Richter· Oct 6, 2006, 19:23 UTC · re: Sean · lore

Re: Commit to more than one branch at once?

Sean wrote:
Show 9 quoted lines
> Only merging the branches will make the commit show up in branch B with
> the same SHA1 number (or identity) that it had in branch A.  This is a
> fundamental part of Git.  The sha1 of each commit is based in part on
> the sha1 of its parent.  Thus it's impossible[1] to copy a commit to
> another branch (ie. reparent it) without changing its identity.
> 
> Sean
> 
> [1]  Okay, more or less impossible.. don't ask me do the math.

Ah, I didn't see the wood for the trees. And this dependence of a commit's identity on the history is also a (or the) reason why mergers are necessarily spliced in as commits with unique identity too...

-- 
Stefan Richter
-=====-=-==- =-=- --==-
http://arcgraph.de/sr/
Petr Baudis· Oct 6, 2006, 18:52 UTC · re: Stefan Richter · lore

Re: Commit to more than one branch at once?

Dear diary, on Fri, Oct 06, 2006 at 08:18:42PM CEST, I got a letter where Stefan Richter <stefanr@s5r6.in-berlin.de> said that...

Show 6 quoted lines
> if I git-cherry-pick a commit from branch A into branch B, this is shown
> as a difference in "git-log B..A".
> 
> Is it possible to commit a change to two or more branches but preserve
> the identity of the change? IOW, is there an alternative to
> git-cherry-pick that does not have above mentioned side effect?
  Philosophical answer:
  This is a point where it shows that Git is snapshot-based, not
changeset-based version control system. So you are not committing a
change, you are committing a snapshot taken after the change. So only
snapshots have identity and if the snapshots differ, they obviously have
different identity. Thus your commit has to have different identity.
Furthermore the commit ties the snapshot with some history (and only
this is the first moment where the concept of the 'change' emerges), and
if you have different history, identity of your commit cannot be
the same either.
-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)

← back to recent threads