Git: переместите несколько последних коммитов в новую ветку, а затем создайте для них патч - PullRequest
3 голосов
/ 29 сентября 2011

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

 master - O1-O2-O3-X-C1-C2-C3 

стать

master - O1-O2-O3-X  
                   \ new_branch - C1-C2-C3

После этого мне нужно сделать патчи для упомянутых коммитов (C1, C2, C3), чтобы мой друг смог применить их на своем дереве.

Что касается первой части, я полагаю, что я должен сделать что-то вроде:

  1. Создание патчей для x -> C3
  2. Сброс к X
  3. Создать ветку
  4. Применить патчи

Хотя здесь они предполагают, что я мог бы использовать git branch new_branch; git reset --hard X; git checkout new_branch. reset --hard не удалит мои коммиты?

Я не слишком хорош в git, чтобы делать все это без руководства. Спасибо!

1 Ответ

2 голосов
/ 29 сентября 2011

Нет reset --hard не удалит ваши коммиты, так как на них все равно будет ссылаться ветвь 'new_branch'.
(имеется в виду, что при проверке 'new_branch' вы восстановитесь и снова увидите эти коммиты)

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

Более подробную иллюстрацию этой последовательности команд вы можете увидеть в " Что будет делать мастер git checkout + git reset --hard do? ".


Чтобы завершить комментарий Stuart Golodetz , если бы git reset удалил или удалил какой-либо коммит, вы все равно смогли бы получить этот коммит с помощью git reflog.
См:

...