Leer git en un artículo

En el trabajo diario, las operaciones de Git se utilizan a menudo. Pero para los recién llegados, yo era nuevo en Git cuando aparecí por primera vez, y la operación también fue muy incómoda. Este artículo está dirigido principalmente a los recién llegados que recién están comenzando a ponerse en contacto con Git, comprender los principios básicos de Git y dominar algunos comandos de uso común.

Uno, flujo de trabajo de Git

 

Lo anterior incluye algunos comandos simples y de uso común, pero no se preocupan por estos primero, primero comprendamos los siguientes 4 nombres propios.

  • Espacio de trabajo: Espacio de trabajo

  • Índice / etapa: área de almacenamiento temporal

  • Repositorio: área de almacén (o almacén local)

  • Remoto: almacén remoto

Área de trabajo

Los cambios de desarrollo realizados por los programadores son los que ve actualmente y también son los últimos.

Por lo general, nuestro desarrollo consiste en copiar una sucursal en un almacén remoto y desarrollar en función de esa sucursal. En el proceso de desarrollo está el funcionamiento del espacio de trabajo.

caché de almacenamiento

En el archivo de índice bajo el directorio .git, el área de almacenamiento temporal registrará git addla información relevante (nombre de archivo, tamaño, marca de tiempo ...) del archivo agregado, sin guardar la entidad del archivo y apuntando a cada entidad de archivo por id. Puede utilizar para git statusver el estado del área de preparación. El área de preparación marca qué contenido en su espacio de trabajo actual es administrado por git.

Cuando necesite enviarlo a un almacén remoto después de completar un determinado requisito o función, el primer paso es git addser administrado por git enviándolo primero al área de preparación.

Almacén local

Guarde las versiones enviadas del objeto, que son más antiguas que el contenido del área de trabajo y el área de almacenamiento temporal.

git commitDespués de sincronizar el árbol de índice con el almacén local, es conveniente git pushsincronizar el almacén local con el almacén remoto desde el siguiente paso .

Almacén remoto

El contenido de un almacén remoto puede ser modificado por almacenes locales en una relación colaborativa distribuida en múltiples ubicaciones, por lo que puede estar sincronizado con el almacén local o no sincronizado, pero su contenido es el más antiguo.

resumen

  1. Cualquier objeto nace y se modifica en el espacio de trabajo;

  2. Cualquier modificación está controlada por versión después de ingresar al área de índice;

  3. Solo enviando la modificación al almacén local, la modificación puede dejar un rastro en el almacén;

  4. Comparta los cambios locales con los colaboradores y envíelos a almacenes remotos para compartirlos.

La siguiente imagen explica más directamente la relación entre las cuatro áreas, algunos comandos pueden no ser claros, no importa, la siguiente parte se presentará en detalle.

 

Dos comandos de Git de uso común

 

Encontré una imagen en Internet, y una imagen compilada por otra persona es muy buena, y la pido prestada para usarla. Algunos comandos comunes se explican en detalle a continuación.

CABEZA

 

Antes de comprender los comandos específicos, primero comprenda HEAD.

HEAD, siempre apunta al último punto de confirmación de la rama actual. Si la rama en la que se encuentra cambia o se genera un nuevo punto de confirmación, HEAD cambiará en consecuencia.

añadir

Los comandos relacionados con la adición son muy simples y principalmente se dan cuenta de que el contenido modificado del espacio de trabajo se envía al área de almacenamiento temporal y es administrado por git.

git add. Agregue todos los archivos del directorio actual al área de almacenamiento temporal
git agregar <dir> Agregue el directorio especificado al área de almacenamiento temporal, incluidos los subdirectorios
git agregar <file1> Agrega el archivo especificado al área de preparación

cometer

Los comandos relacionados con el compromiso también son muy simples, implementan principalmente el envío del contenido del área de almacenamiento temporal al almacén local y hacen que el HEAD de la sucursal actual retroceda un punto de compromiso.

git commit -m <mensaje> Envíe el área de almacenamiento temporal al almacén local y el mensaje representa la información
git commit <archivo1> -m <mensaje> Envíe los archivos especificados en el área de almacenamiento temporal al almacén local
git commit --amend -m <mensaje> Use una nueva confirmación para reemplazar la confirmación anterior

rama

Cuando se trata de colaboración, las ramas están involucradas naturalmente, en lo que respecta a las ramas, probablemente hay cuatro operaciones: mostrar ramas, cambiar ramas, crear ramas y eliminar ramas.

rama de git Lista de todas las sucursales locales
git branch -r Lista de todas las ramas remotas
git branch -a Enumere todas las sucursales locales y sucursales remotas
git branch <nombre de la rama> Crea una nueva rama, pero permanece en la rama actual
git checkout -b <nombre de la sucursal> Cree una nueva rama y cambie a esa rama
git branch --track <branch> <remote-branch> Cree una nueva rama y establezca una relación de seguimiento con la rama remota especificada
git checkout <nombre de la sucursal> Cambiar a la rama especificada y actualizar el espacio de trabajo
git branch -d <nombre de la rama> Eliminar rama
git push origin --delete <nombre de la rama> Eliminar rama remota

