Git: Как вытащить из другого хранилища, не добавляя коммит слияния - PullRequest
0 голосов
/ 13 ноября 2018

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

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

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вот правильный способ сделать это из 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
0 голосов
/ 13 ноября 2018

Если выполнение в path_to_work_sb02 a 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
  • продолжить работу оттуда.
...