2013-09-06 2 views
2

У меня есть локальный и соответствующий ему рефит github. У меня есть некоторые коммиты какУдаление фиксации между другими коммитами

A <- B <- C <- D 

A является последним.

Это ситуация на обоих репозиториях. Я хочу удалить commit C, как будто этого не произошло.

Так оно и должно быть, как на git log

A <- B <- D 

на обоих РЕПО.

Я пробовал git reset --soft <sha-commit-C> и теперь застрял. Я не вижу A, B. Прежде чем делать какие-либо дальнейшие шаги, я хочу быть полностью уверен, что я знаю, что делаю.

git reflog дает мне:

git reflog 
73ea54d [email protected]{0}: reset: moving to 73ea54d8 
a594699 [email protected]{1}: rebase -i (finish): returning to refs/heads/unique_ptr_release 
a594699 [email protected]{2}: checkout: moving from unique_ptr_release to a594699fb6f7d85bc8 
a594699 [email protected]{3}: checkout: moving from unique_ptr_release to unique_ptr_release 
a594699 [email protected]{4}: commit (merge): Merge branch 'master' into unique_ptr_release 

[email protected]{4} является то, что моя голова была до reset --soft команды.

Как мне выйти из этой ситуации?

+0

скопируйте/сохраните папку '.git' перед выполнением дальнейших экспериментов. – mnagel

+0

спасибо. просто сделал это. –

+0

вы, возможно, можете вишнево-вычеркнуть недостающие коммиты (использовать ша из рефлога) в свою текущую ветку и оставить вне, чтобы получить желаемый результат. – mnagel

ответ

6

Git-rebase является то, что вы ищете ,

в вашем случае совершения A-B-C-D, и хотите удалить C, попробуйте:

git rebase -i HEAD~3 

он будет показывать последние 3 ваших коммитов с помощью редактора (шахта ВИМ), просто удалить (в Vim: dd) строка фиксации, которую вы хотите удалить, затем сохраните ее (в vim: :wq).

Выполнено, просмотрите git log, и вы увидите, что фиксация C удалена.

* не забудьте создать резервную копию своего кода или папки .git.

+0

мой начальник находится в A? git log показывает C <- D. Я сделал git reset --soft C. Я должен просто сделать git rebase -i HEAD-3? –

+0

Поскольку я уже нажал: я не знаю много о git, но должен ли я использовать git revert? –

+0

Вы можете показать нам свой последний 'git reflog' здесь? – waskito

0
  1. Убедитесь, что вы создали резервную копию своей папки .git.
  2. Обеспечение фиксации D, не полагаться на изменения, внесенные в С.
  3. мерзавец Rebase --onto DB ~ 1 (как это последний коммит)
+0

Вы также можете использовать команду вишневого захвата – Shunya

+0

D не зависит от C. Должен ли я просто вводить git rebase --onto B D ~ 1. B и D означает их SHA? Надеюсь, вы понимаете, что моя текущая ситуация такова, что после git reset --soft C –

+0

Я только что отредактировал свой ответ, проверил pl. Да, B и D означает их SHA. – Shunya