Будут ли у меня проблемы с этим рабочим процессом Git rebase? - PullRequest
1 голос
/ 25 октября 2010

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

Пример истории коммитов

foo               W---X---Y  
                 /         \
master  A---B---C---D---E---Z---F---G
  • Здесь все коммиты в основной ветке, скорее всего, будут перенесены в origin / master.

  • Z - это автоматическая фиксация, выполненная git-merge путем слияния завершенной ветви foo (Y) с текущим мастером (E).

  • После завершения работы с модулем foo мастер сделал некоторые обновления (F и G).


Вот как я хотел бы использовать rebase.

Пришло время внести некоторые изменения в ветку foo, но она не синхронизирована с главной веткой.

  1. Можно ли просто git rebase master включить коммиты F и G в последнюю ветку foo?

  2. Можете ли вы изменить мою диаграмму, чтобы показать, как будет выглядеть моя история коммитов после этого?

1 Ответ

2 голосов
/ 25 октября 2010
  1. Гипотетически, да, это нормально, потому что git обнаружит, что foo уже слился с мастером и перемотает foo до состояния master. Это то же самое что git merge master сделает, а также означает, что foo - это то же самое, что и master.

    Однако, зная, что я бы просто использовал git merge здесь, так как для меня это более логично (вы используете слияние для ускоренной перемотки вперед, у него даже есть флаг --ff-only, если вы хотите убедиться, что вы не делаю реального слияния). Время использовать rebase - это когда вы работаете над foo и у вас там есть несколько коммитов (и вы еще не выдвинули их), и кто-то взял на себя обязательство освоить. Rebase обновит вашу ветку без коммитов слияния.

  2. Я мог бы, но это была бы та же диаграмма, но с foo, теперь указывающим на мастера, или, точнее, на коммит G. Новые коммиты не создаются, поэтому хранилище остается прежним, за исключением перемещения ссылок, которые foo.

PS. Я проверил это локально в поддельном репозитории, чтобы убедиться, что использование rebase в этом сценарии не было тем, что я пробовал раньше.

...