Git Revert и затем коммит, но хотите сохранить ревизию перед возвратом - PullRequest
2 голосов
/ 31 августа 2011

Мой коммит уже запущен на Github, скажем,

A> B> C> D> E - ГОЛОВА

Я хочу вернуться к B, поэтому я использую

git reset --hard <B:Hash>

Теперь это будет выглядеть как

A> B - ГОЛОВА

Итак, если я отправлю его на сервер с git push --force, я потерял C, D, E в хранилище

Как я могу вернуть файл и сделать его последней ревизией, например A> B> C> D> E> F

F = назад: B

Я не могу использовать git commit, потому что там сказано, что нет файлов для фиксации.

1 Ответ

4 голосов
/ 31 августа 2011

Попробуйте это:

git checkout B
git reset --soft E
git commit -m 'Reverted to B'

Команда checkout изменит рабочее дерево и индекс в соответствии с фиксацией B. Сброс с помощью --soft изменит фиксацию, на которую указывает текущая ветвь, без влияния на рабочее дерево или индекс. Другими словами, после команды сброса индекс будет находиться в том же состоянии, что и коммит B.


Вы также можете использовать git revert B..E, что будет делать то же самое, за исключением того, что оно будет создавать один новый коммит для каждого отмененного коммита. Если вы хотите, чтобы возврат происходил в одном коммите, просто добавьте опцию -n (git revert -n B..E), и Git применит реверсию к рабочему каталогу и индексу. передайте результат, чтобы завершить реверсию.

...