Git: Как вытащить из удаленного хранилища другой, не добавляя коммит слияния

Это проект, в котором работают несколько разработчиков. Предположим, что вся работа выполняется в основной ветке, и что существует удаленное репо, имеющее следующую историю:

A --- B --- C

Сегодня я пошел дальше и клонировал этот репозиторий в одну из своих песочниц (давайте назовем это work_sb01). Я выполнил некоторую работу и зафиксировал свои изменения локально (может быть только один коммит или несколько коммитов). История Git для этой песочницы выглядит так, как показано ниже:

A --- B --- C --- X

Через два дня я клонирую тот же репозиторий в другую песочницу (назовем это work_sb02). Как и ожидалось, репо HEAD переместился, поэтому история теперь может выглядеть примерно так:

A --- B --- C --- D --- E

Мне нужно быть в состоянии вытащить изменения, которые я сделал в work_sb01 и привести их в work_sb02, В настоящее время я делаю это с помощью следующей команды:

cd <path_to_work_sb02>
git pull <path_to_work_sb01> master

Это выполняет работу, но создает коммит слияния. Теперь у меня есть требование избегать добавления коммитов слияния в журнал проекта Git. Как я могу вытащить изменения из work_sb01 и сделать их самым последним коммитом в истории? Другими словами, местная история для work_sb02 должен выглядеть так, как показано ниже:

A --- B --- C --- D --- E --- X

1 ответ

Вот правильный способ сделать это из work_sb02:

cd <path_to_work_sb02>
git remote add sb01 <path_to_work_sb01> 
git fetch sb01 
git checkout master 
git rebase --onto master master sb01/master

Если делать в path_to_work_sb02 pull --rebase path_to_work_sb01 не дает вам правильный порядок, вы могли бы... рассмотреть возможность сделать обратное:

  • pull --rebase path_to_work_sb02 от path_to_work_sb01 дорожка.
  • переименовать path_to_work_sb01 как path_to_work_sb02
  • смени свой пульт origin URL
  • продолжать работать оттуда.
Другие вопросы по тегам