Me gustaría agregar mis pocas palabras. Últimamente noté un comportamiento muy extraño en git. Mi equipo tenía grandes problemas por eso. No sé cómo sucedió, pero parece que la historia en mi repositorio es inconsistente.
pequeña ilustración:
cometer XXXXXXXX: se añadió
Línea "bar" para presentar foo.
... trabajo en progreso ...
un montón de confirmaciones más tarde (digamos 100):
Línea "barra" ya no existe en este archivo !!
Investigación:
1.I inspeccionó la historia del archivo con:
git log foo foo y gitk
que incluso en comparación manchas consecutiva de cada commit con la herramienta externa (gvimdiff). Es interesante que encontré dos confirmaciones (llamémoslas YYY y ZZZ). Blob de archivo foo desde commit YYY consistía en "barra" pero blob de ZZZ no.
Cuando inspeccioné commitdiffs de esas confirmaciones con gitk (y gitweb) noté que no hay ninguna operación de eliminar la "barra" de línea en ZZZ. ¿Es posible que haya algún compromiso intermedio y se disuelva en el aire?
O tal vez confirme que ZZZ acaba de eliminar mi línea y la herramienta diff incrustada en git (o gitk) está rota?
2.He buscó para las confirmaciones que podría eliminar esta línea con "git log -S", algo así como:
git log -S'bar' - foo
Resulta que esta línea nunca fue eliminado De hecho, fue agregado dos veces. La primera vez que se introdujo en el proyecto y la segunda vez cuando se volvió a agregar como una corrección de errores urgente.
Me gusta mucho usar git e incluso persuadí a algunos amigos a usarlo, pero si ese tipo de magia continúa sucediendo, tendré que empezar a buscar otras alternativas.
¿Cómo hace el miembro del equipo para que sus cambios se confirmen y se hagan realidad? Dudo que git esté 'perdiendo' datos. Creo que es más probable que alguien esté haciendo algo como no fusionar los cambios y solo tome sus cambios ... – hvgotcodes
Si inspecciona cada uno de los diffs entre las versiones, probablemente verá los cambios anteriores revertidos. Esta es la causa más común de pérdida de datos causada por personas que hacen commits malos. Un visualizador de revisión git o front-end gráfico git puede ayudar a rastrearlos. – tadman
@hvgotcodes - Dice que sí "comete, tira, empuja". Entonces, ¿está diciendo que cuando hay conflictos de fusión, puede estar diciendo "yo gano"? –