Ручное объединение различных коммитов в Git - PullRequest
0 голосов
/ 12 сентября 2011

У меня есть иерархия коммитов в моем локальном репо, и я хочу откатиться до старого коммита и применить некоторые, а не все изменения из коммита HEAD. Как мне это сделать?

Рассмотрим следующий сценарий. В моем репо есть следующие коммиты:

Фиксация 6 (HEAD)
Совершить 5
Совершить 4
Совершить 3
Совершить 2
Совершить 1

Я сбрасываю на коммит 2, как показано ниже

git reset --hard commit2

Теперь я хочу, например, объединить все изменения, примененные вплоть до фиксации 6, но без изменений в фиксации 3 и с некоторыми изменениями в фиксации 5.

Если я сделаю это:

git merge commit6

В итоге у меня все будет в ГОЛОВЕ без той избирательности, которую я преследую.

Как мне достичь цели?

* * 1025 Приветствия AF

Ответы [ 3 ]

3 голосов
/ 12 сентября 2011

Вы можете либо cherrypick совершить, что вы хотите.

Или используйте интерактивный перебазирование, если вы хотите изменить историю на месте (этого никогда не следует делать, если вы уже передали свои изменения):

git rebase -i HEAD~6
# in editor that popped up remove line that corresponds to Commit3, save and quit
2 голосов
/ 12 сентября 2011

В этом случае вы можете использовать ребазинг

Вам не нужно сбрасывать, чтобы совершить 2

В заголовке введите

git rebase -i HEAD~6

И появится интерактивный редактор.

Вы можете управлять тем, как будет выглядеть ваш коммит. например Удалить строку коммита 3

Сохрани это

тогда ваш целевой результат - то, что вы ищете

1 голос
/ 12 сентября 2011

Вы можете создать новую ветку только с выбранными коммитами.

git checkout branch
git checkout -b new_branch

# remove unwanted commits
git rebase -i HEAD~6

# continue with merge

Или вы всегда можете выбрать коммит вишни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...