git branch tmp # mark the current commit with a tmp branch
git reset --hard Commit1 # revert to Commit1
Ответ SO " В чем разница между" git reset "и" git checkout "в git? " весьма поучителен для операций такого типа
A git reset --hard HEAD~2
сделает то же самое (без необходимости сначала возвращать SHA1 для Commit1
).
Поскольку Commit2
и Commit3
по-прежнему ссылаются на Git ref (здесь ветвь), вы все равно можете вернуться к ним в любое время, когда захотите (git checkout tmp
).
На самом деле, Дариен упоминает в комментариях (относительно перемещения Commit2
и Commit3
в другую ветку):
Случайно зафиксированный в неправильной ветви, это позволяет мне переместить ее, did:
git checkout correctbranch
git rebase tmp
git branch -d tmp
Это работает здесь, поскольку начальная ветвь была сброшена до Commit1
, что означает, что git rebase tmp
будет воспроизводить каждый коммит после Commit1
(так что здесь Commit2
и Commit3
) к новому 'correctbranch
'.