Directorio de artículos
1. Fusionar compromiso en uno
Cuando usamos git, es posible que tengamos varios envíos para la misma tarea. Por ejemplo, es posible que varios colegas modifiquen diferentes partes de la misma función, pero varios envíos hacen que nuestra gestión de versiones parezca desordenada. En este momento, podemos fusionar varios compromisos en uno.
1.1 git commit --enmendar
Es un comando de Git para modificar la confirmación más reciente. Utilice este comando cuando desee cambiar el último mensaje de confirmación, agregar cambios de archivos faltantes o modificar archivos ya confirmados. Tenga en cuenta que esta operación cambia el hash de confirmación, así que tenga cuidado al usarla en ramas compartidas.
- Agregar cambios que faltan: si se da cuenta de que se perdió algunos cambios en una confirmación reciente, primero puede agregar los archivos faltantes al área de preparación y luego agregarlos
git commit --amend
a la confirmación más reciente con . Por ejemplo:
Esto segit add forgotten-file.txt git commit --amend --no-edit
forgotten-file.txt
agregará a la confirmación más reciente y conservará el mensaje de confirmación original (debido a la opción utilizada--no-edit
). - Ajuste de archivos confirmados: si desea modificar archivos confirmados, primero puede realizar cambios en los archivos, luego agregar los archivos modificados al área de preparación y fusionarlos en la confirmación más reciente con
git commit --amend
:
Esto# 对文件进行更改 git add modified-file.txt git commit --amend --no-edit
modified-file.txt
agregará los cambios a la confirmación más reciente y mantendrá el mensaje de confirmación original, lo que equivale a fusionar esta confirmación con la confirmación anterior y conservar el mensaje de la última confirmación.
Tenga en cuenta que git commit --amend
el comando crea un nuevo objeto de confirmación y reemplaza la confirmación original. Esto significa que el hash de confirmación cambia. Tenga cuidado al hacer esto en una rama compartida con otros, ya que puede generar inconsistencias en el historial de la rama.
1.2 git rebase-i
Este método utiliza la función de reorganización interactiva de Git (reorganización interactiva), lo que le permite modificar el historial de confirmaciones. Tome el siguiente historial de confirmación como ejemplo:
A---B---C---D---E (main)
Suponga que desea fusionar las confirmaciones C, D y E en una sola confirmación. Puedes hacerlo así:
- Cambie a la rama que desea modificar (por ejemplo, principal):
git checkout main
- Úselo
git rebase -i
para seleccionar el rango de confirmaciones para fusionar. Para fusionar C, D y E, necesitamos reorganizar desde B:git rebase -i B^
- Esto abrirá un editor de texto que muestra una lista de confirmaciones similar a la siguiente:
pick C pick D pick E
- Cambie las acciones de la segunda y tercera confirmación (D y E) de
pick
asquash
(o s para abreviar):pick C squash D squash E
- Guarde y cierre el editor. Esto abrirá un editor nuevamente, permitiéndole editar el nuevo mensaje de confirmación. Cree un nuevo mensaje de confirmación que fusione C, D y E, luego guarde y cierre el editor.
- En este punto, el historial de confirmaciones se convertirá en:
F es la nueva confirmación de fusión.A---B---F (main)
1.3 restablecer git
Este enfoque deshará la confirmación, pero mantendrá los cambios en el espacio de trabajo. A continuación, puede crear una nueva confirmación que incluya los cambios de las confirmaciones anteriores. Usando el mismo ejemplo como referencia:
- Cambie a la rama que desea modificar (por ejemplo, principal):
git checkout main
- Utilice
git reset
el comando para retroceder hasta la confirmación B, con--soft
la opción de conservar los cambios en el espacio de trabajo:git reset --soft B
- Ahora, use
git commit
para crear una nueva confirmación que contenga los cambios de C, D y E. Al confirmar, agregue un mensaje de confirmación descriptivo:git commit -m "合并 C, D 和 E 的更改"
- En este punto, su historial de confirmaciones se convertirá en:
F es la nueva confirmación de fusión.A---B---F (main)
1.4 Ejemplos
- Se agregaron 3 confirmaciones
git rebase -i <hash>
Cambie las dos últimas selecciones para aplastar usando- Edite la información de la confirmación.
Aquí anotaré las siguientes dos informaciones y modificaré la primera para: feat: agregar una nueva declaración
Después de guardar, la confirmación se completará automáticamente, y luego presionaré, y las tres confirmaciones se fusionarán en una sola - visualización
2. Modificar el contenido de la confirmación
2.1 git commit --enmendar
git commit --amend
El comando le permite modificar la última confirmación. Esto utilizará el área de preparación actual como la nueva confirmación. Si no hay cambios en el área de almacenamiento temporal , este comando se puede usar para modificar la información de confirmación.
Por ejemplo:
supongamos que se acaba de enviar una confirmación, pero se descubre que se olvidó agregar un archivo. Puedes seguir los siguientes pasos:
git add forgotten_file.txt
git commit --amend
A continuación, se abrirá un editor de texto, donde puede modificar la información de confirmación. Después de guardar y cerrar el editor, la nueva confirmación reemplazará a la anterior.
2.2 git rebase-i
git rebase -i
Los comandos le permiten modificar varias confirmaciones pasadas en una interfaz interactiva. Puede cambiar el orden de las confirmaciones, fusionar, dividir y editar mensajes de confirmación.
Un ejemplo:
supongamos que desea modificar la tercera última confirmación, puede seguir los pasos a continuación:
git rebase -i HEAD~3
Esto mostrará una lista similar a:
pick f392171 Commit message 1
pick 58a9d84 Commit message 2
pick b6a0f7c Commit message 3
pick
Cambie la línea antes de la línea de confirmación que desea modificar edit
, luego guarde y cierre el archivo. Por ejemplo, queremos modificar el segundo compromiso:
pick f392171 Commit message 1
edit 58a9d84 Commit message 2
pick b6a0f7c Commit message 3
Ahora, Git retrocederá a la segunda confirmación. Puede realizar cualquier modificación, como agregar, eliminar o modificar archivos. Una vez hecho esto, agregue los cambios al área de ensayo:
git add modified_file.txt
Luego, ejecute git commit --amend
Modificar mensaje de confirmación. Una vez hecho esto, continúa con el proceso de rebase:
git rebase --continue
Si encuentra un conflicto durante el proceso de reorganización, debe resolver el conflicto, agregar el archivo resuelto al área de almacenamiento temporal y luego continuar con el proceso de reorganización.
Si encuentra un conflicto durante el proceso de reorganización, debe resolver el conflicto, agregar el archivo resuelto al área de almacenamiento temporal y luego continuar con el proceso de reorganización.
2.3 git selección de cerezas
git cherry-pick
Un comando puede aplicar una confirmación específica en una rama a otra rama. Esto es útil para modificar el contenido de una confirmación específica, especialmente si hay varias ramas involucradas.
Ejemplo:
Suponga que hay dos ramas: master
y feature
, desea modificar feature
una confirmación en la rama. Puedes seguir los siguientes pasos:
Primero, verifique feature
el historial de confirmaciones en la rama y busque la confirmación que desea modificar (p. ej., a123456
). Luego master
crea una nueva rama en la rama:
git checkout master
git checkout -b temp
A continuación, git cherry-pick
aplique el compromiso que se modificará a la nueva rama usando el comando:
git cherry-pick a123456
Ahora, el contenido de la confirmación se puede modificar. Cuando haya terminado de hacer modificaciones, agregue los cambios al área de ensayo y confirme git commit --amend
el mensaje con la modificación. Finalmente, vuelva a fusionar la confirmación modificada en feature
la rama:
git checkout feature
git merge temp
Finalmente, elimine la rama temporal:
git branch -d temp
2.4 git reflog y reinicio de git
En algunos casos, es posible que deba restaurar las confirmaciones que se perdieron debido a un mal uso. git reflog
puede ayudarlo a encontrar estas confirmaciones faltantes. git reset
El comando se puede usar para restablecer el puntero de rama a una confirmación específica.
Ejemplo:
suponga que accidentalmente git push --force
sobrescribe la rama remota, lo que resulta en la pérdida de algunas confirmaciones. Primero, git reflog
encuentre las confirmaciones faltantes usando:
git reflog
Encuentre el hash de la confirmación faltante (por ejemplo, b123456
), luego git reset
restablezca el puntero de rama a esa confirmación usando:
git reset b123456
De esta manera, puede recuperar confirmaciones perdidas y realizar cambios según sea necesario.
Tenga en cuenta que estas operaciones pueden hacer que cambie el historial de sucursales, así que tenga cuidado al realizar estas operaciones en sucursales compartidas. Además, para evitar problemas innecesarios, haga una copia de seguridad de su repositorio antes de realizar estas operaciones.
3. Ver el contenido de la confirmación
3.1 registro de git
versión sin argumentos
3.2 registro de git --una línea
Cada registro solo se muestra en una línea
3.3 registro de git - [longitud]
Mostrar solo los registros de longitud anteriores
3.4 registro de git --skip=[saltar]
Omita el registro de omisión anterior, que se puede usar junto con el anterior - [longitud]
3.5 registro de git -p
Mostrar algunas estadísticas y cambios de archivos e información de línea
3.6 registro de git --stat
Mostrar estadísticas de contenido de archivo, fecha, mensaje y autor de la confirmación
3.7 bitácora de git
Mostrar la confirmación de cada autor y cuántas confirmaciones
3.8 Filtración
- por fecha
git log --after="2023-4-1" # 2023年4月1号之后的所有日志 git log –-before="2013-4-1" # 2023年4月1号之前的所有日志
- por autor
git log --author="Ricky"
- presione enviar información
git log --grep=“issue” # 查看提交本中包含issue的日志
- por archivo
git log -- ./src/http/modules/ngx_http_xslt_filter_module.c
- por contenido
git log -S “ngx_free” # 查看所有文件中包含了ngx_free字符串的修改
- por rango
git log <since>..<until>
Por ejemplo, git log master...feature Esto puede mostrar todas las confirmaciones en la rama de funciones desde la bifurcación de la rama maestra
3.9 mostrar git [commit_id]
Mostrar el contenido de envío de commit_id, incluida la información de modificación de todos los archivos