2009-08-18 18 views
30

¿Cómo puede git-checkout sin sobreescribir los datos?Para completar el pago sin sobreescribir los datos

corro

git checkout master 

me sale

error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge. 

Esto es sorprendente, ya que no sabía que Git se funde cuando git-checkout. Siempre corrí después del comando por separado git merge new-feature. Esto parece ser aparentemente innecesario si Git se fusiona en el proceso de pago.

Respuesta

51

Git le advierte que forms/answers.php tiene cambios en su copia de trabajo o índice que no se han confirmado.

Puede utilizar git-stash para guardar los cambios y luego git-alijo aplica para restaurarlos.

El caso de uso común de git-stash es que está trabajando en cambios pero luego debe verificar temporalmente una rama diferente para corregir un error. Para que pueda esconder sus cambios en su índice y copia de trabajo, pagar en la otra rama, corregir el error, confirmar, pagar la sucursal original, y git-stash aplicar para restaurar sus cambios y retomarlos donde lo dejó apagado.

+1

Gracias por mencionar 'git-stash'! - No sabía que su propósito es ser utilizado en situaciones como esta. –

+2

Por alguna razón, no pude usar el comando git-stash. En cambio, tuve que usar "git stash" (sin guión). –

+0

Si todo lo que quiere es inspeccionar una revisión diferente mientras mantiene sus cambios no confirmados (que a veces es el caso al buscar la revisión que introduce un error), la sugerencia de Jakub ('git checkout -m') es mucho más fácil. –

18

Git hace un merge de 2 vías de cambios uncomitted cuando se cambia ramas (usando git checkout <branch>), pero normalmente lo hace solamente trivial (a nivel de árbol) de mezcla.

Además git-stashsolution by Karl Voigtland, le puede dar opciones adicionales para git checkout, eligiendo una de las siguientes opciones:

  • Tell git a esforzarse más para fusionar cambios uncomitted en rama se cambia a la -m/--merge opción. Con esta opción, se realiza una combinación de tres vías entre la rama actual, el contenido de árbol de trabajo y la nueva bifurcación, y usted estará en la nueva bifurcación.

  • Tell git to sobrescribe cambios no realizados, descartando cambios locales con la opción -f. Advertencia: ¡se perderán los cambios no realizados!

+2

Gracias por esto. El segundo ('git checkout -f master') me ayudó a volver. No sé qué cambios perdí, pero no fueron importantes ya que esta es una copia muy antigua de un repositorio que solo quería inspeccionar. – mgilson

+0

¿Es posible hacer el "opuesto" de 'git checkout -f'? Básicamente me gustaría que Git deje de revisar los archivos que causarían conflicto. – giusti

Cuestiones relacionadas