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 - продолжать работать оттуда.