git merge origin - всегда по умолчанию используется отслеживание?

89
7

Скажем, у меня есть скрипт, который делает что-то вроде:

git fetch origin

git branch | while read b; do
git checkout $b
git merge origin
done

мой вопрос: будет ли git всегда знать, что делать с командой git merge origin, если предположить, что все ветки отслеживаются удаленным?

спросил(а) 2018-09-01T02:53:00+03:00 2 года назад
1
Решение
57

... будет git всегда знать, что делать с командой git merge origin...

Гит всегда будет что-то делать. Наверное, не то, что вы хотите! Вы, вероятно, хотите:

git checkout $b
git merge $b@{upstream}

что не так.

Когда Git разрешает строку, такую как master или origin/develop или MERGE_HEAD на идентификатор хэша фиксации, он следует правилам, описанным в документации gitrevisions. В частности, используется шесть этапов. Первый проверяет файл в каталоге .git. Третий шаг проверяет имя тега, а четвертый проверяет имя ветки.

Следуйте приведенной выше ссылке и изучите каждый из шести шагов, перечисленных в разделе " УКАЗАНИЕ РЕВИЗИОНОВ ", и подумайте о том, что произойдет, когда Git пробует origin на каждом шаге. Например, на шаге 1 Git проверит файл с именем .git/origin, который (предположительно) не будет существовать. Обратите внимание, что шаг 6, применяемый к origin литерала, проверяет ваши refs/remotes/origin/HEAD. Теперь запустите:

$ git rev-parse refs/remotes/origin/HEAD

чтобы узнать, какой хэш-код вы получите. Это говорит о том, как будет происходить git merge origin.

(Чтобы узнать, как изменить идентификатор хэша, связанный с refs/remotes/origin/HEAD, см. git remote документацию git remote, в частности подзаголовок set-head но вместо этого используйте нотацию @{upstream}.)

ответил(а) 2018-09-01T03:27:00+03:00 2 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема