Con el boom de tecnología, resulta inevitable que cualquier persona de TI trabaje en varios datos simultáneamente y sus datos evolucionan constantemente con el tiempo. También es esencial realizar un seguimiento de cada cambio en los datos y estar preparado para deshacer o revertir cualquier cambio no deseado cuando sea necesario.
Debo confesar que versionar mis datos en Git me permite ser más experimental en el desarrollo de mi proyecto. Si me equivoco, sé que git siempre tiene una manera de deshacer y / o revertir esa versión de mi proyecto a la forma en que estaba antes de que lo arruinara. Cada La capa está diseñada para permitir que los cambios en los datos se revisen, modifiquen y / o corrijan antes de mover los datos a la siguiente etapa. Entonces, los siguientes son los errores que se tratan en este blog:
- Desinstalar archivos / directorios del índice
- Edita el último mensaje comprometido
- Olvidé algunos cambios en la última confirmación
- Descartar cambios locales
- Datos personales comprometidos con el repositorio local
- Se reemplazó la última confirmación por una nueva confirmación.
- Cometió los datos incorrectos
- Volver al estado de mi antiguo proyecto
- Recuperar una rama local eliminada
- Deshacer los cambios realizados en una confirmación
- Le di un nombre equivocado a mi rama
- Quiere reorganizar los registros del historial antes de pasar al control remoto
- Comprometidos cambios no relacionados en una única confirmación
- Cambiar el correo electrónico del autor en todas las confirmaciones en todas las ramas
- Archivos perdidos y encontrados
- Olvidé qué rama tiene mi id de compromiso
- Eliminar una confirmación del historial
- Empujó una rama incorrecta al control remoto
Desinstalar archivos / directorios del índice
Mientras agrega y / o modifica archivos, a menudo tiende a usar el comportamiento predeterminado del comando 'git add', que es agregar todos los archivos y directorios al índice.Muchas veces siente la necesidad de eliminar la etapa de ciertos archivos o modificarlos una última vez antes de enviarlos.
Sintaxis: git reset
La eliminación de la preparación de archivos del área de índice le brinda otra oportunidad de volver a trabajar en sus datos antes de comprometerse con un repositorio local.
Edita el último mensaje comprometido
Mando: git commit --enmendar
Puede editar el último mensaje de confirmación sin crear uno nuevo. Para enumerar los registros de confirmación, establecí un alias 'hist':
Mando: git config --global alias.hist 'log --pretty = formato: '% C (amarillo)% h% Creset% ad | % C (verde)% s% Creset% C (rojo)% d% Creset% C (azul) [% an] '--graph --decorate --date = short'x
No modifique el mensaje de confirmación que ya se envió a un repositorio remoto y se compartió con otros, ya que eso invalidaría el historial de confirmación anterior y, por lo tanto, cualquier trabajo basado en eso podría verse afectado.
Olvidé algunos cambios en la última confirmación
Supongamos que olvidó hacer algunas modificaciones y ya cometió su instantánea, además, no desea realizar otra confirmación para resaltar su error.
Mando: git commit --enmendar
He destacado cómo se ha recreado y cambiado el id sha-1 del objeto de confirmación reciente. Fingí haber hecho una única confirmación combinando ambos cambios en uno.
Descartar cambios locales
Entonces, aquí hay un caso en el que modifiqué el archivo 'README' y lo preparé. A continuación, modifiqué el mismo archivo por segunda vez, pero me di cuenta de que no quería el segundo cambio.
Ahora, permítame no deshacer todo el cambio manualmente, simplemente puedo extraer la versión provisional del archivo.
Sintaxis:
git checkout -
–Cambios locales en un archivo
git checkout -
–Cambios locales en todos los archivos del directorio y tímido y tímido
Mando: git checkout - README
Entonces, descarté mis últimos cambios en el archivo y acepté la versión provisional del archivo. En la siguiente confirmación, solo la versión provisional del archivo va al repositorio local.
sincronización de subprocesos en el ejemplo de java
Datos personales comprometidos con el repositorio local
Quiero eliminar ciertos datos del repositorio local pero mantener los archivos en el directorio de trabajo.
Sintaxis:
git reset - HEAD mezclada ~
git reset - mezclado
Mando: git reset - HEAD mezclada ~ 1
HEAD ~ 1 indica una confirmación justo antes de la confirmación reciente señalada por la rama actual HEAD.
Los archivos de la instantánea actual se eliminaron tanto del repositorio local como del área de preparación. Agregue los siguientes patrones en el archivo .gitignore global para excluirlos del seguimiento de git.
vim ~ / .gitignore_global
# archivos de contraseña #
*.pasar
*.llave
* .passwd
Con esto, la confirmación que tenía la instantánea de los archivos de contraseña se elimina y obtiene un área de prueba limpia. Mis archivos todavía están presentes en mi directorio de trabajo pero ya no están presentes en el repositorio local, tampoco se enviarán a un repositorio remoto.
Precaución: Si los pierde, git no puede recuperarlos porque no lo sabe.
Reemplazar la última confirmación con una nueva confirmación
Sintaxis: git reset --soft [/ HEAD ~ n>]
La opción '–soft' simplemente elimina los archivos comprometidos del repositorio local mientras aún están almacenados en el Índice y puede volver a confirmarlos después de una revisión. es el sha-1 de la instantánea que desea eliminar del repositorio local. donde n es el número de confirmaciones antes de la confirmación HEAD
Mando :git reset --Soft HEAD ~ 1
Modifique archivos y vuelva a organizarlos
Mando: git commit -m 'Añadiendo index.html y style.css'
Su historial de confirmaciones ahora resulta ser:
Cometió los datos incorrectos
Sintaxis:
git reset - cabeza dura ~ n
–Restablece el proyecto a 'n' confirmaciones antes de la última instantánea confirmada
git reset --hard
–Restablece el proyecto a una instantánea de identificación de compromiso dada
Mando: git reset - cabeza dura ~ 1
La última confirmación y los archivos corruptos se eliminan del repositorio local, el área de preparación y el directorio de trabajo.
Precaución: Es un comando peligroso ya que terminas perdiendo archivos en el directorio de trabajo. No recomendado en un repositorio compartido de forma remota.
Volver al estado de mi antiguo proyecto
Puede pasar a un estado anterior de su proyecto en la historia del tiempo. Si se equivoca con la última versión o necesita mejoras en el código anterior, es posible que desee crear otra rama a partir de la instantánea del proyecto anterior para no obstaculizar su trabajo actual. Veamos cómo:
a. Enumere el historial del proyecto y decida cuál es el ID de confirmación anterior, comando:ir hist
segundo. Cree otra rama a partir de la identificación de confirmación:
git checkout -b estado antiguo e7aa9a5
C. Continúe trabajando en el código y luego fusione / rebase con la rama 'maestra'.
Recuperar una rama local eliminada
Es posible regenerar el trabajo perdido en una rama de referencia. Digamos, eliminé la rama 'old_code' sin fusionarme con la rama principal y perdí el trabajo. Y no, tampoco empujé la rama a un repositorio remoto, ¿entonces qué? Bueno, haga un seguimiento y mantenga una entrada en el diario de todos los cambios realizados en cada referencia, veamos el mío:ir a reflog
Entonces, HEAD @ {2} es el puntero cuando me moví a la rama 'old_code', recuperemos eso:
configurando php en windows
Sintaxis:git checkout -b
Mando:git checkout -b old_code HEAD @ {2}
Ahora debes estar en la rama 'old_code' con tu último trabajo en el momento de su creación. Además, el puntero 'reflog' en HEAD @ {1} fue la confirmación reciente realizada en la rama 'old_code'. Para restaurar esta única commit simplemente ejecute el comando como:git reset --hard HEAD @ {1}.
Esto también restaura los archivos modificados en el directorio de trabajo.
Si desea saber en detalle cómo funciona este comando y cómo puede administrar las entradas 'reflog', también puede leer mi publicación anterior enrecuperando la rama eliminada de git reflog.
Deshacer los cambios realizados en una confirmación
Vamosrevertirse utiliza para registrar algunas confirmaciones nuevas para revertir el efecto de algunas confirmaciones anteriores.
Sintaxis: git revert
De mis registros de confirmaciones, me gustaría revertir el cambio realizado en el ID de confirmación resaltado:
Mando: git revert 827bc0d
Es mejor, que no restablezca '- hard' las confirmaciones compartidas, sino 'git revert' para preservar el historial, de modo que sea más fácil para todos rastrear los registros del historial para descubrir qué fue revertido, por quién ¿y por qué?
Puede usar la misma lógica de referir las confirmaciones relacionadas con el puntero HEAD en lugar de dar la identificación de confirmación, como en HEAD ~ 3 o HEAD ~ 4 y así sucesivamente.
Le di un nombre equivocado a mi rama
Puede cambiar el nombre de una sucursal local. Sucede muchas veces que es posible que desee cambiar el nombre de su sucursal en función del problema en el que está trabajando sin tener que pasar por el dolor de migrar todo su trabajo de una ubicación a otra. Por ejemplo, podría estar en la misma rama o en una rama diferente y aún así poder cambiar el nombre de la rama deseada como se muestra a continuación:
Sintaxis: git branch -m
Mando: git branch -m código_antiguo_antiguo_ # 4920
Como te preguntarás, ¿git mantiene un registro de este cambio de nombre? Sí, se refiere a sus entradas 'reflog', aquí está la mía:
Cambiar el nombre de una rama no afectará a su rama de seguimiento remoto. Veremos en la sección remota cómo reemplazar una rama en el repositorio remoto
Reorganice los registros del historial antes de pasar al control remoto
Cómo desearía haber realizado ciertas confirmaciones antes que otras y no haber realizado algunas confirmaciones en absoluto. Reorganice y edite de forma interactiva las confirmaciones antiguas para corregir o mejorar el código de forma eficaz
Sintaxis: git rebase -y
Mando: git rebase -i fb0a90e
–Comience a reajustar las confirmaciones que se realizaron después del ID de confirmación fb0a90e
Vuelva a visitar el git rebase documentación para comprender en qué se diferencia un rebase '–interactivo o -i' de un rebase regular.
Comprometidos cambios no relacionados en una única confirmación
En este caso, necesita dividir una confirmación anterior enterrada en varias confirmaciones lógicas.
Sintaxis: git rebase -y
Mando: git rebase -i fb0a90e
En el editor de rebase, debe elegir e7aa9a5 commit id y cambiarlo a 'editar' en lugar de 'seleccionar'.
Ahora estarías en la versión del proyecto de commit id-e7aa9a5. Primero, restablezca el historial de confirmaciones y el área de preparación al comando de confirmación anterior:git reset HEAD ~ 1
En segundo lugar, editar + preparar + enviar los archivos individualmente
Comandos:
git add code && git commit -m 'Añadiendo códigos iniciales'
git add newcode && git commit -m 'Añadiendo nuevo código'
En tercer lugar, continúe el rebase y finalice.
Mando :git rebase --continue
Cuarto, vea el historial con confirmaciones adicionales.
Mando: ir hist
Cambiar el correo electrónico del autor en todas las confirmaciones en todas las ramas
He estado versionando y confirmando mis archivos de proyecto en git desde hace mucho tiempo, pero hasta ahora nunca me di cuenta de que mi ID de correo electrónico estaba comprometida en mis registros de historial de confirmaciones que incluso se publican en repositorios remotos. Bueno, esto le puede pasar a cualquiera cuando configuró inicialmente las configuraciones en el archivo '.gitconfig'. Para mi alivio, git puede volver a escribir las variables de entorno que proporcionamos al crear un objeto de confirmación.
Primero obtengo la lista de ID de correo electrónico para decidir los que quiero cambiar:
Mando: git log --todos --pretty = formato: '% an% d'
–Esto imprime el nombre del autor (refname / branch-name)
Segundo, corro a través cada compromiso en cada rama y vuelva a escribir el objeto de confirmación con la nueva identificación de correo electrónico
Mando:
git filter-branch --env-filter '
si ['$ GIT_AUTHOR_NAME' = 'divya']
entonces
GIT_AUTHOR_EMAIL = 'divya@github.com'
ser
' -- --todos
Archivos perdidos y encontrados
Suponga que ha perdido cierto archivo y no recuerda su nombre, pero podría recordar ciertas palabras en el archivo. En este caso, puede seguir estos pasos:
Paso 1: Enumere todas las confirmaciones que alguna vez contuvieron la instantánea del archivo con el patrón buscado
Mando :git rev-list --todos | xargs git grep -i 'marca de tiempo'
Paso 2 : Crea una nueva rama 'perdida' a partir de este ID de compromiso resaltado
Sintaxis: git checkout -b perdido-encontrado d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f
Olvidé qué rama tiene mi id de compromiso
A veces, después de detectar una identificación de confirmación con errores, es posible que también desee conocer todas las ramas que tienen esta confirmación para poder corregirlas todas. Verificar el historial de cada sucursal no es muy práctico en un gran proyecto de múltiples sucursales.
Una mala confirmación realizada en mi aplicación de construcción de navegación una vez rompió el código, fue entonces cuando usé el Comando 'git bisect' para detectar el ID de confirmación que era incorrecto Seguido por elmando:git branch --contiene
para enumerar las ramas con esa mala confirmación.
Entonces, ahora que conozco todas las ramas que todavía tienen el compromiso incorrecto, podría revertir o restablecer este conjunto de cambios.
Eliminar una confirmación del historial
A veces siento la necesidad de borrar una confirmación del historial y no dejar rastro de ella. No te recomendaría que pruebes este truco en una sucursal compartida, sino solo en tu sucursal local.
Sintaxis: git rebase -y
Mando :git rebase -i 93859d8
En el editor de rebase-> reemplace 'editar' con 'soltar' para el ID de confirmación resaltado: 69f4813
En algunos casos, esta reescritura puede generar conflictos. Debe resolver los conflictos y luego continuar.
Advertencia : Este es un comando peligroso ya que reescribe el historial y puede perder datos. Dicha rama difiere de su contraparte remota y tendrá que ser empujada con el--fuerza
o- fuerza con arrendamiento
opción.
Empujó una rama incorrecta al control remoto
Ahora, esto es lo que quiero hacer: quiero eliminar un sucursal remota y también dejar de rastrearlo desde mi sucursal local '.git push
'Comando cuando se utiliza con el--Eliminar
opción elimina la rama remota Entonces, así es como obtengo la copia local del proyecto clonado:
clon de git https://github.com/greets/myProj.git
cd myProj
transferir archivos a la instancia de linux ec2
Una vez que se elimina la rama remota, otras en el repositorio compartido deben actualizar y actualizar sus referencias remotas con la--ciruela pasa
opción para eliminar las referencias de objetos faltantes:git fetch --prune -v origen
En esta publicación, mencioné algunos de los errores o cambios comunes que git puede ayudarlo a solucionar. Cada código es único y está desarrollado a su manera, por lo que también hay diferentes formas de abordar y solucionar un problema. Siempre puedes consultar al oficial documentación de git para comprender cómo varios comandos de git protegen su código fuente y cómo utilizar los comandos de la mejor manera posible.
Ahora que ha entendido los errores comunes de Git, consulte este por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. El curso Edureka DevOps Certification Training ayuda a los alumnos a comprender qué es DevOps y a adquirir experiencia en diversos procesos y herramientas de DevOps, como Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack y GIT para automatizar varios pasos en SDLC.
Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de estos 'errores comunes de Git' y nos comunicaremos con usted.