Git Switch vs Git Checkout

GitGitBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás las diferencias clave entre los comandos git switch y git checkout. Explorarás cuándo y por qué usar cada comando, junto con ejemplos prácticos y casos de uso para ayudarte a optimizar tu flujo de trabajo de Git.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") subgraph Lab Skills git/status -.-> lab-391555{{"Git Switch vs Git Checkout"}} git/branch -.-> lab-391555{{"Git Switch vs Git Checkout"}} git/checkout -.-> lab-391555{{"Git Switch vs Git Checkout"}} end

Entendiendo Git Checkout

El comando git checkout es un comando fundamental de Git que se utiliza para cambiar de rama (branch) o restaurar archivos del árbol de trabajo (working tree). Actualiza los archivos en tu directorio de trabajo para que coincidan con la versión en la rama o commit especificado.

Comencemos explorando cómo usar git checkout para cambiar entre ramas.

Primero, asegúrate de estar en el directorio del proyecto:

cd ~/project

Ahora, verifiquemos la rama actual. Por defecto, después de git init, estás en la rama main o master (dependiendo de tu configuración de Git). En la configuración de este laboratorio, creamos una feature-branch.

git branch

Deberías ver una salida similar a esta, indicando la rama actual con un asterisco:

  feature-branch
* main

Ahora, usa git checkout para cambiar a la feature-branch:

git checkout feature-branch

Verás una salida confirmando el cambio:

Switched to branch 'feature-branch'

Verifiquemos la rama actual nuevamente:

git branch

La salida ahora debería mostrar que estás en feature-branch:

* feature-branch
  main

Has utilizado con éxito git checkout para cambiar de rama.

Entendiendo Git Switch

El comando git switch es un comando más reciente introducido en Git 2.23, diseñado específicamente para cambiar de ramas (branches). Su objetivo es proporcionar una separación de responsabilidades más clara en comparación con el sobrecargado comando git checkout.

Usemos git switch para volver a la rama main.

Asegúrate de estar en el directorio del proyecto:

cd ~/project

Ahora, usa git switch para cambiar a la rama main:

git switch main

Verás una salida confirmando el cambio:

Switched to branch 'main'

Verifiquemos la rama actual nuevamente:

git branch

La salida ahora debería mostrar que estás en main:

* main
  feature-branch

Has utilizado con éxito git switch para cambiar de ramas. Observa que la salida es similar a git checkout al cambiar de ramas.

Creando y Cambiando de Ramas con Git Switch

Una de las características convenientes de git switch es la capacidad de crear una nueva rama (branch) y cambiar a ella en un solo comando utilizando la opción -c (o --create).

Creemos una nueva rama llamada development y cambiemos a ella.

Asegúrate de estar en el directorio del proyecto:

cd ~/project

Ahora, usa git switch -c para crear y cambiar a la rama development:

git switch -c development

Verás una salida indicando que se creó una nueva rama y que cambiaste a ella:

Switched to a new branch 'development'

Verifiquemos la rama actual y listemos todas las ramas:

git branch

La salida debería mostrar la nueva rama development e indicar que actualmente estás en ella:

  feature-branch
  main
* development

Esto demuestra cómo git switch -c simplifica el proceso de crear e inmediatamente trabajar en una nueva rama.

Restaurando Archivos con Git Checkout

Mientras que git switch se utiliza principalmente para cambiar de ramas (branches), git checkout conserva la funcionalidad para restaurar archivos. Esta es una diferencia clave en su uso previsto.

Realicemos un cambio en file1.txt y luego usemos git checkout para descartar los cambios y restaurar el archivo a su estado en la rama actual (development).

Asegúrate de estar en el directorio del proyecto:

cd ~/project

Añade algo de contenido a file1.txt:

echo "Additional content" >> file1.txt

Verifica el estado del archivo:

git status

La salida mostrará que file1.txt ha sido modificado:

On branch development
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   file1.txt

no changes added to commit (use "git add" and/or "git commit -a")

Ahora, usa git checkout -- para descartar los cambios locales en file1.txt:

git checkout -- file1.txt

Verifica el estado nuevamente:

git status

La salida ahora debería mostrar que no hay cambios en el directorio de trabajo (working directory):

On branch development
nothing to commit, working tree clean

Los cambios que realizaste en file1.txt han sido descartados, y el archivo ha sido restaurado a su estado en la rama development. Esta funcionalidad es manejada por git checkout, no por git switch.

Revisando un Commit Específico con Git Checkout

Otra funcionalidad retenida por git checkout es la capacidad de revisar (check out) un commit específico. Esto te coloca en un estado de "detached HEAD" (HEAD desacoplado), permitiéndote inspeccionar el proyecto en ese punto de la historia. git switch no tiene esta capacidad.

Primero, encontremos el hash del commit (commit hash) del commit inicial.

Asegúrate de estar en el directorio del proyecto:

cd ~/project

Visualiza el historial de commits:

git log --oneline

Verás una salida similar a esta, con los hashes de los commits:

<commit_hash_development> (HEAD -> development) Initial commit
<commit_hash_main> (main, feature-branch) Initial commit

Ten en cuenta que los hashes de los commits serán diferentes en tu entorno. Copia el hash del commit para el "Initial commit".

Ahora, usa git checkout seguido del hash del commit para revisar ese commit específico. Reemplaza <commit_hash> con el hash real que copiaste.

git checkout <commit_hash>

Verás una salida indicando que estás en un estado de detached HEAD:

Note: switching to '<commit_hash>'

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

HEAD is now at <commit_hash> Initial commit

Ahora estás viendo el proyecto tal como estaba en el momento del commit inicial. Para regresar a una rama (branch), puedes usar git switch o git checkout para cambiar de nuevo a una rama como development o main.

Volvamos a la rama development usando git switch:

git switch development

Verás una salida confirmando el cambio:

Switched to branch 'development'

Has utilizado con éxito git checkout para explorar un commit específico y luego has regresado a una rama usando git switch.

Resumen de las Diferencias

Para resumir las diferencias clave entre git checkout y git switch:

  • git switch: Se utiliza principalmente para cambiar entre ramas (branches). Es un comando más nuevo y enfocado para esta tarea específica. También puede crear una nueva rama y cambiar a ella (git switch -c).
  • git checkout: Un comando más versátil que puede cambiar de ramas, pero también tiene la capacidad de revisar (check out) commits específicos (resultando en un HEAD desacoplado - detached HEAD) y restaurar archivos (git checkout -- <file>).

Si bien git checkout puede realizar el cambio de ramas, git switch es el comando recomendado para este propósito en las versiones más recientes de Git debido a su intención más clara y separación de responsabilidades (separation of concerns). Usa git checkout cuando necesites restaurar archivos o explorar commits específicos.

Ahora has explorado las funcionalidades principales tanto de git checkout como de git switch y comprendes cuándo usar cada comando en tu flujo de trabajo (workflow) de Git.

Resumen

En este laboratorio, has aprendido las diferencias entre los comandos git switch y git checkout. Practicaste el cambio de ramas (switching branches) usando ambos comandos, la creación de una nueva rama con git switch, la restauración de archivos con git checkout, y la revisión (checking out) de un commit específico con git checkout. Ahora comprendes los casos de uso previstos para cada comando y cómo contribuyen a un flujo de trabajo (workflow) de Git eficiente.