GIT [conceptos básicos]

GIT

Extracto de: https://zhuanlan.zhihu.com/p/263050507 (proyección)

GitEs el **"sistema de control de versiones distribuido" más avanzado del mundo , SVNpero un "sistema de control de versiones centralizado"**. La gestión de versiones de SVN está centralizada en el servidor central, mientras que la gestión de versiones de Git se puede localizar.

Hay cuatro conceptos en Git: "almacén remoto, espacio de trabajo, área de ensayo y repositorio" . El almacén remoto es nuestro servidor Git, que se utiliza para almacenar el código del equipo administrado.

El espacio de trabajo, el área de almacenamiento temporal y la biblioteca de versiones son nuestros locales. Por ejemplo, después de inicializar , git initaparecerá .gitun directorio debajo del directorio actual. "El directorio redis es nuestro espacio de trabajo, y el directorio .git es propiedad de nuestra biblioteca de versiones La información de la versión está aquí" .

imagen

El archivo de índice ( ) en el directorio .git .git/indexes **"área de almacenamiento temporal" , llamado stageo index, el índice es similar al índice de nuestra base de datos, por lo que a veces lo llamamos "índice"**.

Los diagramas esquemáticos de estas cuatro áreas se muestran a continuación. Aquellos que han usado Git están muy familiarizados con los siguientes comandos.

imagen

Se puede ver en el diagrama esquemático que el código se puede transferir entre diferentes niveles, y también se puede transferir entre niveles.Todas estas acciones se realizan a través de comandos de Git.

Al inicializar, Git creará automáticamente la primera rama para nosotros master, y se llama un puntero al maestro HEAD.

imagen

proyecto clon

En nuestro entorno de trabajo real, el proyecto se clonará del servidor al local y git cloneel comando se puede usar para clonar el proyecto en Git:

git clone https://github.com/liduchang/redis

La ejecución git clonegenerará una copia, que se sincronizará en el almacén local y el espacio de trabajo.El diagrama esquemático específico es el siguiente:

imagen

ingrese el código

En la figura anterior, podemos ver que el código puede moverse entre diferentes niveles, desde un nivel alto a un nivel bajo, o al revés, desde un nivel bajo a un nivel alto, o entre niveles.

El movimiento de código de bajo a alto nivel en Git se basa principalmente en los siguientes comandos:

  • git add .: El archivo se agrega al área de almacenamiento temporal.
  • git commit -m "提交信息": el archivo se agrega al almacén local y el parámetro -m se cambia a -am para enviarlo directamente al almacén local.
  • git push: el archivo se envía al almacén remoto.

imagen

Ejecutar git commit -aes equivalente a ejecutar git addpara agregar todos los archivos al área de almacenamiento temporal y luego ejecutar git commitpara enviar los archivos al almacén local.

reserva de código

Luego, el comando para mover el código de un nivel alto a un nivel bajo es el siguiente:

  • git pull: extraiga el código del almacén remoto al local.
  • git reset --files: sobrescriba la modificación en el área de almacenamiento temporal con el almacén local, es decir, sobrescriba el contenido del último agregado de git.
  • git checkout --files: Copie el archivo del área de almacenamiento temporal al área de trabajo para descartar la modificación local.
  • git checkout HEAD --files: Revertir el último envío.

imagen

conflicto de código

Cuando se usa Git colectivamente en un equipo, todos envían su propio código y finalmente lo fusionan en el troncal. Siempre habrá momentos en los que la inserción falla, debido a la naturaleza de la inserción: "Es usar el registro de confirmación de su almacén local para sobrescribir el registro de confirmación del almacén remoto " .

Pero alguien más envió un código, y usted no tiene este código localmente, por lo que el código se sobrescribirá, lo que dará como resultado que no se registre la confirmación de otras personas, lo cual no está permitido en absoluto.

Por lo tanto, Git verificará cada vez que empuje. Si esta situación existe, el empuje falla. Simplemente git pull primero, combine el almacén local con el almacén remoto y, finalmente, el empuje tendrá éxito. Si el archivo ya existe en Para códigos en conflicto, simplemente abra el archivo y resuelva el conflicto nuevamente.

gestión de sucursales

El punto más importante en Git es el concepto de ramas. Con las ramas, hay operaciones de fusión y reorganización. "Fusionar" y "reorganizar" pueden "administrar versiones de código de manera efectiva" .

En la inicialización de Git, hay una rama principal predeterminada llamada master, y cada confirmación se unirá en una línea de tiempo, que es una rama, y ​​la rama actual está HEADseñalada por un puntero:

portada de GIF

Cada vez que se produce una confirmación de código, el punto actual formará una nueva versión hacia adelante. Si se crea una nueva rama bran y la confirmación actual apunta a la nueva rama, la nueva rama se actualizará con el tiempo. Forme muchas versiones:

