"Не указано commit и merge.defaultToUpstream не установлено"
Как новый пользователь git, являющийся экспертом в SVN и CVS, я изо всех сил стараюсь получить самые основные функции git.
Я использую общий репо на сайте assemblyla.com
Я создал локальный клон и добавил файл:
$ git clone repository-url
$ echo "hello" > ha.txt
$ git add -A
$ git commit -a -m "haha"
$ git push
ПРИМЕЧАНИЕ: на данный момент я получил ссылку "Нет ссылок общего доступа и ничего не указано, ничего не делает".
Через несколько часов googling, я нашел решение было набрать это
$ git push origin master
Затем я перешел на другой компьютер, изменил файл и зафиксировал его (удивительно, что мне не нужно было создавать магию происхождения git).
Затем я вернулся на главный компьютер, изменил его снова, чтобы я мог видеть, как работает слияние.
$ git fetch
$ git merge
Теперь я получаю сообщение об ошибке:
фатальный: не указано commit, а merge.defaultToUpstream не установлен.
Глядя на страницу man для "git merge", вы должны указать что-то вроде этого:
$ git merge [< commit >..]
Проблема в том, что я не могу понять, что означает < commit >
, и что это должно быть. Например. должен ли он быть файлом, репо, сообщением, версией?
Я не создал ветку - я просто работаю над "головой" или мастером, поскольку, как мне кажется, git вызывает его
К сожалению, Google не очень помогает в этом. Кажется, что страницы-мужчины ожидают, что вы знаете, что такое < refspec >
, < commit >
и origin
.
Любая помощь по этой проблеме noob оценивается.
Ответы
Ответ 1
Обычно вы не вызываете git merge
без аргументов (по крайней мере, я не знаю, кто это делает). Если вы хотите, чтобы merge
по умолчанию привязывался к ветки отслеживания, вам нужно установить merge.defaultToUpstream
в true: git config merge.defaultToUpstream true
. В этом случае ветвь master
должна отслеживать origin/master
: git branch --set-upstream master origin/master
. Это делается автоматически, если origin/master
уже присутствовал при клонировании.
Лично я делаю git fetch
, а затем git merge origin/master
или git pull
, если у меня нет локальных коммитов.
Изменить: Поскольку VonC упоминает merge.defaultToUpstream
по умолчанию true
с Git 2.0.
Ответ 2
Примечание: если ветвь master
уже отслеживает origin/master
(вы можете видеть, что с git branch -avvv
или длинным псевдонимом), тогда git merge
больше не будет отображаться:
fatal: No commit specified and merge.defaultToUpstream not set.
Следующий Git 2.à.x(Q3 2014) удалит это сообщение об ошибке:
см. зафиксировать a01f7f2 Фелипе Контрерас (felipec
):
merge
: включить defaulttoupstream
по умолчанию
Нет смысла в этом:
% git merge
fatal: No commit specified and merge.defaultToUpstream not set.
Мы знаем, что наиболее вероятным сценарием является то, что пользователь хочет объединить восходящий поток, а если нет, он может установить merge.defaultToUpstream
в false.
Это означает, что вам больше не понадобится делать:
git config merge.defaultToUpstream true
Ответ 3
Прочитайте Pro Git, это очень хороший способ познакомиться с Git.
Он скажет вам, что ваш merge
, выполненный без создания ветки и без набора ветвей в качестве источника слияния, не имеет смысла.
Он также расскажет вам о разнице между git fetch
и git pull
, что важно.
Извлечение изменений не перемещает вашу ветку, но вытаскивание делает.
Ответ 4
Надеюсь, что это очень необходимые настройки после начальной установки git.
Установите отображение ветвей по умолчанию в качестве глобальной опции,
git config --global merge.defaultToUpstream true