Подтвердить что ты не робот

"Не указано 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 оценивается.

4b9b3361

Ответ 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