13 julio 2016

Tips: Más de 100 comandos para GitHub / Git que deberías conocer

Ayer fue un día de bastante programación y un conflicto con el repositorio de git me llevó al repositorio de hemanth donde conseguí un completo listado con más de 400 comandos para GitHub / Git que son considerados lo más utilizados, cada uno de ellos viene acompañado de la explicación de su uso. Si no tienes ni idea de que es GitHub o simplemente haz tenido problema para instalarlo, puedes ir a la Guía rápida para utilizar GitHub que seguro te sacará todas las dudas.

Ayuda de Git para uso diario, menos de 20 comandos para usar git diariamente.

git help everyday

Muestra la guía de Ayuda de Git

git help -g

Sobreescribir pull

git fetch --all && git reset --hard origin/master

Lista de todos los archivos hasta un commit

git ls-tree --name-only -r <commit-ish>

Actualizar la referencia al primer commit

git update-ref -d HEAD

Lista de todos los archivos en conflicto

git diff --name-only --diff-filter=U

Lista de todos los archivos cambiados en el commit

git diff-tree --no-commit-id --name-only -r <commit-ish>

Ver los cambios que haz hecho desde el último commit

git diff

Compara tus cambios preparados con tu último commit

git diff --cached

Muestra la diferencia entre los cambios registrados y no registrados

git diff HEAD

Lista todos los branches que ya han hecho merged con tu master

git branch --merged master

Cambia rápidamente al branch anterior

git checkout -

Quita los branch que ya han sido fusionados con la master

git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d

Lista todas las ramas y sus últimos commit con el branch

git branch -vv

Realiza un seguimiento del branch

git branch -u origin/mybranch

Elimina un branch local

git branch -d <local_branchname>

Elimina un branch remoto

git push origin --delete <remote_branchname>

Deshacer cambios locales con el último contenido en la cabeza

git checkout -- <file_name>

Revierte un commit creando un nuevo commit

git revert <commit-ish>

Descarta un commit, se recomienda sólo en branch privados

git reset <commit-ish>

Cambia el mensaje del commit anterior

git commit -v --amend

Modifica el Autor

git commit --amend --author='Author Name '

Restablece el autor, después de que el autor a sido cambiado en la configuración global

git commit --amend --reset-author --no-edit

Cambia la URL remota

git remote set-url origin <URL>

Obtiene una lista de todas las referencias remotas

git remote
Alternativa:
git remote show

Obtiene una lista de todos los branches locales y remotos

git branch -a

Obtiene una lista de los branches remotos

git branch -r

Añade las parte que cambiaron de un archivo, en lugar de todo el archivo

git add -p

Busca los bash completados

curl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc

Muestra los cambios de las últimas 2 semanas

git log --no-merges --raw --since='2 weeks ago'
Alternativas:
git whatchanged --since='2 weeks ago'

Visualiza todos los commit de los fork del master

git log --no-merges --stat --reverse master..

Selección de commits a través de los branches usando cherry-pick

git checkout <branch-name> && git cherry-pick <commit-ish>

Encuentra los branches que contienen commit hash

git branch -a --contains <commit-ish>
Alternativa:
git branch --contains <commit-ish>

Alias de Git

git config --global alias.<handle> <command> 
git config --global alias.st status

Guarda rápidamente y de manera provisional (stasheado) los trabajos realizados

git stash
Alternativa:
git stash save

Stasheado de todos los archivos, inclusos los que no están preparados.

git stash save -u
Alternativa:
git stash save --include-untracked

Montrar lista de todos los archivos stasheado

git stash list

Usar cualquier cambio stasheado sin borrarlo de la lista de stasheados

git stash apply <stash@{n}>
git stash pop
Alternatives:
git stash apply stash@{0} && git stash drop stash@{0}

Borrar todos los stashes almacenados

git stash clear
Alternatives:
git stash drop <stash@{n}>

Tomar un archivo específico que haya sido stasheado

git checkout <stash@{n}> -- <file_path>
Alternativa:
git checkout stash@{0} -- <file_path>

Mostrar todos los archivos preparados

git ls-files -t

Mostrar todos los archivos que no han sido preparados

git ls-files --others

Mostrar todos los archivos ignorados

git ls-files --others -i --exclude-standard

Crear un nuevo árbol de trabajo de un repositorio (git 2.5)

git worktree add -b <branch-name> <path> <start-point>

Crear un nuevo árbol de trabajo desde un HEAD

git worktree add --detach <path> HEAD

Eliminar un archivo del repositorio git sin eliminarlo del respositorio local

git rm --cached <file_path>
Alternativa:
git rm --cached -r <directory_path>

Antes de eliminar archivos sin preparar, hacer un recorrido de prueba para obtener la lista de estos archivos.

git clean -n

Forzar la eliminación de archivos sin preparar

git clean -f

Forzar la eliminación de directorios sin preparar

git clean -f -d
Alternativa:
git clean -df

