2015-07-28 3 views
0

The answer here хорошо объясняет, как сквоить последние несколько коммитов после того, как они уже были нажаты, но как насчет того, последние 12 на три группы из четырех? То есть я подтолкнул коммиты 1-12 и хотел бы теперь раздавить их до трех коммитов. Эти три раздавленные коммиты будут содержать оригинальные коммиты 1-6, 7-8 и 9-12 соответственно. Как я могу это сделать?Сквош-группы толкаемых коммитов

Бонусные баллы: как я могу указать новое сообщение фиксации для каждого из трех раздавленных коммитов?

ответ

0

Вы можете раздавить несколько наборов фиксаций сразу:

мерзавец перебазироваться -i HEAD ~ 15

pick 3f3416d T11 - some issue 
pick 23031eb T12 - fix 
pick 8239b70 T13 - improvements 
squash e1e23fd T13 - one more fix 
squash 200c8c6 T13 - last fix 
pick e5b0286 T14 - great feature 
pick d18bf1b T15 - removing unused files 
pick a1b1821 T16 - refactor part 1. 
squash dd090dc T16 - refactor part 2. 
squash d87db6b T16 - refactor part 3. 
pick da1dd09 T17 - new model of database 
pick 39b4ace T18 - restfull api 
pick 65521eb T19 - registration form 
squash 8924091 T19 - login form 
pick b44a25c T20 - new super feature 

Во время перебазирования вам будет задан вопрос о новой фиксации сообщений для каждой группы:

1 группа

# This is a combination of 3 commits. 
# The first commit's message is: 
T13 - improvements 

# This is the 2nd commit message: 

T13 - one more fix 

# This is the 3rd commit message: 

T13 - last fix 

# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# Author: Your Name <[email protected]> 
# ... 

2 группа

# This is a combination of 3 commits. 
# The first commit's message is: 
T16 - refactor part 1. 

# This is the 2nd commit message: 

T16 - refactor part 2. 

# This is the 3rd commit message: 

T16 - refactor part 3. 

# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# Author: Your Name <[email protected]> 
# ... 

3 группа

# This is a combination of 2 commits. 
# The first commit's message is: 
T19 - registration form 

# This is the 2nd commit message: 

T19 - login form 

# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# Author: Your Name <[email protected]> 
# ... 
+0

Спасибо, это сделал трюк. Чтобы закончить это, мне пришлось «git push -f». – BoltzmannBrain

+0

'git push -f' необходим, если в диапазоне' 8239b70'-'b44a25c' уже были нажаты. Если вы последний раз нажали фиксацию, это будет 'pick 23031eb T12 - fix', это будет означать, что вы измените только свою локальную историю. КСТАТИ. если вам нужно будет восстановить старый ветвь, вы можете просто использовать старый хеш HEAD, чтобы создать новую ветку 'git checkout b44a25c -b ufff_Its_good_to_have_old_commits_back__branch' – noisy

0

Использование git rebase -i [commit-preceding-ones-you want-to-squash

Марк те, которые вы хотите сквош s (для игры в сквош), и те, которые вы хотите сохранить e для редактирования.

Затем он будет интерактивно раздавать промежуточные и останавливаться на остальных. Затем используйте git commit -a --amend для редактирования сообщения фиксации и git rebase --continue для продолжения.

man git rebase должен помочь.

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