Вопрос по git – Последствия забвения косой черты в «git merge origin / branch»

4

вЭта статьяЯ пытался привыкнуть к явной загрузке и слиянию при обновлении моей рабочей копии. Однако сегодня я сделал опечатку при выдаче команды:

$ git fetch origin
$ git merge origin asdf

Обратите внимание, что я использовал пробел вместо косой черты в команде слияния. Поскольку это, казалось, имело желаемый эффект в любом случае, я не замечал, пока я уже не выдвинул, что это добавило странную формулировку коммита в журнал:

commit 65f0037bed926c338cb95e7437e7f7f407028d9f
Author: Me <[email protected]>
Date:   Mon May 14 09:36:44 2012 -0700

    Merge branch 'asdf', remote-tracking branch 'origin' into asdf

Теперь мне интересно, было ли это на самом деле негативными побочными эффектами. Похоже, что он рассматривал аргументы как две отдельные спецификации ветви для слияния с текущей веткой, и это "origin" quot; неявно расширился бы до «origin / asdf» & # X2014; что я и хотел. На данный момент я понятия не имею, почему это даже разрешило бы «ветвь слияния» asdf & apos; в asdf & quot; происходить.

Было ли это просто смущающим бездействием? Или я ввел потенциально проблемную конструкцию в историю своего хранилища?

РЕДАКТИРОВАТЬ: выходgit cat-file commit 65f0037b

tree 74ed9ead4b82e4e56bd5656ee10375f8f0fcb60d
parent 3bc2a37031a4a391aa4da64c22e3f55148cd23e2
author Me <[email protected]> 1337013404 -0700
committer Me <[email protected]> 1337013404 -0700

    Merge branch 'asdf', remote-tracking branch 'origin' into asdf
похоже на это?stackoverflow.com/questions/2602546/… bluesman
Если вы намеренно не установили очень короткое время обрезки и не установили gc 'в последний час, коммит 65f0037b должен все еще существовать ... не так уж важно, что это больше важно. CB Bailey
Ты можешь сделатьgit cat-file commit 65f0037b? Возможно, вы выполнили слияние с осьминогом, или один из коммитов может быть быстро переадресован, и вы, возможно, получили то, что хотели, с вводящим в заблуждение сообщением о коммите. Трудно сказать по описанию коммита. CB Bailey
@Neverender: он говорит мне, что у него есть только один родитель (который я не могу увидеть из журнала), что означает, что это не было истинным слиянием, это просто обычный коммит с вводящим в заблуждение сообщением о коммите. Может случиться так, что в коммите не было реальных изменений или, что еще более тревожно, родительская информация была потеряна. Возможно, ваш местный клон был в курсе, когда вы это сделали. CB Bailey
@Charles Bailey: К сожалению, примерно через 45 минут после того, как я задал этот вопрос, я решил ошибиться с осторожностью, и сделать hard reset + повторить сомнительное слияние. Я понимаю, что может сделать этот вопрос нецелесообразным, чтобы ответить окончательно, за что я прошу прощения. Тем не менее, ответ жаворонков дал, в связи с тем, что я знаю, что ветка по умолчанию на самом деле была "origin / asdf" приводит меня к мысли, что слияние действительно по совпадению (и неловко) выполнило то, что я изначально планировал. Neverender

Ваш Ответ

1   ответ
4

merge команда:

   git merge [-n] [--stat] [--no-commit] [--squash]
           [-s <strategy>] [-X <strategy-option>]
           [--[no-]rerere-autoupdate] [-m <msg>] [<commit>...]

Итак, отсутствуют все варианты,merge принимает список коммитов. Если вы уже в филиалеasdf и вы печатаете:

git merge asdf

... это не так: объединение ветви с самим собой означает, что делать нечего. Если вы введете это:

git merge origin

затемgit будет искать ветку по умолчанию, связанную с удаленным именемorigin, На выходеbranch -a:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

remotes/origin/HEAD указывает на ветку по умолчанию, поэтому:

git merge origin

эквивалентно:

git merge origin/master

Таким образом, предполагая, что ветка по умолчанию на вашем пультеmaster, когда вы набрали:

git merge origin asdf

Ты получил:

git merge origin/master

Если ветка по умолчанию былаasdf, ты получил:

git merge origin/asdf
Не объясняет ветку удаленного отслеживания
Да, я могу с уверенностью сказать, что remotes / origin / HEAD действительно указывают на origin / asdf в этом примере. Я полагаю, это означает, что моя первоначальная оценка (случайное получение желаемого результата + неуклюжее отсутствие) была точной. Neverender

Похожие вопросы