Actualizar todos los submódulos

git submodule foreach git pull

Muestra todos los cambios del branch actual que no han hecho merged con el master

git cherry -v master
Alternativa:
git cherry -v master <branch-to-be-merged>

Renombrar un branch

git branch -m <new-branch-name>
Alternativa:
git branch -m [<old-branch-name>] <new-branch-name>

Actualizar ‘feature’ y hacer merged  ‘master’

git checkout feature && git rebase @{-1} && git checkout @{-2} && git merge @{-1}

Archivar el branch master

git archive master --format=zip --output=master.zip

Modificar el commit anterior sin modificar el mensaje del informe

git add --all && git commit --amend --no-edit

Eliminar las ramas remotas que ya no existan en origin

git fetch -p
Alternativa:
git remote prune origin

Recuperar el commit hash de la revisión inicial

git rev-list --reverse HEAD | head -1

Visualiza el árbol de versiones

git log --pretty=oneline --graph --decorate --all
Alternativa:
gitk --all

Añadir un proyecto a un repositorio usando subárbol

git subtree add --prefix=<directory_name>/<project_name> --squash git@github.com:<username>/<project_name>.git master

Obtiene los últimos cambios de tu repositorio para un proyecto vinculado utilizando subárbol

git subtree pull --prefix=<directory_name>/<project_name> --squash git@github.com:<username>/<project_name>.git master

Exporta un branch y su historial a un archivo

git bundle create <file> <branch-name>

Importa desde un bundle

git clone repo.bundle <repo-dir> -b <branch-name>

Obtiene el nombre del branch actual

git rev-parse --abbrev-ref HEAD

Ignora un archivo que ya le han hecho commit(e.g. Changelog).

git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog

Stashea los cambios antes de reorganizar

git rebase --autostash

Busca por id en el branch local

git fetch origin pull/<id>/head:<branch-name>
Alternatives:
git pull origin pull/<id>/head:<branch-name>

Muestra los tag más recientes de la rama actual

git describe --tags --abbrev=0

Busca diferencias.

git diff --word-diff

No tiene en cuenta los cambios en el archivo de seguimiento

git update-index --assume-unchanged <file_name>

Deshacer

git update-index --no-assume-unchanged <file_name>

Limpiar los archivos de .gitignore.

git clean -X -f

Restaurar archivo eliminado.

git checkout <deleting_commit>^ -- <file_path>

Restaurar archivos con un commit-hash específico

git checkout <commit-ish> -- <file_path>

Siempre reorganizar en lugar de hacer merge

git config --global branch.autosetuprebase always

Listar todos los alias y las configuraciones

git config --list

Hacer caso git sensible

git config --global core.ignorecase false

Tipos de autocorreción.

git config --global help.autocorrect 1

Comprueba si el cambio es parte de un release.

git name-rev --name-only <SHA-1>

Limpiar Dry run.

git clean -fd --dry-run

Marca el commit como una solución al commit anterior

git commit --fixup <SHA-1>

Correción de squash

git rebase -i --autosquash

Salta el area de ensayo durante el commit.

git commit -am <commit message>

Listar los archivos ignorados

git check-ignore *

Status de los archivos ignorados

git status --ignored

Commits en el Branch1 que no están en el Branch2

git log Branch1 ^Branch2

grabar y reutilizar anteriores resoluciones de conflictos

git config --global rerere.enabled 1

Abra todos los archivos en conflicto en un Editor.

git diff --name-only | uniq | xargs $EDITOR

Cuenta el número de objetos sin preparar y su consumo en el disco.

git count-objects --human-readable

Mantenimiento de los objetos inaccesibles

git gc --prune=now --aggressive

Visualiza al instante su repositorio en gitweb.

git instaweb [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]

Visualiza las firmas GPG en el log de confirmación

git log --show-signature

Elimina entradas de la configuración global.

git config --global --unset <entry-name>

Obtenga una nueva rama sin historial

git checkout --orphan <branch_name>

Visualiza la diferencia entre el archivo de producción y la última versión del mismo.

git diff --staged

Extraer un archivo de otro branch.

git show <branch_name>:<file_name>

Lista sólo la raiz y confirma el merge

git log --first-parent

Hace merge entre dos commit

git rebase --interactive HEAD~2

Lista todos los branch

git checkout master && git branch --no-merged

Encuentra utilizando búsqueda binaria

git bisect start                    
git bisect bad                      
git bisect good v2.6.13-rc2         
git bisect bad                      
git bisect good                     
git bisect reset                    

Lista los commits y cambios de un archivo en específico

git log --follow -p -- <file_path>

Clona un sólo branch

git clone -b <branch-name> --single-branch https://github.com/user/repo.git

Crea y cambia a un nuevo branch

git checkout -b <branch-name>

Ignora los archivos que tengan cambios en los commits

git config core.fileMode false
 
Tomado de: http://blog.desdelinux.net/tips-mas-de-40berias-conocer/