Stefan Beller <[email protected]> writes:
> On Mon, Jun 19, 2017 at 2:52 AM, Patrick Lehmann
> <[email protected]> wrote:
>> Hello Lars,
>>
>> for your questions:
>>> If there are multiple branches with the same hash then your script would
>>> pick the first one. Can you imagine a situation where this would be a
>>> problem?
>>
>> I can't think of a good solution to resolve it automatically. Maybe a script
>> could print that there are multiple possibilities and it choose the first
>> branch in the list.
>>
>>
>>> Plus, you are looking only at local branches. Wouldn't it make sense to
>>> look at remote branches, too?
>>
>> This is also related to restoring tags. If we go this way, we should have
>> this priority list:
>> - local branches
>> - remote branches
>
> For remote branches you would create a local branch of the same name
> (if such a branch would not exist, possibly setting it up to track that remote
> branch)?
>
>> - tags
>
> as said in the other email and similar to remote branches, we'd not want to
> have
> HEAD pointing to them directly but somehow have a local branch.
Let's step back a bit. We detach the HEAD for a good reason, no?
Why is it a good idea to move them back on to a branch picked among
multiple ones that all happen to be pointing at the same commit?
The user may build on a history of a submodule, and then may push
the result out to a particular branch at the other side; that is
when being on a named branch in the submodule becomes useful, but
even then I do not think randomly picking one branch and be on it
is a good thing to do.
I would understand the workflow would go more like so:
- You do something at the superproject (e.g. create a new branch X
from an existing commit and check it out), which results in
submodules' HEADs getting detached at the commits bound to the
superproject's tree.
- Because you want to make changes to both submodules and the
superproject in a consistent way, you'd want to commit changes to
all of these repositories and the push the result out in an
atomic way.
- Hence you tell "Hey, Git, I want all the submodules that I
modified to be on branch X" from the superproject.
- This may succeed in a submodule where X is a new name, or the
current tip of branch X is an ancestor of the detached HEAD.
- This may fail in a submodule where there is branch X that does
not want to move to the detached HEAD's state. In this latter
case, the user needs to deal with the situation (perhaps the
old X is expendable; perhaps the HEAD's commit may need to be
merged to old X; perhaps there are other cases).
though.