imagen

Cuando se desarrolle la nueva rama, envíe el almacén y combínelo con el tronco maestro y, finalmente, elimine la rama de salvado, completando así un desarrollo personal:

imagen

Por lo tanto, si solo se crea una rama en la rama principal, la fusión de ramas es muy rápida. Solo necesita mover la rama maestra al envío actual, luego apuntar el puntero HEAD al maestro y finalmente eliminar la rama de salvado para completar .

Sin embargo, este no es el caso de hecho. En un equipo de desarrollo colaborativo de varias personas, cada persona a menudo crea su propia rama, tiene su propio envío y finalmente lo fusiona en el troncal. Cuando él mismo se envía, el código de almacén remoto se existe Código que no existe en su propio almacén local, lo que hará que la inserción falle.

Por ejemplo: los programadores Tom y Jerry abandonaron el código al mismo tiempo, y sus ramas de código iniciales se muestran en la siguiente figura:

imagen

Cuando Tom desarrolla su propio módulo comercial, envía el código y lo fusiona con el troncal, la rama troncal remota se muestra en la siguiente figura:

imagen

"El maestro de almacén remoto ya no apunta a gs234, pero se genera una nueva versión dfd453 como la versión apuntada actualmente " .

Al mismo tiempo, después de que el local de Jerry también haya desarrollado su propio módulo, la sucursal se muestra en la siguiente figura:

imagen

branEn el entorno local de Jerry, su **"maestro de almacén local todavía apunta a gs234"**, Jerry se desarrolla en una rama recién creada , fusiona la rama después del desarrollo y finalmente masterla apunta ed489.

Cuando Jerry envíe el código nuevamente, Git verificará el almacén remoto y el almacén local de Jerry. Después de comparar, se encuentra que el almacén remoto tiene un código que no existe en el almacén local de Jerry. Jerry necesita ejecutar el almacén remoto y resolver el conflicto. por sí git pullmismo

Lo anterior mencionado los principios básicos de ramificación, y los problemas que han ocurrido en la gestión de sucursales, a continuación, entraremos paso a paso en los comandos básicos de operación de sucursales.

nueva sucursal

El comando para que Git cree una nueva rama es: git branch <分支名字>, y después de crear la nueva rama, el comando para cambiar de rama es: git checkout <分支名字>.

La esencia de crear una nueva rama: "Es crear una nueva referencia que apunte al envío actual, y el maestro es como una referencia" ; la esencia de cambiar de rama: es HEADredirigir la referencia que apunta a la referencia original al referencia de la rama a cambiar:

imagen

Por supuesto, los dos comandos anteriores para crear ramas y fusionar ramas se pueden combinar en un solo comando:git checkout -b <分支名字>

Después de cambiar de punto, el puntero HEAD se moverá junto con la nueva rama de salvado cada vez que se envíe el código de confirmación, formando cada versión en la rama de salvado:

imagen

Si se desarrolla una determinada versión en la nueva rama de salvado, volver a la rama maestra para el desarrollo formará una bifurcación:

imagen

ver rama

Cuando se crea la sucursal, puede git branchverificar su sucursal local haciendo lo siguiente:

imagen

Las sucursales con un * delante de ellas representan la sucursal actual. Después de ver el puntaje, puede saber claramente qué sucursal desea pagar.

fusionar rama

Después de desarrollar y jugar con su propio módulo, fusionará sucursales localmente más adelante. El comando para fusionar ramas: , git merge <分支名字>que significa **"fusionar la rama especificada en la rama actual"**, por ejemplo: la rama actual es maestra, ejecutar : , lo que git merge bransignifica fusionar la rama de salvado con la rama maestra actual.

La fusión de ramas también fallará.Cuando tus dos ramas modifiquen el mismo archivo, Git no podrá determinar qué modificación deseas conservar y aparecerá un conflicto de fusión.

Por ejemplo: primero mastermodifico el archivo README.md en la sucursal y luego envío el almacén local:

imagen

Luego, vuelva a cambiar a branch dev, modifique el archivo README.md nuevamente y envíelo nuevamente.

imagen

Finalmente, combine la rama.En este momento, el código en conflicto de las dos modificaciones aparecerá en el archivo README.md que modificó dos veces:

imagen

Debido a que modifica la operación del mismo archivo dos veces, Git no sabe qué operación desea mantener después de la fusión, por lo que le dejará esta decisión a usted, solo le indica dónde entra en conflicto el código en el archivo, específicamente Cómo cambiarlo depende de ti.

imagen

eliminar rama

Finalmente, elimine la rama que usted mismo creó. git branch -d <分支名字>Elimine la rama a través de: . Si la rama no se puede eliminar, puede git branch -D <分支名字>forzar la eliminación de la rama a través de: :

