Мне кажется, что график коммитов, соответствующий вашей ситуации, выглядит следующим образом:
A--B--C--X [develop]
/
o--o--o <-- develop from couple of weeks ago
\
O--O [upstream/develop]
A--B--C
- это ваша двухнедельная работа, а X
- ваша последняя новая функция.
Теперь вы делаете следующее:
1.Отметьте конец двухнедельной работы
$ git branch twoweeks C
Вам необходимо выяснить хеш коммита C
и использовать его в команде, или, в качестве альтернативы, использовать графический обозреватель хранилища для создания ветви для этого коммита.
Ветвь носит временный характер и будет удалена снова в конце, но нам это нужно сейчас, чтобы сохранить двухнедельную работу после выполнения следующего шага.
Результат:
X [develop]
/
A--B--C [twoweeks]
/
o--o--o--O--O [upstream/develop]
2.Переместите новую функцию на
$ git rebase --onto upstream/develop twoweeks develop
Результат:
A--B--C [twoweeks]
/
o--o--o--O--O [upstream/develop]
\
X [develop]
3.Переместите две недели работы на
$ git rebase develop twoweeks
Результат:
o--o--o--O--O [upstream/develop]
\
X [develop]
\
A--B--C [twoweeks]
4.Очистка
Нажмите новую функцию
$ git checkout develop
$ git push
Результат:
o--o--o--O--O--X [upstream/develop] [develop]
\
A--B--C [twoweeks]
Быстрая перемотка вперед в локальной ветви разработкии удалите временную ветку
$ git checkout develop
$ git merge --ff-only twoweeks
(используя --ff-only
в качестве проверки работоспособности, если она не удалась, вы сделали что-то не так)
$ git branch -d twoweeks
Результат:
o--o--o--O--O--X [upstream/develop]
\
A--B--C [develop]
Ссылки