Ответ 1
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
).
Собственно, Darien упоминает в комментариях (относительно перемещения Commit2
и Commit3
в другую ветку):
Случайно преданный неправильной ветке, это позволило мне переместить его, сделал:
git checkout correctbranch
git rebase tmp
git branch -d tmp
Это работает здесь, так как начальная ветвь была reset до Commit1
, что означает, что git rebase tmp
будет воспроизводить каждую фиксацию после Commit1
(так что здесь Commit2
и Commit3
) к новому 'correctbranch
.