Reinician el HEAD al quinto commit en el repositorio y luego fusionan con la rama master.
El HEAD de la rama actual se reinicia cinco commits atrás, luego los commits anteriores se fusionan en un solo commit.
Eliminan los últimos cinco commits.
Fusionan los últimos cinco commits en una nueva rama.
Explicación:
git reset --hard HEAD~5 reinicia la rama actual al commit justo antes de los últimos 5 (ver man gitrevisions para detalles sobre esta notación y otras alternativas interesantes como HEAD@{2 days ago}). Como es un reset duro, también sobrescribirá cada cambio en el árbol de trabajo. Ver man git-reset.
git merge --squash HEAD@{1} HEAD@{1} es donde estaba la rama justo antes del comando anterior (nuevamente, ver man gitrevisions). Este comando establece el estado del índice como sería justo después de una fusión desde ese commit. Toda esta operación podría ser una forma de tomar 5 commits de una rama en la que comenzaste una nueva característica y aplastarlos en un solo commit, uno significativo.
P4. Tu proyecto actual tiene varias ramas; master, beta y push-notifications. Acabas de terminar la característica de notificación en la rama push-notification, y deseas confirmarla en la rama beta. ¿Cómo puedes lograr esto?
Cambia a la rama push-notifications y ejecuta git merge beta
Cambia a la rama master y ejecuta git merge beta -> push-notifications
Elimina la rama push-notifications y se confirmará automáticamente en la rama master
Cambia a la rama beta y ejecuta git merge push-notifications
La confirmación está siendo etiquetada para su lanzamiento en la rama feature-user-location
Se está copiando una confirmación de su rama original a la rama feature-user-location
Se está escogiendo por selección como el nuevo HEAD del historial de confirmaciones
Se está copiando una confirmación de la rama feature-user-location a la rama master
Se cambia la rama a la rama feature-user-location, y se aplica la confirmación especificada a la rama.
Explicación:
'git checkout feature-user-location' cambia a la rama 'feature-user-location'.
'git cherry-pick kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231' aplica los cambios del commit especificado ('kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231') a la rama actual (feature-user-location). Esto efectivamente copia la confirmación de su rama original a la rama feature-user-location.
Por lo tanto, esta secuencia de comandos está haciendo un cherry-pick de un commit específico en la rama feature-user-location.
P8. ¿Qué hace el siguiente comando en el repositorio de git?
git reset --soft HEAD^
Borra todas las confirmaciones anteriores y restablece el historial del repositorio a su estado inicial.
Restablece la rama de trabajo al primer commit.
Mantiene el HEAD en la confirmación actual pero elimina todas las confirmaciones anteriores.
Establece HEAD en el commit anterior y deja los cambios de la confirmación deshecha en el área de preparación.
P9. Encuentras un error en tu proyecto, pero no puedes ubicar dónde se introdujo en el historial de confirmaciones. ¿Cómo diagnosticarías este problema?
Retrocede manualmente a través de tu historial de confirmaciones.
Usa git search -diff para comparar todas las confirmaciones en el historial de tu repositorio.
Ejecuta un git rebase para encontrar la confirmación con errores.
Usa git bisect para comparar la confirmación con errores con una confirmación temprana que funcione como se espera.
Una línea que comienza con # sirve como comentario. Por lo tanto, # .swift no hace nada. Ver man gitignore.
P17. Después de realizar cambios en un repositorio local, ejecutas el siguiente comando. ¿Qué hará esto?
git commit -a -m "Refactor code base"
Nada, no puedes usar múltiples opciones en el mismo comando
Agrega todos los archivos nuevos al área de preparación
Confirma todos los archivos nuevos con un mensaje
Agrega todos los archivos modificados al área de preparación, luego los confirma con un mensaje
P18. Después de verificar tu estado de git, obtienes la siguiente salida, que muestra el archivo beta-notes.js en la confirmación pero también sin preparar. ¿Cómo puede ocurrir esta situación?
Change to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: beta-notes.js
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout --<file>..." to discard changes in working directory)
modified: beta-notes.js
Había dos copias de beta-notes.js pero una fue eliminada
beta-notes.js estaba preparado, luego se modificó después, creando dos versiones diferentes del archivo
Se crearon dos copias de beta-notes.js, pero solo una está siendo rastreada
Hay dos copias rastreadas de beta-notes.js, pero una fue eliminada de la confirmación
Nota: - El comando pull es fetch seguido de merge o rebase (en este caso, merge). No queremos hacer una fusión. La fusión sería una acción en nuestro repositorio. Solo queremos sobrescribir nuestros archivos locales.