Para cuando esté listo para fusionar mi rama nuevamente en desarrollo (énfasis mío)
Manejar conflictos en a git merge
menudo es más simple que en git rebase
. En Git merge puedes ver la lista completa de archivos que se han modificado a la vez. No importa cuántos compromisos hayan realizado otros compañeros de trabajo, tendrá que fusionarse una vez . Con el flujo de trabajo de rebase, puede terminar teniendo los mismos conflictos una y otra vez y tener que revisarlos manualmente. Puedes terminar arreglando el compromiso número 13 y sentir que no puedes ver la luz del túnel .
Según mi experiencia, cuando intenté resolver ingenuamente conflictos repetidos de rebase terminé perdiendo las modificaciones de alguien o con una aplicación que ni siquiera se compiló. A menudo, yo y mis compañeros de trabajo hicimos mucho trabajo, pero nos sentimos tan abrumados por la complejidad de repetir conflictos que tuvimos que abortar y perder nuestro trabajo anterior después de un puñado de compromisos de rebase.
Le voy a sugerir algunas técnicas, pero solo pueden ayudar a que la fusión sea más fácil que automatizar la tarea.
- Recursos / archivos de idioma . Si tiene cambios aditivos en un archivo de recursos, asegúrese de moverlos siempre al final del archivo para poder recordar fácilmente sus cambios contra los cambios de los demás . Es posible que pueda copiar y pegar sus cambios en la parte inferior, o simplemente eliminar los marcadores de conflicto
- Hacer. No. ABSOLUTAMENTE. RE-formatear . Ni usted ni sus colegas desarrolladores realizarán un "reformateo de código masivo" durante el trabajo diario. El reformateo de código agrega un número excesivo de falsos positivos en la gestión de conflictos. Se puede volver a formatear el código
- Incrementalmente, por ejemplo, por cada desarrollador en cada confirmación, tan pronto como usen una herramienta automatizada (por ejemplo, Eclipse tiene una opción para formatear al guardar, Vanilla Visual Studio no tiene ninguna). Absolutamente todos los desarrolladores deben usar los mismos estándares de formato de código, codificados en un archivo de formato que es comido por su IDE. Para que te hagas una idea, si son 4 espacios o 2 pestañas, no importa, pero realmente importa si todos usan lo mismo.
- Justo antes del lanzamiento, por un líder del equipo. Si se produce una confirmación de "reformateo de código" cuando las personas no están trabajando en sucursales, es decir, antes de que se ramifiquen, las cosas se facilitarán
- Revise el trabajo dividido entre compañeros de trabajo. Esta es la parte donde viene la mayoría de la ingeniería. Como señalan otras respuestas, es un olor de diseño si varios desarrolladores que realizan diferentes tareas tienen que tocar los mismos recursos. Es posible que deba discutir con el líder de su equipo sobre qué parte debe modificar cada desarrollador concurrente.
También he visto algunos malos hábitos en los flujos de trabajo de Git en mis equipos. A menudo las personas se comprometen demasiado con sus ramas. Personalmente fui testigo de un desarrollador que agregaba entre 10 y 20 confirmaciones etiquetadas como "arreglo", cada una de las cuales confirmaba una o dos líneas. Nuestra política es que los compromisos están etiquetados con tickets JIRA para darle una idea.
@JacobRobbins sugiere hacer git rebase
una tarea diaria. Me gustaría impulsar su enfoque hacia adelante.
Primero, use rebase una vez solo para reducir el número de confirmaciones a un puñado. Y rebase solo en la rama de desarrollo original , que es la confirmación de la que se ha ramificado. Cuando digo puñado, podría decir 3 o 4 (por ejemplo, todos los front-end, todos los back-end, todos los parches de la base de datos) o cualquier figura humanamente razonable. Después de haberlos consolidado, use fetch
y trabaje su rebase en la rama ascendente. Esto no lo salvará de conflictos a menos que su equipo revise su propio enfoque, pero hará que su vida sea menos dolorosa.
Si tiene preguntas adicionales sobre las tareas específicas, no dude en buscar y preguntar en Stackoverflow.
[Editar] sobre la regla de no reformatear y boy scout. He modificado ligeramente el formato RE para resaltar que lo que quiero decir es la tarea de formatear desde cero todo el archivo fuente, incluido el código que no tocó. A diferencia de formatear siempre su propio código, que es perfectamente boy scouty, varios desarrolladores, incluido yo mismo, se utilizan para formatear todo el archivo con las capacidades del IDE. Cuando otros tocan el archivo, incluso si las líneas afectadas no cambian en su contenido y semántica, Git lo verá como un conflicto. Solo un editor con conocimiento del lenguaje muy poderoso puede sugerir que el conflicto solo está relacionado con el formateo y la fusión automática del fragmento mejor formateado. Pero no tengo evidencia de tal herramienta.
Después de todo, la regla de boy scout no te obliga a limpiar el desorden de otras personas. Solo tuyo.