Las respuestas dadas hasta ahora no son ideales porque requieren mucho trabajo innecesario para resolver conflictos de fusión, o hacen suposiciones que frecuentemente son falsas. Así es como se hace perfectamente. El enlace es a mi propio sitio.
Tiene cambios no confirmados en los my_branch
que desea comprometerse master
, sin comprometer todos los cambios demy_branch
.
Ejemplo
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
Explicación
Comience fusionando master
en su sucursal, ya que de todos modos tendrá que hacerlo eventualmente, y ahora es el mejor momento para resolver cualquier conflicto.
La -u
opción (aka --include-untracked
) en git stash -u
evita que pierdas archivos sin seguimiento cuando más tarde lo hagas git clean -f -d
dentro demaster
.
Después git checkout master
es importante que NO lo hagas git stash pop
, porque necesitarás este alijo más tarde. Si usted hace estallar el alijo creada en my_branch
y luego haces git stash
en master
, va a provocar conflictos de fusión innecesarias cuando posteriormente se aplica ese escondite enmy_branch
.
git reset
desestabiliza todo lo que resulta de git stash apply
. Por ejemplo, los archivos que se han modificado en el alijo pero que no existen enmaster
se organizan como conflictos "eliminados por nosotros".
git checkout .
y git clean -f -d
descarte todo lo que no está comprometido: todos los cambios en los archivos rastreados y todos los archivos y directorios no rastreados. Ya están guardados en el alijo y, si se dejan master
, causarían conflictos de fusión innecesarios al volver a cambiar my_branch
.
El último git stash pop
se basará en el original my_branch
y, por lo tanto, no provocará ningún conflicto de fusión. Sin embargo, si su escondite contiene archivos no rastreados que se ha comprometido a dominar, git se quejará de que "No se pudieron restaurar los archivos no rastreados del escondite". Para resolver este conflicto, eliminar los archivos de su árbol de trabajo, a continuación git stash pop
, git add .
y git reset
.