Skip to content

Instantly share code, notes, and snippets.

@jsvenancio
Forked from leocomelli/git.md
Last active September 21, 2024 18:10
Show Gist options
  • Save jsvenancio/95a8e4829b31468df0488fb4fffa921b to your computer and use it in GitHub Desktop.
Save jsvenancio/95a8e4829b31468df0488fb4fffa921b to your computer and use it in GitHub Desktop.
Lista de comandos úteis do GIT

README.md

Representação visual dos conceitos do Git, incluindo ramificação, mesclagem e controle de versões

# Índice / Table of Contents / Table des Matières / Índice

1. [English](#english)
2. [Português](#português)
3. [Français](#français)
4. [Español](#español)
5. [Credits / Créditos / Crédits]

==========

## English

This document provides a detailed guide to using Git, explaining key commands and configurations necessary for effective version control. It covers local and remote repositories, branching, merging, stashing, rebasing, and more. The guide is ideal for beginners who want to understand Git and for advanced users who seek a comprehensive reference.

## Português

Este documento oferece um guia detalhado para utilizar o Git, explicando os comandos e configurações essenciais para um controle de versão eficiente. Abrange repositórios locais e remotos, criação de branches, merges, stash, rebase, e muito mais. Ideal tanto para iniciantes quanto para utilizadores avançados que buscam um guia completo.

## Français

Ce document offre un guide détaillé sur l'utilisation de Git, expliquant les commandes et configurations essentielles pour un contrôle de version efficace. Il couvre les dépôts locaux et distants, les branches, les fusions, le stash, le rebase, et bien plus. Idéal pour les débutants comme pour les utilisateurs avancés qui recherchent une référence complète.

## Español

Este documento proporciona una guía detallada para usar Git, explicando los comandos y configuraciones clave necesarios para un control de versiones efectivo. Cubre repositorios locales y remotos, ramas, fusiones, stashing, rebasing, y más. Ideal tanto para principiantes como para usuarios avanzados que buscan una referencia completa.

==========

## Créditos / Credits / Crédits

Este documento foi baseado no trabalho original de [Leonardo Comelli](https://gist.github.com/leocomelli), e as traduções foram feitas por [jsvenancio](https://github.com/jsvenancio).

GIT

States

  • Modified
  • Staged (index)
  • Committed

Help

General
git help
Specific Command
git help add
git help commit
git help <any_git_command>

Configuration

General

The GIT configurations are stored in the .gitconfig file, located in the user's directory (e.g., Windows: C:\Users\Documents and Settings\Leonardo, or *nix /home/leonardo).

Configurations made using the commands below will be included in this file.

Setting the User

git config --global user.name "Leonardo Comelli"

Setting the Email

git config --global user.email [email protected]

Setting the Editor

git config --global core.editor vim

Setting the Merge Tool

git config --global merge.tool vimdiff

Setting Ignored Files

git config --global core.excludesfile ~/.gitignore

Listing Configurations

git config --list

Ignoring Files

The file/directory names or file extensions listed in the .gitignore file will not be added to a repository. There are two types of .gitignore files:

  • Global: Typically stored in the user's OS directory. It contains the list of files/directories to be ignored by all repositories. The file doesn't need to be named .gitignore.

  • Per Repository: Stored in the repository's directory, containing the files/directories to be ignored only for that specific repository.

Local Repository

Create a New Repository

git init

Check the Status of Files/Directories

git status

Add File/Directory to the Staging Area

Add a Specific File
git add my_file.txt
Add a Specific Directory
git add my_directory
Add All Files/Directories
git add .
Add a File Listed in .gitignore (global or repository-specific)
git add -f file_in_gitignore.txt

Committing Files/Directories

Commit a Specific File
git commit my_file.txt
Commit Multiple Files
git commit my_file.txt my_other_file.txt
Commit with a Message
git commit my_file.txt -m "my commit message"

Removing Files/Directories

Remove a File
git rm my_file.txt
Remove a Directory
git rm -r directory

Viewing History

Display History
git log
Display History with Diff of the Last Two Changes
git log -p -2
Display a Summary of the History (full hash, author, date, comment, and number of changes (+/-))
git log --stat
Display One-Line Summary (full hash and comment)
git log --pretty=oneline
Display History with Specific Formatting (abbreviated hash, author, date, and comment)
git log --pretty=format:"%h - %an, %ar : %s"
  • %h: Abbreviated hash
  • %an: Author's name
  • %ar: Date
  • %s: Comment

Refer to more formatting options in the Git Book.

Display history of a specific file
git log -- <file_path>
Display history of a file containing a specific word
git log --summary -S<word> [<file_path>]
Display modification history of a file
git log --diff-filter=M -- <file_path>
  • <D> can be replaced by: Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), etc.
Display history of a specific author
git log --author=username
Display revision and author of the last modification of a block of lines
git blame -L 12,22 my_file.txt

Undoing Operations

Undo local changes (working directory)

Use this command before the file is added to the staging area:

git checkout -- my_file.txt
Undo changes in the staging area

Use this when the file has been added to the staging area:

git reset HEAD my_file.txt

If you see this output, the reset command didn't affect the working directory:

Unstaged changes after reset:
M    my_file.txt

The directory change can be performed using the command below:

git checkout my_file.txt

Remote Repository

Display Remote Repositories

git remote
git remote -v

Link Local Repository with a Remote Repository

git remote add origin [email protected]:leocomelli/curso-git.git

Display Information About Remote Repositories

git remote show origin

Rename a Remote Repository

git remote rename origin curso-git

Unlink a Remote Repository

git remote rm curso-git

Push Files/Directories to a Remote Repository

The first push needs the remote repository name and branch:

git push -u origin master

Subsequent pushes:

git push

Updating Local Repository from Remote

Update files in the current branch

git pull

The message indicating a manual merge will be:

Automerging my_file.txt
CONFLICT (content): Merge conflict in my_file.txt
Automatic merge failed; fix conflicts and then commit the result.

Deleting a Branch

git branch -d bug-123

Listing Branches

List branches
git branch
List branches with information about the latest commits
git branch -v
List branches already merged with master
git branch --merged
List branches not yet merged with master
git branch --no-merged

Creating Branches in the Remote Repository

Create a remote branch with the same name
git push origin bug-123
Create a remote branch with a different name
git push origin bug-123:new-branch
Download a remote branch for editing
git checkout -b bug-123 origin/bug-123
Delete a remote branch
git push origin :bug-123

Rebasing

Performing a rebase between the bug-123 branch and master:

git checkout experiment
git rebase master

More information and explanations about Rebasing.

Stash

To switch between branches, you usually need to commit your current changes before moving to another branch. If you need to switch without committing, you can create a stash. The stash acts like a temporary branch containing only uncommitted changes.

Create a stash
git stash
List stashes
git stash list
Apply the last stash
git stash apply
Apply a specific stash
git stash apply stash@{2}

Where 2 is the stash index.

Create a branch from a stash
git stash branch my_branch

Rewriting History

Changing commit messages
git commit --amend -m "My new message"
Modify the last three commits
git rebase -i HEAD~3

The text editor will open with lines representing the last three commits. Change pick to edit for the commits you want to modify, then amend the message with:

git commit --amend -m "New message"

Apply changes with:

git rebase --continue

Note: You can reorder or remove commits by modifying or deleting lines in the editor.

Combining Multiple Commits

Follow the same steps as above, but mark the commits to be combined with squash.

Remove All History of a File
git filter-branch --tree-filter 'rm -f passwords.txt' HEAD

Bisect

The bisect (binary search) is useful for finding a commit causing a bug or inconsistency between a series of commits.

Start binary search
git bisect start
Mark the current commit as bad
git bisect bad
Mark a tag commit that doesn't have the bug/inconsistency
git bisect good vs-1.1
Mark the commit as good
git bisect good
Mark the commit as bad
git bisect bad
End the binary search

Return to HEAD with:

git bisect reset

Contributions

Feel free to add more information or make corrections. Fork me!

GIT

Estados

  • Modificado (modified);
  • Preparado (staged/index)
  • Consolidado (committed);

Ayuda

General
git help
Comando específico
git help add
git help commit
git help <cualquier_comando_git>

Configuración

General

Las configuraciones de GIT se almacenan en el archivo .gitconfig, ubicado dentro del directorio del usuario del sistema operativo (Ej.: Windows: C:\Users\Documents and Settings\Leonardo o *nix /home/leonardo).

Las configuraciones realizadas con los comandos a continuación se incluirán en el archivo mencionado.

Configurar usuario
git config --global user.name "Leonardo Comelli"
Configurar correo electrónico
git config --global user.email [email protected]
Configurar editor
git config --global core.editor vim
Configurar herramienta de combinación
git config --global merge.tool vimdiff
Configurar archivos a ignorar
git config --global core.excludesfile ~/.gitignore
Listar configuraciones
git config --list

Ignorar Archivos

Los nombres de archivos/directorios o extensiones de archivos listados en .gitignore no se agregarán a un repositorio.

  • General: Normalmente se almacena en el directorio del usuario del sistema operativo. El archivo que contiene la lista de archivos/directorios a ignorar por todos los repositorios debe ser declarado como se mencionó antes. El archivo no necesariamente debe llamarse .gitignore.

  • Por repositorio: Debe almacenarse en el directorio del repositorio y debe contener la lista de archivos/directorios que deben ser ignorados solo para ese repositorio específico.

Repositorio Local

Crear un nuevo repositorio

git init

Verificar el estado de los archivos/directorios

git status

Añadir archivo/directorio (área de staging)

Añadir un archivo específico
git add mi_archivo.txt
Añadir un directorio específico
git add mi_directorio
Añadir todos los archivos/directorios
git add .
Añadir un archivo que está en .gitignore (general o del repositorio)
git add -f archivo_en_gitignore.txt

Hacer commit de archivo/directorio

Hacer commit de un archivo
git commit mi_archivo.txt
Hacer commit de varios archivos
git commit mi_archivo.txt mi_otro_archivo.txt
Hacer commit con un mensaje
git commit mi_archivo.txt -m "mi mensaje de commit"

Eliminar archivo/directorio

Eliminar archivo
git rm mi_archivo.txt
Eliminar directorio
git rm -r directorio

Visualizar historial

Mostrar historial
git log
Mostrar historial con diff de las dos últimas modificaciones
git log -p -2
Mostrar resumen del historial (hash completo, autor, fecha, comentario, y número de cambios (+/-))
git log --stat
Mostrar información resumida en una línea (hash completo y comentario)
git log --pretty=oneline
Mostrar historial con formato específico (hash abreviado, autor, fecha y comentario)
git log --pretty=format:"%h - %an, %ar : %s"
  • %h: Abreviatura del hash;
  • %an: Nombre del autor;
  • %ar: Fecha;
  • %s: Comentario.

Consulta más opciones de formato en el Git Book

Mostrar historial de un archivo específico
git log -- <ruta_del_archivo>
Mostrar revisión y autor de la última modificación de un bloque de líneas
git blame -L 12,22 mi_archivo.txt

Deshaciendo operaciones

Deshacer cambios locales (directorio de trabajo)

Este comando debe utilizarse mientras el archivo no haya sido añadido al staging area.

git checkout -- mi_archivo.txt
Deshacer cambios locales (staging area)

Este comando debe usarse cuando el archivo ya fue añadido al staging area.

git reset HEAD mi_archivo.txt

Si aparece el resultado:

Unstaged changes after reset:
M    mi_archivo.txt

El cambio del directorio se puede hacer con el comando:

git checkout mi_archivo.txt

Posso continuar a tradução para espanhol por partes menores, garantindo que está completa e precisa. Aqui está a tradução desta parte:

Repositorio Remoto

Mostrar los repositorios remotos

git remote
git remote -v

Vincular el repositorio local con un repositorio remoto

git remote add origin [email protected]:leocomelli/curso-git.git

Mostrar información de los repositorios remotos

git remote show origin

Renombrar un repositorio remoto

git remote rename origin curso-git

Desvincular un repositorio remoto

git remote rm curso-git

Enviar archivos/directorios al repositorio remoto

El primer push de un repositorio debe incluir el nombre del repositorio remoto y la rama:

git push -u origin master

Los siguientes pushes no requieren esta información:

git push

Actualizar el repositorio local según el repositorio remoto

Actualizar los archivos en la rama actual
git pull
Buscar los cambios, pero no aplicarlos en la rama actual
git fetch

Clonar un repositorio remoto existente

git clone [email protected]:leocomelli/curso-git.git

Etiquetas (Tags)

Crear una etiqueta ligera
git tag vs-1.1
Crear una etiqueta anotada
git tag -a vs-1.1 -m "Mi versión 1.1"
Crear una etiqueta firmada

Para crear una etiqueta firmada, se necesita una clave privada (GNU Privacy Guard - GPG).

git tag -s vs-1.1 -m "Mi etiqueta firmada 1.1"
Crear una etiqueta a partir de un commit (hash)
git tag -a vs-1.2 9fceb02
Subir una etiqueta al repositorio remoto
git push origin vs-1.2
Subir todas las etiquetas locales al repositorio remoto
git push origin --tags

Ramas (Branches)

La master es la rama principal de GIT.

El HEAD es un puntero especial que indica cuál es la rama actual. Por defecto, HEAD apunta a la rama principal, master.

Crear una nueva rama
git branch bug-123
Cambiar a una rama existente
git checkout bug-123

En este caso, el puntero principal HEAD está apuntando a la rama llamada bug-123.

Crear una nueva rama y cambiar a ella
git checkout -b bug-456
Volver a la rama principal (master)
git checkout master
Resolver un merge entre ramas
git merge bug-123

Para realizar el merge, es necesario estar en la rama que recibirá los cambios. El merge puede ser automático o manual. El merge automático ocurre en archivos de texto sin cambios en las mismas líneas, mientras que el merge manual se realiza cuando hay cambios en las mismas líneas.

El mensaje que indica un merge manual será:

Automerging mi_archivo.txt
CONFLICT (content): Merge conflict in mi_archivo.txt
Automatic merge failed; fix conflicts and then commit the result.
Eliminar una rama
git branch -d bug-123
Listar ramas
Listar ramas
git branch
Listar ramas con información de los últimos commits
git branch -v
**Listar ramas que ya han sido fusionadas (merged) con el master
git branch --merged
**Listar ramas que no han sido fusionadas (merged) con el master
git branch --no-merged
Crear ramas en el repositorio remoto
Crear una rama remota con el mismo nombre
git push origin bug-123
Crear una rama remota con un nombre diferente
git push origin bug-123:nueva-rama
Descargar una rama remota para edición
git checkout -b bug-123 origin/bug-123
Eliminar una rama remota
git push origin :bug-123

Rebase

Realizando un rebase entre la rama bug-123 y master:

git checkout experiment
git rebase master

Más información y explicaciones sobre el Rebasing.

Stash

Para alternar entre una rama y otra, es necesario hacer commit de los cambios actuales antes de cambiar de rama. Si es necesario realizar el cambio sin hacer el commit, se puede crear un stash. El stash actúa como una rama temporal que contiene solo los cambios aún no commitados.

Crear un stash
git stash
Listar stashes
git stash list
Volver al último stash
git stash apply
Volver a un stash específico
git stash apply stash@{2}

Donde 2 es el índice del stash deseado.

Crear una rama a partir de un stash
git stash branch mi_rama

Reescribiendo el historial

Cambiando mensajes de commit
git commit --amend -m "Mi nuevo mensaje"
Modificar los últimos commits

Modificando los últimos tres commits:

git rebase -i HEAD~3

El editor de texto se abrirá con las líneas que representan los últimos tres commits.

pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added catfile

Cambia a edit para los commits que deseas modificar.

edit f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added catfile

Cierra el editor de texto.

Escribe el comando para cambiar el mensaje del commit marcado como edit:

git commit –amend -m “Nuevo mensaje”

Aplica el cambio:

git rebase --continue

Atención: Puedes cambiar el orden de los commits o eliminar uno modificando o eliminando líneas.

Combinando varios commits

Siga los mismos pasos mencionados anteriormente, pero marque los commits que deben ser combinados con squash.

Eliminar todo el historial de un archivo
git filter-branch --tree-filter 'rm -f passwords.txt' HEAD

Bisect

El bisect (búsqueda binaria) es útil para encontrar un commit que está causando un error o una inconsistencia en una secuencia de commits.

Iniciar búsqueda binaria
git bisect start
Marcar el commit actual como malo
git bisect bad
Marcar un commit de una etiqueta sin el error/inconsistencia
git bisect good vs-1.1
Marcar el commit como bueno

GIT navegará entre los commits para ayudar a identificar el commit problemático. Si el commit actual no tiene problemas, márcalo como bueno.

git bisect good
Marcar el commit como malo

Si el commit tiene problemas, márcalo como malo.

git bisect bad
Finalizar la búsqueda binaria

Después de encontrar el commit problemático, para volver al HEAD usa:

git bisect reset

Contribuciones

Siéntete libre de añadir más información o realizar correcciones. ¡Haz un fork!

GIT

États

  • Modifié (modified);
  • Préparé (staged/index);
  • Consolidé (committed);

Aide

Général
git help
Commande spécifique
git help add
git help commit
git help <n'importe quelle_commande_git>

Configuration

Général

Les configurations GIT sont stockées dans le fichier .gitconfig, situé dans le répertoire utilisateur du système d'exploitation (ex.: Windows: C:\Users\Documents and Settings\Leonardo ou *nix /home/leonardo).

Les configurations effectuées via les commandes ci-dessous seront incluses dans le fichier mentionné.

Définir l'utilisateur
git config --global user.name "Leonardo Comelli"
Définir l'email
git config --global user.email [email protected]
Définir l'éditeur
git config --global core.editor vim
Définir l'outil de fusion
git config --global merge.tool vimdiff
Définir les fichiers à ignorer
git config --global core.excludesfile ~/.gitignore
Lister les configurations
git config --list

Ignorer les Fichiers

Les noms de fichiers/répertoires ou extensions listés dans le fichier .gitignore ne seront pas ajoutés à un dépôt. Il existe deux fichiers .gitignore :

  • Global : Généralement stocké dans le répertoire utilisateur. Ce fichier contient la liste des fichiers/répertoires à ignorer pour tous les dépôts et n'a pas besoin de s'appeler .gitignore.

  • Par dépôt : Stocké dans le répertoire du dépôt, il contient la liste des fichiers/répertoires à ignorer uniquement pour ce dépôt spécifique.

Dépôt Local

Créer un nouveau dépôt

git init

Vérifier l'état des fichiers/répertoires

git status

Ajouter un fichier/répertoire à la zone de staging

Ajouter un fichier spécifique
git add mon_fichier.txt
Ajouter un répertoire spécifique
git add mon_repertoire
Ajouter tous les fichiers/répertoires
git add .
Ajouter un fichier qui est listé dans .gitignore (global ou spécifique au dépôt)
git add -f fichier_dans_gitignore.txt

Commiter un fichier/répertoire

Commiter un fichier
git commit mon_fichier.txt
Commiter plusieurs fichiers
git commit mon_fichier.txt mon_autre_fichier.txt
Commiter avec un message
git commit mon_fichier.txt -m "mon message de commit"

Supprimer un fichier/répertoire

Supprimer un fichier
git rm mon_fichier.txt
Supprimer un répertoire
git rm -r repertoire

Visualiser l'historique

Afficher l'historique
git log
Afficher l'historique avec les différences des deux dernières modifications
git log -p -2
Afficher un résumé de l'historique (hash complet, auteur, date, commentaire, et nombre de modifications (+/-))
git log --stat
Afficher les informations résumées en une seule ligne (hash complet et commentaire)
git log --pretty=oneline
Afficher l'historique avec un format spécifique (hash abrégé, auteur, date, et commentaire)
git log --pretty=format:"%h - %an, %ar : %s"
  • %h: Abréviation du hash
  • %an: Nom de l'auteur
  • %ar: Date
  • %s: Commentaire

Consultez les autres options de formatage dans le Git Book.

Afficher l'historique d'un fichier spécifique
git log -- <chemin_du_fichier>
Afficher l'historique d'un fichier contenant un mot spécifique
git log --summary -S<mot> [<chemin_du_fichier>]
Afficher les modifications d'un fichier
git log --diff-filter=M -- <chemin_du_fichier>
  • <D> peut être remplacé par: Ajouté (A), Copié (C), Supprimé (D), Modifié (M), Renommé (R), entre autres.
Afficher l'historique d'un auteur spécifique
git log --author=utilisateur
Afficher la révision et l'auteur de la dernière modification d'un bloc de lignes
git blame -L 12,22 mon_fichier.txt

Annuler des opérations

Annuler une modification locale (répertoire de travail)

Ce command doit être utilisé tant que le fichier n'a pas été ajouté à la zone de staging.

git checkout -- mon_fichier.txt
Annuler une modification locale (staging area)

Ce command doit être utilisé lorsque le fichier a déjà été ajouté à la zone de staging.

git reset HEAD mon_fichier.txt

Si le résultat ci-dessous apparaît, la commande reset n'a pas modifié le répertoire de travail :

Unstaged changes after reset:
M    mon_fichier.txt

Le changement du répertoire peut être réalisé avec la commande suivante :

git checkout mon_fichier.txt

Dépôt Distant

Afficher les dépôts distants

git remote
git remote -v

Lier un dépôt local à un dépôt distant

git remote add origin [email protected]:leocomelli/curso-git.git

Afficher les informations des dépôts distants

git remote show origin

Renommer un dépôt distant

git remote rename origin cours-git

Dissocier un dépôt distant

git remote rm cours-git

Pousser des fichiers/répertoires vers le dépôt distant

Le premier push d'un dépôt doit contenir le nom du dépôt distant et la branche :

git push -u origin master

Les push suivants ne nécessitent pas cette information :

git push

Mettre à jour le dépôt local selon le dépôt distant

Mettre à jour les fichiers sur la branche actuelle
git pull
Récupérer les modifications sans les appliquer à la branche actuelle
git fetch

Cloner un dépôt distant existant

git clone [email protected]:leocomelli/curso-git.git

Tags

Créer une tag légère
git tag vs-1.1
Créer une tag annotée
git tag -a vs-1.1 -m "Ma version 1.1"
Créer une tag signée

Pour créer une tag signée, une clé privée (GNU Privacy Guard - GPG) est nécessaire :

git tag -s vs-1.1 -m "Ma tag signée 1.1"
Créer une tag à partir d'un commit (hash)
git tag -a vs-1.2 9fceb02
Pousser une tag vers le dépôt distant
git push origin vs-1.2
Pousser toutes les tags locales vers le dépôt distant
git push origin --tags

Branches

La branche master est la branche principale de GIT.

Le HEAD est un pointeur spécial qui indique la branche actuelle. Par défaut, HEAD pointe vers la branche principale, master.

Créer une nouvelle branche
git branch bug-123
Passer à une branche existante
git checkout bug-123

Dans ce cas, le pointeur principal HEAD pointe vers la branche appelée bug-123.

Créer et basculer vers une nouvelle branche
git checkout -b bug-456
Revenir à la branche principale (master)
git checkout master
Résoudre un merge entre les branches
git merge bug-123

Pour effectuer le merge, il est nécessaire d'être sur la branche qui recevra les modifications. Le merge peut être automatique ou manuel. Le merge automatique se fait sur des fichiers texte sans modifications aux mêmes lignes, tandis que le merge manuel est requis lorsque des modifications existent sur les mêmes lignes.

Le message indiquant un merge manuel sera :

Automerging mon_fichier.txt
CONFLICT (content): Merge conflict in mon_fichier.txt
Automatic merge failed; fix conflicts and then commit the result.
Supprimer une branche
git branch -d bug-123
Lister les branches
Lister les branches
git branch
Lister les branches avec les informations des derniers commits
git branch -v
Lister les branches déjà fusionnées avec master
git branch --merged
Lister les branches non fusionnées avec master
git branch --no-merged
Créer des branches sur le dépôt distant
Créer une branche distante avec le même nom
git push origin bug-123
Créer une branche distante avec un nom différent
git push origin bug-123:new-branch
Télécharger une branche distante pour l'édition
git checkout -b bug-123 origin/bug-123
Supprimer une branche distante
git push origin :bug-123

Rebasing

Effectuer le rebase entre la branche bug-123 et master :

git checkout experiment
git rebase master

Plus d'informations et d'explications sur le Rebasing.

Stash

Pour basculer d'une branche à une autre, il est nécessaire de faire le commit des modifications actuelles avant de changer de branche. Si le changement est nécessaire sans effectuer le commit, il est possible de créer un stash. Le stash fonctionne comme une branche temporaire contenant uniquement les modifications non encore commit.

Créer un stash
git stash
Lister les stashes
git stash list
Appliquer le dernier stash
git stash apply
Revenir à un stash spécifique
git stash apply stash@{2}

2 est l'index du stash souhaité.

Créer une branche à partir d'un stash
git stash branch ma_branche

Réécrire l'historique

Modifier les messages de commit
git commit --amend -m "Mon nouveau message"
Modifier les derniers commits

En modifiant les trois derniers commits:

git rebase -i HEAD~3

L'éditeur s'ouvrira avec les lignes des trois derniers commits.

N'oublie de me dizer se quiseres mais traduções!

Fusionner plusieurs commits

Suivez les mêmes étapes ci-dessus, mais marquez les commits à fusionner avec squash.

Supprimer tout l'historique d'un fichier
git filter-branch --tree-filter 'rm -f passwords.txt' HEAD

Bisect

Le bisect (recherche binaire) est utile pour trouver un commit qui cause un bug ou une incohérence dans une série de commits.

Commencer la recherche binaire
git bisect start
Marquer le commit actuel comme mauvais
git bisect bad
Marquer un commit tagué sans le bug/incohérence
git bisect good vs-1.1
Marquer le commit comme bon

GIT va naviguer entre les commits pour aider à identifier le commit problématique. Si le commit actuel n'a pas de problème, marquez-le comme bon.

git bisect good
Marquer le commit comme mauvais

Si le commit a un problème, marquez-le comme mauvais.

git bisect bad
Terminer la recherche binaire

Après avoir trouvé le commit problématique, pour revenir à HEAD utilisez :

git bisect reset

Contributions

N'hésitez pas à ajouter plus d'informations ou à faire des corrections. Forkez-moi !

GIT

Estados

  • Modificado (modified);
  • Preparado (staged/index)
  • Consolidado (comitted);

Ajuda

Geral
git help
Comando específico
git help add
git help commit
git help <qualquer_comando_git>

Configuração

Geral

As configurações do GIT são armazenadas no arquivo .gitconfig localizado dentro do diretório do usuário do Sistema Operacional (Ex.: Windows: C:\Users\Documents and Settings\Leonardo ou *nix /home/leonardo).

As configurações realizadas através dos comandos abaixo serão incluídas no arquivo citado acima.

Setar usuário
git config --global user.name "Leonardo Comelli"
Setar email
git config --global user.email [email protected]
Setar editor
git config --global core.editor vim
Setar ferramenta de merge
git config --global merge.tool vimdiff
Setar arquivos a serem ignorados
git config --global core.excludesfile ~/.gitignore
Listar configurações
git config --list

Ignorar Arquivos

Os nomes de arquivos/diretórios ou extensões de arquivos listados no arquivo .gitignore não serão adicionados em um repositório. Existem dois arquivos .gitignore, são eles:

  • Geral: Normalmente armazenado no diretório do usuário do Sistema Operacional. O arquivo que possui a lista dos arquivos/diretórios a serem ignorados por todos os repositórios deverá ser declarado conforme citado acima. O arquivo não precisa ter o nome de .gitignore.

  • Por repositório: Deve ser armazenado no diretório do repositório e deve conter a lista dos arquivos/diretórios que devem ser ignorados apenas para o repositório específico.

Repositório Local

Criar novo repositório

git init

Verificar estado dos arquivos/diretórios

git status

Adicionar arquivo/diretório (staged area)

Adicionar um arquivo em específico
git add meu_arquivo.txt
Adicionar um diretório em específico
git add meu_diretorio
Adicionar todos os arquivos/diretórios
git add .	
Adicionar um arquivo que esta listado no .gitignore (geral ou do repositório)
git add -f arquivo_no_gitignore.txt

Comitar arquivo/diretório

Comitar um arquivo
git commit meu_arquivo.txt
Comitar vários arquivos
git commit meu_arquivo.txt meu_outro_arquivo.txt
Comitar informando mensagem
git commit meuarquivo.txt -m "minha mensagem de commit"

Remover arquivo/diretório

Remover arquivo
git rm meu_arquivo.txt
Remover diretório
git rm -r diretorio

Visualizar histórico

Exibir histórico
git log
Exibir histórico com diff das duas últimas alterações
git log -p -2
Exibir resumo do histórico (hash completa, autor, data, comentário e qtde de alterações (+/-))
git log --stat
Exibir informações resumidas em uma linha (hash completa e comentário)
git log --pretty=oneline
Exibir histórico com formatação específica (hash abreviada, autor, data e comentário)
git log --pretty=format:"%h - %an, %ar : %s"
  • %h: Abreviação do hash;
  • %an: Nome do autor;
  • %ar: Data;
  • %s: Comentário.

Verifique as demais opções de formatação no Git Book

Exibir histório de um arquivo específico
git log -- <caminho_do_arquivo>
Exibir histórico de um arquivo específico que contêm uma determinada palavra
git log --summary -S<palavra> [<caminho_do_arquivo>]
Exibir histórico modificação de um arquivo
git log --diff-filter=M -- <caminho_do_arquivo>
  • O pode ser substituido por: Adicionado (A), Copiado (C), Apagado (D), Modificado (M), Renomeado (R), entre outros.
Exibir histório de um determinado autor
git log --author=usuario
Exibir revisão e autor da última modificação de uma bloco de linhas
git blame -L 12,22 meu_arquivo.txt 

Desfazendo operações

Desfazendo alteração local (working directory)

Este comando deve ser utilizando enquanto o arquivo não foi adicionado na staged area.

git checkout -- meu_arquivo.txt
Desfazendo alteração local (staging area)

Este comando deve ser utilizando quando o arquivo já foi adicionado na staged area.

git reset HEAD meu_arquivo.txt

Se o resultado abaixo for exibido, o comando reset não alterou o diretório de trabalho.

Unstaged changes after reset:
M	meu_arquivo.txt

A alteração do diretório pode ser realizada através do comando abaixo:

git checkout meu_arquivo.txt

Repositório Remoto

Exibir os repositórios remotos

git remote

git remote -v

Vincular repositório local com um repositório remoto

git remote add origin [email protected]:leocomelli/curso-git.git

Exibir informações dos repositórios remotos

git remote show origin

Renomear um repositório remoto

git remote rename origin curso-git

Desvincular um repositório remoto

git remote rm curso-git

Enviar arquivos/diretórios para o repositório remoto

O primeiro push de um repositório deve conter o nome do repositório remoto e o branch.

git push -u origin master

Os demais pushes não precisam dessa informação

git push

Atualizar repositório local de acordo com o repositório remoto

Atualizar os arquivos no branch atual
git pull
Buscar as alterações, mas não aplica-las no branch atual
git fetch

Clonar um repositório remoto já existente

git clone [email protected]:leocomelli/curso-git.git

Tags

Criando uma tag leve
git tag vs-1.1
Criando uma tag anotada
git tag -a vs-1.1 -m "Minha versão 1.1"
Criando uma tag assinada

Para criar uma tag assinada é necessário uma chave privada (GNU Privacy Guard - GPG).

git tag -s vs-1.1 -m "Minha tag assinada 1.1"
Criando tag a partir de um commit (hash)
git tag -a vs-1.2 9fceb02
Criando tags no repositório remoto
git push origin vs-1.2
Criando todas as tags locais no repositório remoto
git push origin --tags

Branches

O master é o branch principal do GIT.

O HEAD é um ponteiro especial que indica qual é o branch atual. Por padrão, o HEAD aponta para o branch principal, o master.

Criando um novo branch
git branch bug-123
Trocando para um branch existente
git checkout bug-123

Neste caso, o ponteiro principal HEAD esta apontando para o branch chamado bug-123.

Criar um novo branch e trocar
git checkout -b bug-456
Voltar para o branch principal (master)
git checkout master
Resolver merge entre os branches
git merge bug-123

Para realizar o merge, é necessário estar no branch que deverá receber as alterações. O merge pode automático ou manual. O merge automático será feito em arquivos textos que não sofreram alterações nas mesmas linhas, já o merge manual será feito em arquivos textos que sofreram alterações nas mesmas linhas.

A mensagem indicando um merge manual será:

Automerging meu_arquivo.txt
CONFLICT (content): Merge conflict in meu_arquivo.txt
Automatic merge failed; fix conflicts and then commit the result.
Apagando um branch
git branch -d bug-123
Listar branches
Listar branches
git branch
Listar branches com informações dos últimos commits
git branch -v
Listar branches que já foram fundidos (merged) com o master
git branch --merged
Listar branches que não foram fundidos (merged) com o master
git branch --no-merged
Criando branches no repositório remoto
Criando um branch remoto com o mesmo nome
git push origin bug-123
Criando um branch remoto com nome diferente
git push origin bug-123:new-branch
Baixar um branch remoto para edição
git checkout -b bug-123 origin/bug-123
Apagar branch remoto
git push origin:bug-123

Rebasing

Fazendo o rebase entre um o branch bug-123 e o master.

git checkout experiment

git rebase master

Mais informações e explicações sobre o Rebasing

###Stash

Para alternar entre um branch e outro é necessário fazer o commit das alterações atuais para depois trocar para um outro branch. Se existir a necessidade de realizar a troca sem fazer o commit é possível criar um stash. O Stash como se fosse um branch temporário que contem apenas as alterações ainda não commitadas.

Criar um stash
git stash
Listar stashes
git stash list
Voltar para o último stash
git stash apply
Voltar para um stash específico
git stash apply stash@{2}

Onde 2 é o indíce do stash desejado.

Criar um branch a partir de um stash
git stash branch meu_branch

Reescrevendo o histórico

Alterando mensagens de commit
git commit --amend -m "Minha nova mensagem"
Alterar últimos commits

Alterando os três últimos commits

git rebase -i HEAD~3

O editor de texto será aberto com as linhas representando os três últimos commits.

pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added catfile

Altere para edit os commits que deseja realizar alterações.

edit f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added catfile

Feche o editor de texto.

Digite o comando para alterar a mensagem do commit que foi marcado como edit.

git commit –amend -m “Nova mensagem”

Aplique a alteração

git rebase --continue

Atenção: É possível alterar a ordem dos commits ou remover um commit apenas mudando as linhas ou removendo.

Juntando vários commits

Seguir os mesmos passos acima, porém marcar os commtis que devem ser juntados com *squash

Remover todo histórico de um arquivo
git filter-branch --tree-filter 'rm -f passwords.txt' HEAD

Bisect

O bisect (pesquisa binária) é útil para encontrar um commit que esta gerando um bug ou uma inconsistência entre uma sequência de commits.

Iniciar pequinsa binária
git bisect start
Marcar o commit atual como ruim
git bisect bad
Marcar o commit de uma tag que esta sem o bug/inconsistência
git bisect good vs-1.1
Marcar o commit como bom

O GIT irá navegar entre os commits para ajudar a indentificar o commit que esta com o problema. Se o commit atual não estiver quebrado, então é necessário marca-lo como bom.

git bisect good
Marcar o commit como ruim

Se o commit estiver com o problema, então ele deverá ser marcado como ruim.

git bisect bad
Finalizar a pesquisa binária

Depois de encontrar o commit com problema, para retornar para o HEAD utilize:

git bisect reset

Contribuições

Sinta-se a vontade para realizar adicionar mais informações ou realizar correções. Fork me!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment