Есть ли способ узнать, что я полностью зеркалирую ветку восходящего потока?

В моей группе действует политика, согласно которой только один человек может изменять ветку master на GitHub. Он гуру Git и занимается сложным управлением коммитами на origin/master.

Другим было сказано использовать (после СТРАХОВАНИЯ я нахожусь в главной ветке):

git pull --rebase origin master

чтобы убедиться, что мы идеально отражаем origin. Однако я знаю, что иногда забываю --rebase. Теперь мне интересно, мой локальный master не синхронизирован с локальным origin?

Выполняется ли указанная выше команда только в том случае, если они синхронизированы? Если нет, что я могу сделать?


person David H    schedule 30.03.2018    source источник
comment
Я рекомендую полностью избегать git pull. Запустите git fetch, затем посмотрите, что получено, и решите, что вы хотите сделать. В данном случае это всегда git rebase, что упрощает принятие решения и позволяет использовать git pull напрямую, но, на мой взгляд, это своего рода плохая привычка: это все равно, что предполагать, что ваше ружье никогда не заряжено, и использовать спусковой крючок, чтобы взять его. из кобуры. :-)   -  person torek    schedule 31.03.2018
comment
Итак, вы никогда не обязуетесь заниматься мастерингом на местном уровне?   -  person Yuri G.    schedule 31.03.2018
comment
Правильно - локально мастер должен быть доступен только для чтения   -  person David H    schedule 31.03.2018
comment
@DavidH рад снова видеть вас (с IP-адреса iOS), но на этот раз с помощью git rebase: D. Не забудьте проверить мой вопрос stackoverflow.com/questions/49894883/   -  person Qiulang    schedule 18.04.2018


Ответы (2)


Проверка обновлений

Самый простой способ узнать, обновлена ​​ли ваша локальная ветка с удаленным аналогом, - использовать git fetch, за которым следует git status.

git fetch обновляет информацию об удаленных ветвях, но не обновляет их локальные аналоги.

git status показывает информацию о текущем состоянии ветки и рабочего дерева. Если он обновлен с пульта дистанционного управления, он должен сказать

On branch x
Your branch is up to date with 'origin/x'.

где x будет master в вашем конкретном случае.

С другой стороны, если ваша ветка устарела, например, потому что вы добавили одну фиксацию, она скажет

On branch x
Your branch is ahead of 'origin/x' by 1 commit.

Что делает git pull --rebase

git pull, на самом деле является ярлыком для git fetch, за которым следует _ 12_. С модификатором --rebase вместо git merge используется git rebase.

Короче говоря, git merge и git rebase оба применяют изменения от одной ветки к другой, но они различаются способом, которым они это делают. Возможно, вы захотите проверить документацию или следующие ответы SO для получения дополнительной информации: git merge , git rebase.

person Wiktor Czajkowski    schedule 30.03.2018

Если вы не укажете --rebase, вы объедините ветвь master восходящего потока origin (т.е. origin/master) в текущую отмеченную ветку. Если вы укажете --rebase, ваши изменения будут воспроизведены поверх origin/master. Конечный результат должен быть идентичным.

Если вы часто забываете указывать --rebase, вы также можете включить его с помощью параметра конфигурации: git config pull.rebase true. Если этот параметр включен, каждый раз, когда вы вытягиваете, ваши изменения будут обновляться, а не объединяться.


Чтобы ответить на заголовок вашего вопроса: запустите git log HEAD..origin/master (после синхронизации историй с git fetch). Если он не показывает никаких коммитов, ваша работа обновлена ​​с учетом происхождения. Если он показывает коммиты, значит в origin/master есть коммиты, которые еще не интегрированы в вашу локальную рабочую копию.

person knittl    schedule 30.03.2018