¿Cómo recuperar un commit de fusión después de una rebase en el mismo commit?

Supongamos esto:

mkdir test; cd test echo "1" > file1; git init; git add .; git commit -m "initial - file 1" # 1st commit on master echo "2" > file2; git add .; git commit -m "file 2" # 2nd commit on master git checkout -b newbranch # creates newbranch echo "1" >> file1; git add .; git commit -m "changed 1" # 1st commit on newbranch git checkout master # goes to master echo "2" >> file2; git add .; git commit -m "changed 2" # 3rd commit on master git merge newbranch -m "merge commit" # merge newbranch on master echo "3" > file3; git add .; git commit --amend -m "merge commit" # amend merge commit and adds file3 git rebase HEAD~2 # don't change anything, just leave ls # there isn't file3 anymore! 

¿Hay alguna manera de recuperar la confirmación de fusión para que los cambios que se modificaron no se pierdan?

Los cambios que realizó todavía están en su reflog .

Después de la rebase accidental (supongo que es accidental, ya que estás hablando de commits "perdidos"), ejecuta git reflog .

Encuentra la input justo debajo de la última línea "rebase:" en el set superior. El hash de confirmación a la izquierda es la confirmación de fusión modificada antes de comenzar a rebasar.