/etc/gitconfig (específica del sistema, en windows en el $HOME del usuario)
>git config --system --list
~/.gitconfig o ~/.config/git/config (específicas del usuario)
>git config --global --list
.git/config (específica del repositorio).
>git config --list
Cada uno de estos sobreescribe el comportamiento del anterior en este orden
Valores que se pueden cambiar: user.name, user.email, core.editor
>git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst ..."
>git init
>git clone https://github.com/libgit2/libgt2
se puede especificar el directorio destino con
>git clone https://github.com/libgit2/libgt2 mlibgit
>git add *.c
>git rm --cached README
>git commit -m 'Texto para el commit'
Si no se especifica la opción -m se lanzará el editor por defecto para guardar en un fichero temporal el mensaje del commit. Con el flag -a se realizará commit de todos aquellos ficheros que estén siendo registrados, aunque no estén stageados
>git status On branch master No commits yet nothing to commit (create/copy files and use "git add" to track)
>echo 'My project' > README >git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) README nothing added to commit but untracked files present (use "git add" to track)
>git add README >git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: README
Suponiendo un fichero CONTRIBUTING.md existe y está comiteado, tras modificarlo lo que saldrá del status es lo siguiente:
>git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: README 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: CONTRIBUTING.md
Tras esto hay que añadirlo al staging para que a continuación salga lo siguiente:
>git add CONTRIBUTING.md >git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: CONTRIBUTING.md new file: README
Si se modifica el fichero CONTRIBUTING.md el resultado del status es el siguiente
>echo "huy" > CONTRIBUTING.md >git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: CONTRIBUTING.md new file: README 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: CONTRIBUTING.md
El fichero que se comitearia sería el primero. Si se quiere comitear el segundo hay que hacer otro git add
git add CONTRIBUTING.md git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: CONTRIBUTING.md new file: README
existe una manera de sacar estos listados de manera abreviada:
>git status --short M CONTRIBUTING.md A README MM fichero1 ?? fichero2 M fichero3
Los ficheros que no se han registrado en el staging aún tienen un ??. Los nuevos ficheros que se han añadido al staging tienen una A, los modificados tienen una M. Además hay dos columnas, la primera o izquierda indica el estado del staging, y la segunda la del working tree. De esta manera el fichero3 está modificado en el working directory pero no está en el staging, mientras que el contriguting.md está modificado en el working tree y está en el staging, mientras que el fichero1 está modificado en el working tree, stageado y vuelvo a modificar sin stagear
>cat .gitignore
Las líneas en blanco o que empiecen por # son ignoradas. Las expresiones regulares se realizan con patrones glob. Los patrones que empiezan por / evitan la recursividad. El resto de / especifican un directorio. La ! niega el patrón
>git diff diff --git a/src/app/app.component.ts b/src/app/app.component.ts index c41599e..8c1cf1c 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -6,5 +6,5 @@ import { Component } from '@angular/core'; styleUrls: ['./app.component.css'] }) export class AppComponent { - title = 'Tour of Heroes'; + title = 'Tour of Heroes 2'; }
Compara lo que hay en el staging area con el working directory. Si a continuación se añade el fichero no habrá ninguna diferencia
>git add src\app\app.component.ts >git diff >
Si se quiere ver lo que va a entrar en el commit hay que compara con el stagging
>git diff --staged diff --git a/src/app/app.component.ts b/src/app/app.component.ts index c41599e..8c1cf1c 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -6,5 +6,5 @@ import { Component } from '@angular/core'; styleUrls: ['./app.component.css'] }) export class AppComponent { - title = 'Tour of Heroes'; + title = 'Tour of Heroes 2'; }
Para elegir otra herramienta para ver las diferencias, se pueden listar las disponibles mediante:
>git difftool --tool-help >git difftool --tool=winmerge
En el fichero .git/config habrá que añadir las siguientes líneas
[diff] tool = winmerge [difftool "winmerge"] name = "WinMerge" trustExitCode = true cmd = "/c/Program\\ Files\\ \\(x86\\)/WinMerge/WinMergeU.exe" -u -e -dl \"Local\" -dr \"Remote\" $LOCAL $REMOTE $MERGED [merge] tool = winmerge [mergetool "winmerge"] name = WinMerge trustExitCode = true cmd = "/c/Program\\ Files\\ \\(x86\\)/WinMerge/WinMergeU.exe" -u -e -dl \"Local\" -dr \"Remote\" $LOCAL $REMOTE $MERGED
y su uso se realizará de la siguiente forma:
>git difftool --staged
Para borrar un fichero hay que quitarlo del staging y hacer commit
>rm PROJECTS.md >git rm PROJECTS.md >git commit
Si ya se había metido en el index lo que hay que hacer es utilizar el flag -f Si lo que se quiere es eliminarlo del staging pero no del working tree, lo que hay que hacer es utilizar la opción –cached
>git log >git log -p (lista diferencias entre commits) >git log -2 (muestra únicamente los últimos dos) >git log --pretty=oneline (muestra commits resumidos uno por línea) >git log --pretty=format:"%h %s" --graph (muestra en formato de gráfico el historial de commits) >git log --since=2.weeks (muestra los commits desde hace 2 commits. Funciona con --until y como valores fechas "2018-01-01" o "3 years 1 day 3 minutes ago". Los flags --author --grep. Por defecto son or. Si se quiere and hay que utilizar --all-match. -S muestra únicamente los commits que hay añadido o modificado esa cadena
>git commit --amend
Hace commit del staging area y modifica para ello el último commit. En caso de que no haya nada, lo único que hace es cambiar el mensaje de commit
Si lo que se quiere es quitar del staging un fichero, git status muestra cómo hacerlo
>git status >git reset HEAD CONTRIBUTING.md
Para dejar el fichero como estaba tras el último commit lo que hay que hacer es lo siguiente:
>git checkout -- CONTRIBUTING.md
>git remote origin >git remote -v origin https://gitlab.com/Aquiles1184/angular-tour-of-heroes.git (fetch) origin https://gitlab.com/Aquiles1184/angular-tour-of-heroes.git (push)
Esto muestra todos los repositorios remotos configurados a los que se puede hacer push. Para añadir uno nuevo hay que utilizar el comando:
>git remote add minombre https://github.com/paulboone/ticgit
Esto añadirá las dos líneas del ejemplo anterior
Para descargar todos los cambios se realiza:
>git fetch nombre remoto
El comando clone automáticamente configura el master local para registrar la rama master remota en el servidor.
>git pull
descarga los datos y trata de hacer merge en la misma rama local
Para subir los cambios:
>git push origin master
Este comando sube la rama master al servidor apuntado por origin
Para ver informacion del repositorio remoto
>git remote show origin * remote origin Fetch URL: https://gitlab.com/Aquiles1184/angular-tour-of-heroes.git Push URL: https://gitlab.com/Aquiles1184/angular-tour-of-heroes.git HEAD branch: master Remote branch: master tracked Local ref configured for 'git push': master pushes to master (up to date)
Para renombrar un repositorio remoto la sintaxis es:
>git remote rename pb paul
Para borrar un repositorio remoto
>git remote rm paul
>git tag
Muestra todas las etiquetas del proyecto. También es posible buscar con caracteres comodín
>git tag -l "v1.8.5*"
Para crear un branch
>git checkout -b nombreBranch [tag]
Si [tag] tiene algo se creará un branch de ese tag. En caso contrario se creará un branch con lo que se tenga en ese momento en el working tree