2009-06-10 6 views
35

Я случайно сделал 10 коммитов на ветке «тестирование», когда я намеревался передать их на ветке «master». Другой фиксатор на ветке «тестирование» - это мусор, поэтому я не хочу объединять его с «мастером». Вместо этого я просто хочу воспроизвести последние 10 коммитов на master.Повтор последнего N git совершает на другой ветке

ответ

16
  1. мастер мерзавец фотографии
  2. мерзавец WhatChanged тестирования
  3. GIT-вишневый выбор _________

?

+5

Только fyi-cherry-pick выполнит только одно коммитирование за раз, поэтому вам придется пройти тест на вишневое пикетирование ~ 9, затем тестирование ~ 8 затем ... тестирование. Вот почему я предпочитаю подход к перестановке, предложенный Талджо ... конечно, результат тот же. На самом деле, если вы делаете rebase в интерактивном режиме, git на самом деле будет использовать вишневый поддон под капотом. –

+9

@PatNotz 'git cherry-pick' в настоящее время может выполнять несколько коммитов за раз (например,' git cherry-pick testing ~ 10..testing'). –

+0

Вы никогда не должны использовать 'cherry-pick'. Прочтите [эту статью] (http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html) для получения дополнительной информации. – Tim

80

Ребаза должна это сделать.

git rebase -p --onto master testing~10 testing 

Это скопирует последние десять фиксаций на тестирование, чтобы освоить и сделать, что новое тестирование (старое тестирование будет сирота). Затем вы можете объединить мастер для тестирования в качестве быстрой перемотки вперед.

git checkout master 
git merge testing 
+0

Используется ответ Рона, прежде чем это было опубликовано. –

+8

Возможно, стоит отметить, что это оставляет тестирование в том же месте, что и хозяин, оставляя «мусор» заработанных сирот. Это может быть или не быть хорошо. Другой возможностью будет git checkout master; git reset - жесткое тестирование; git rebase --onto HEAD @ {1} HEAD ~ 10 –

+0

@CharlesBailey Какой git flog вы намереваетесь попасть туда? – Fredrick

2

Как сказано в комментариях rebase -inspired ответ оставляя «мусор» совершает осиротевшего.

Просто используйте простые инструменты:

git checkout master 
git merge testing 
git checkout testing 
git reset --hard HEAD~10 # Go back 10 commits (*1) 
git checkout master 

(* 1) Вы будете только «потерять» коммиты testing ветви, так как вы будете иметь те коммиты в master благодаря merge.

Смежные вопросы