I understand that multiple origin fields occur if you do a squash
merge, or if you cherry-pick multiple commits into single commit.
For example:
$ git cherry-pick -n <a1>
$ git cherry-pick <a2>
$ git commit --amend #; to correct commit message
I'm not sure if you plan to automatically add 'origin' field for
rebase, and for interactive rebase...
I think you wanted to use "(B, B^2)", which mean B and second parent
of B. B~2 means grandparent of B in the straight line:
... <--- B~2 <--- B^1 = B^ = B~1 <--- B
/
... <--- B^2 <--/
Besides I very much prefer using 'origin <sha1> <sha2>' (as proposed
in the neighbouring subthread), which would mean together with
'parent <parent>' (assuming that there are no other parents; if they
are it gets even more complicated), that the following is true
<current> ~= <parent> + (<sha2> - <sha1>),
where '<rev1> ~= <rev2>' means that <rev1> is based on <rev2> (perhaps
with some fixups, corrections or the like). Perhaps 'origin' should
be then called 'changeset'.
It would also be easier on implementation to check if
'origin'/'changeset' weak links are not broken, and to get to know
which commits are to be protected against pruning than your proposal
of
origin <"cousin" id> [<mainline = parent number>]
where <mainline> can be omitted if it is 1 (the default).
This can also lead to replacing
origin <b> <a>
origin <c> <b>
by
origin <c> <a>
for squash merge, or squash in rebase interactive.
The above means that it is a 'weak' link, i.e. it is protecting
against pruning (perhaps influenced by some configuration variable),
but it is not considered an error for it to be broken.
Errr... shouldn't objects referenced by 'origin' links be reachable in
order for "cherry-pick" or "revert" to succeed?
On the other hand this leads to the following question: what happens
if you cherry-pick or revert a commit which has its own 'origin'
links?
What do you mean by that?
That is I guess the whole and main reason for 'origin' links to exist,
as having this information in free-form part, i.e. in the commit
message might lead to problems (with parsing and extracting, and
finding spurious links).
Hmmmm... I'm not sure about that.
Unless of course one uses more complex merge strategy, which doesn't
take into account only endpoints (branches to be merged and merge
bases), but is also affected in some by history...
How would git-rebase make use of 'origin' links.
--
Jakub Narebski
Poland
ShadeHawk on #git
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html