imagen

La esencia de eliminar una rama en Git: dev es solo una referencia a una rama, por lo que eliminar una rama significa eliminar esta referencia y no eliminará ninguna confirmación, por lo que la operación de eliminación también es muy eficiente.

Si se elimina la referencia a una confirmación de rama, entonces no hay referencia a esta rama, por lo que esta rama no se encontrará y será reciclada por el mecanismo de reciclaje de Git.

ver remoto

En un equipo colaborativo de varias personas, es posible que desee verificar el estado del almacén remoto en cualquier momento. Puede verificarlo a través de: git remote y agregue el parámetro -v para verificar los detalles del almacén remoto.

git remote
git remote -v

rama de empuje

imagen

Empujar la rama al control remoto se mencionó en la sección anterior. La rama se puede empujar usando el comando git push. Agregue el comando de rama después del comando para indicar qué rama empujar:

git push origin master // 将本地master分支推送到远程库

tirar de la rama

El pull de la rama usa el comando git pull, que es equivalente a los siguientes dos comandos:

git fetch
git merge

Pero en la práctica general, puedes usar el comando git pull directamente:

imagen

estrategia de gestión de sucursales

Al fusionar ramas, Git se fusionará en el modo de fusión rápida (Avance rápido), pero después de que este modo elimine la rama, la información de la rama se perderá.

Git también puede fusionarse en **"modo normal"**, simplemente agregue el parámetro –no-ff después del comando de fusión de git original, el comando de fusión es el siguiente:

$ git merge --no-ff -m "message" dev

Cambios en el espacio de trabajo de acceso temporal

Durante el desarrollo, si en algún momento desea almacenar temporalmente los cambios actuales, puede usar git stashel comando, lo que significa que los archivos modificados se almacenarán en un área de almacenamiento independiente, no se enviarán y se pueden usar en cualquier momento. cuando sea necesario volver a sacar.

Lo que se debe tener en cuenta aquí es: "git stash es el archivo modificado, es decir, el archivo rastreado por Git. Git no rastrea el archivo recién agregado, por lo que git stash no se ocultará" .

imagen

El comando git stash también se puede agregar con el comando guardar seguido de información de comentarios para una fácil visualización:

git stash save "备注信息"

git stashDespués del éxito **"El código del directorio de trabajo local será el mismo que el del almacén local”**, puede git stashusar git stash listel comando para ver el historial del alijo anterior. Cuando necesite sacar el archivo modificado nuevamente, debe puede usar el siguiente comando:

git stash pop

git stash popSignifica **"Abra el primer registro oculto y el alijo se eliminará del historial" ; también puede usar git stash applyel comando "Abra el alijo, pero el alijo de este comando aún se guardará en el historial de alijo"* *, también puede usar el git stash dropcomando : para eliminar.

imagen

Este artículo solo explica el principio de bifurcación de Git y las operaciones de acceso temporal de Git. Debido a las limitaciones de espacio, nos detendremos aquí hoy. Continuaremos ilustrando las operaciones de Git en el próximo número. Nos vemos en el próximo número.

En este artículo, continuamos ilustrando Git. Las dos ilustraciones originales anteriores ilustraban las operaciones básicas de Git. Si está interesado, puede echar un vistazo a [] y [].

Después de escribir la operación básica de Git en este artículo, el diagrama ha terminado. Si desea obtener más información sobre Git, aquí hay algunos libros dedicados a Git: [Proficient in Git], [GitHub Getting Started and Practice], [Git Authoritative Guide] , [Gestión de control de versiones de Git], [Práctica de GitHub].

…(img-mUC6O40i-1684305577842)]

Este artículo solo explica el principio de bifurcación de Git y las operaciones de acceso temporal de Git. Debido a las limitaciones de espacio, nos detendremos aquí hoy. Continuaremos ilustrando las operaciones de Git en el próximo número. Nos vemos en el próximo número.

En este artículo, continuamos ilustrando Git. Las dos ilustraciones originales anteriores ilustraban las operaciones básicas de Git. Si está interesado, puede echar un vistazo a [] y [].

Después de escribir la operación básica de Git en este artículo, el diagrama ha terminado. Si desea obtener más información sobre Git, aquí hay algunos libros dedicados a Git: [Proficient in Git], [GitHub Getting Started and Practice], [Git Authoritative Guide] , [Gestión de control de versiones de Git], [Práctica de GitHub].

Estos son algunos buenos libros sobre Git. Si te interesa, puedes echar un vistazo. También hay muchos libros electrónicos en Internet. No hay muchos chismes, comencemos nuestro tema a continuación.

Supongo que te gusta

Origin blog.csdn.net/weixin_43925768/article/details/130725541
Recomendado
Clasificación