2014-08-19 2 views
2

Я пытаюсь удалить, а не revert, последние 2 фиксируются на ветке разработки моего Git repo. Комиты не были сдвинуты.Удалить последние 2 коммита (не нажал) в Git, сохраняя изменения

Как я могу это сделать, не теряя изменений?

+1

Вы хотите удалить коммиты, не теряя их? Куда вы хотите, чтобы они ушли? –

ответ

7

На разработках отрасли, вы будете использовать

git reset HEAD~2 

Это приведет к сбросу головного указателя на коммят 2 до вашего тока без потери изменений.

Вот выдержка из справки:

git reset [-q] [<tree-ish>] [--] <paths>... 
     This form resets the index entries for all <paths> to their state 
     at <tree-ish>. (It does not affect the working tree, nor the 
     current branch.) 

    --mixed 
     Resets the index but not the working tree (i.e., the changed 
     files are preserved but not marked for commit) and reports what 
     has not been updated. This is the default action. 

Таким образом, только сбрасывает индекс, а не дерево. Изменения ваших файлов сохраняются и не добавляются в индекс. Если вы хотите, используйте --soft флаг:

--soft 
     Does not touch the index file nor the working tree at all (but 
     resets the head to <commit>, just like all modes do). This 
     leaves all your changed files "Changes to be committed", as git 
     status would put it. 
+0

@martin, просто любопытно здесь, но разве вам не нужен флаг * - soft *? – mTorres

+0

Не знаю, почему это было опущено. BTw, вы можете добавить небольшое объяснение, чтобы вернуть голосование. –

+1

@mTorres С '--soft', изменения будут в стадии, тогда как в этом случае изменения будут внесены в локальную модификацию. Оба могут использоваться, исходя из требований OP. –

1

Я думаю, что вы хотите сделать, это сквош последние 2 фиксаций. Вы можете сделать это путем интерактивной перезагрузки.

git rebase -i HEAD~3

, а затем отметьте последние 2 фиксаций как f (FixUp) или s (сквош) соответственно.

Вот учебник по interactive rebasing

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