aclaración sobre git revertir y rebase

Considere los siguientes pasos:

git init touch foo.txt git add . git commit -m 'initial commit' 

Ahora, crearemos una nueva twig y agregaremos un file llamado foo2.txt:

 git checkout -b new_branch touch foo2.txt git add . git commit -m 'added foo2.txt' 

Ahora volveremos a la twig principal, y revertiremos la 'confirmación inicial' que hicimos (nota: puede encontrar el hash de confirmación de 'confirmación inicial' usando el command git log).

 git checkout master git revert <commit hash of initial commit> 

En este punto, no tenemos foo.txt ni foo2.txt en la twig principal. Ahora, fusionemos new_branch para dominar

 git merge new_branch 

En este punto, foo2.txt ahora está fusionado en master, pero foo.txt no está allí.

Entonces la pregunta es, ¿cómo puedo recuperar foo.txt para dominar? Intenté hacer esto:

 git rebase new_branch 

Pero eso no lo trae de vuelta. Entonces, en general, si revertimos un commit en master, entonces necesitamos unir otra twig a master, ¿cómo obligaríamos a traer los files 'missing' (foo.txt en este ejemplo)?

La única solución alternativa que encontré, que fue bastante drástica, fue eliminar master y cambiar el nombre de new_branch a master.

Haga un nuevo compromiso para recuperar foo.txt. Podrías git revert <revert commit> o git cherry-pick <init commit> o agregar foo.txt a mano y confirmar.

O elimine <revert commit> del historial. Restablecer master para <add foo2 commit> través de git reset <add foo2 commit> --hard . También se puede hacer a través de git rebase --onto <init commit> <init commit> <add foo2 commit> , pero termina en detached HEAD state por lo que debe restablecer el master a este nuevo HEAD.

Puedes recuperar foo.txt usando git cherry-pick con hash de commit inicial.

git revert agrega un compromiso que elimina las líneas agregadas por la confirmación inicial, cuando rebase la nueva regla en maestro todos los cambios realizados en esta twig se aplican después de esta inversión.