Aunque existen muchas operaciones en las sucursales, son relativamente simples y fáciles de recordar.

unir

El comando fusionar fusiona diferentes ramas. Como se muestra en la figura anterior, en la apertura real, podemos cortar una rama de la rama maestra y luego desarrollar para completar los requisitos. En el medio, se pasan los registros de confirmación de R3, R4, R5 y, finalmente, se completa el desarrollo y debe fusionarse con el maestro. Esto usa merge .

git fetch <remoto> Extraiga el código más reciente del almacén remoto antes de fusionar
git merge <rama> Fusionar la rama especificada con la rama actual

Generalmente, el conflicto aparecerá después de la fusión y deberá resolverlo manualmente en respuesta al conflicto. Principalmente porque dos usuarios modificaron la misma área del mismo archivo. Como se muestra en la figura siguiente, debe liberarse manualmente.

rebase

 

Rebase, también conocido como rebase, es otra opción para fusionar.

Al principio, estamos en la nueva rama y ejecutamos git rebase dev, luego las nuevas confirmaciones en la nueva rama se repiten en la rama maestra y, finalmente, el checkout vuelve a la nueva rama. Es lo mismo que la fusión. La rama antes y después de la fusión no ha cambiado. git rebase dev, La explicación popular es que la nueva rama quiere continuar sobre los hombros de dev. Rebase también requiere resolución manual de conflictos.

La diferencia entre rebase y merge

Ahora tenemos esas dos ramas, prueba y maestra, enviadas de la siguiente manera:

  •  
  •  
  •  
      D---E test     /A---B---C---F master
 

Ejecute en el maestro git merge test, y luego obtendrá los siguientes resultados:

  •  
  •  
  •  
      D--------E     /          \A---B---C---F----G   test, master

 

Ejecute en el maestro git rebase testy luego obtenga los siguientes resultados:

  •  
A---B---D---E---C'---F'   test, master

Como puede ver, la operación de combinación generará un nuevo nodo y los envíos anteriores se mostrarán por separado. La operación de rebase no genera nuevos nodos, fusiona las dos ramas en una presentación lineal.

Si desea un árbol de historial limpio y lineal sin merge commit, entonces debe elegir git rebase.
Si desea mantener un historial completo y quiere evitar el riesgo de reescribir el historial de commit, debe optar por usar git merge

Reiniciar

El comando de reinicio señala la rama actual a otra ubicación y cambia el área de trabajo y el área de almacenamiento temporal en consecuencia.

git reset —soft <commit> Solo se cambia el punto de compromiso, no se cambia el contenido del área de almacenamiento temporal y el directorio de trabajo
git reset —mixed <commit> Cambie el punto de compromiso y cambie el contenido del área de almacenamiento temporal al mismo tiempo
git reset —hard <commit> El contenido del área de almacenamiento temporal y el área de trabajo se modificará al estado exactamente igual que el punto de presentación.
git reset - cabeza dura Devolver el espacio de trabajo al estado en el que se encontraba cuando se envió por última vez

revertir

git revert usa una nueva confirmación para eliminar cualquier cambio realizado por una confirmación histórica.

La diferencia entre revertir y restablecer

  • Git revert usa una nueva confirmación para revertir la confirmación anterior, y git reset elimina directamente la confirmación especificada.

  • Al observar la operación de reversión, el efecto es similar. Pero hay una diferencia cuando continúa fusionando la versión anterior en el futuro. Debido a que git revert usa una confirmación inversa para "neutralizar" el envío anterior, cuando la rama anterior se fusione en el futuro, esta parte del cambio no volverá a aparecer, lo que reduce los conflictos. Pero git reset elimina algunas confirmaciones en una rama determinada, por lo que cuando se fusiona con la rama anterior de nuevo, estas confirmaciones revertidas aún deberían introducirse, lo que provoca muchos conflictos. Respecto a este punto, puedes leer este artículo si no entiendes.

  • Git reset mueve el HEAD un poco hacia atrás, mientras que git revert mueve el HEAD hacia adelante, pero el contenido de la nueva confirmación es opuesto al contenido que se revertirá, lo que puede compensar el contenido que se revertirá.

empujar

Cargue la sucursal del almacén local en la sucursal del almacén remoto para la sincronización.

git push <remoto> <rama> Cargue la sucursal local designada al almacén remoto
git push <remote> --force Empuje a la fuerza la sucursal actual al almacén remoto, incluso si hay un conflicto
git push <remote> --todos Empuje todas las sucursales al almacén remoto

Otros comandos

estado de git Mostrar archivos modificados
registro de git Mostrar el historial de versiones de la rama actual
git diff Muestre la diferencia entre el área de preparación y el área de trabajo
git diff HEAD Muestra la diferencia entre el espacio de trabajo y la última confirmación de la rama actual
git cherry-pick <commit> Elija una confirmación y combínela con la rama actual

Los anteriores son algunos comandos comunes y explicaciones detalladas sobre Git. Creo que puedo tener una comprensión preliminar de Git.

Supongo que te gusta

Origin blog.csdn.net/suifeng629/article/details/106998428
Recomendado
Clasificación