Ayuda
git help <command>
Para iniciar proyecto
git init
Añadir Ficheros
git add . Añadir todos los ficheros
git add nombre_fichero Añadir por nombre de fichero
git add <dir> Añade recursivamente todos los archivos del dir
Diferencias
git diff
Estado del repositorio
git status -s
Visualizar Ramas locales
git branch -a
Visualizar Ramas remotas
git branch -r
Eliminar Rama
git branch -d rama_nombre, mergeada
git branch -D rama_nombre-rama , sin mergear
Eliminar rama remota
git push origin :rama_nombre
Visualizar Otras formas
git ls-remote, muestra el SHA1 del último commit1
git remote
Visualizar los diferentes repositorios
git remote -v
Eliminar repositorios
git remote rm origin
Consolidar Cambios
git commit
git commit -m 'mensaje de confirmacion'
Cambiar el mensaje del último commit. Esta instrucción abre el editor por defecto permitiendo editar el mensaje, al guardar se actualiza.
git commit --amend
Eliminar cambios que no están guardados
git checkout -- file
Mensaje recomendado para commit
Título: Resumen de los cambios
Explicación en mas detalle:
- Detalle 1
- Detalle 2
Pie: IDs de issue trackers...
Resuelve: #001
Afecta a: #254, #454
Eliminar último Commit, si no se ha enviado al origen
git reset HEAD^ --hard
Eliminar último Commit sin perder los cambios, si no se ha enviado al origen
git reset HEAD^ --soft
Eliminar el último commit, en este caso ya se ha enviado al repositorio remoto
git reset HEAD^ --hard
git push origin -f
git log nos permite ver el historial de commits
git log
git log file
git log —oneline nos permite ver los registros en una líneagit branch Lista ramas
git branch <nombre-rama> Crea rama.
git checkout -b <nombre-rama> Crea y cambia de rama
git swicht nombreRama Cambia a la rama nombreRama
git merge <rama> Mezcla la rama actual con <rama> remota
git branch -d <rama> Elimina la rama
git push origin --delete <branchName> Elimina una rama del servidor
git branch -v Lista ramas mostrando último commit
git branch --merged Lista ramas que han sido mezcladas con la actual.
Si no tienen un *, pueden borrarse, ya que significa que se han incorporado los cambios en la rama actual.
git branch --no-merged Lista ramas que no han sido incorporadas a la actualgit checkout rama
Ejemplo:
git branch origin/prod En caso de no tenerla se crea la rama origin/prod
git branch -a Vomprobar que realmente estamos en master
git branch --track prod origin/prod Si no lo tenemos ya asocia prod a origin/prod
git swicht prod Cambiamos a la rama prod
git merge master Se merguean los cambios desde master a prod
git push Se suben los cambios del repositorio local al remoto
git pull Se bajan los cambios al repositorio local Ramas Remotas
git diff Comparar cambios en el directorio
git diff file Comparar cambios para el fichero
git diff <source_branch> <target_branch> Comparar ramas
git diff 55a55 44m22 Comparar commits
git diff HEAD Comparar directorio de trabajo con el HEAD
git diff master rama2 -- test.text Comparar ficheros en ramas
git diff master..develop > diffFile.diff Genera la salida a un fichero
git diff --name-status master..rama2 Visualiza el estado de los ficheros
git diff --stat master..rama2 Visualiza el diffstat de los ficheros
Iterfaz para git-diff que acepta los argumentos de git diff
git difftool -d master rama2
git diff HEAD^ HEAD Compara HEAD^, el penúltimo commit con HEAD, el último commit
git diff HEAD^ Mismo resulta que el anterior
git diff HEAD^.. --name-status Listar archivos afectados
git diff HEAD^.. -- ./file2.txt Listar cambios de un fichero concreto
git diff HEAD^.. --stat Listar el stat de los ficheros afectados
git diff HEAD~3 Listar cambios entre el commit actual y 3 commits anteriores
- Rama master: Rama de producción.
- Todos los commits tienen que ser optimos para subir a producción.
- Cada vez que se incorpora código a master se genera una nueva versión.
- Rama develop: rama en la que está el código que conformará la siguiente versión planificada del proyecto.
- Trabajar en rama develop, para uso interno, rama de trabajo de donde salen las todas las ramas que existentes.
* Feature, rama que parte y se incorpora siempre a develop.
* Desarrollo de nuevas características.
* Nombre: si no se usa git flow, fte_...
* Release, se origina en develop con el fin de preparar una versión final y su testeo
* Corrigen el código antes de pasar a master.
* Nombre: si no se usa git flow, rle_...
* Hotfix, se origina a partir de la rama master, se incorpra a master y develop.
* Corrigen errores en producción.
* Nombre: si no se usa git flow, htx_...
* Test, rama para testing, equivalente a release
* Nombre: No esta en gitflow, tsg_---
Ver cambios con ficheros afectados
git log -p
Ver la diferencia entre los archivos que están añadidos y los cambios que aún no están
git diff
Envío de cambios, enviar los cambios de copia local al repositorio
git push origin master #master es la rama a al que quieres enviar tus cambios
Conectar a un repositorio local a uno remoto
git remote add origin <server> #Ruta del servidor
git remote add origin <https://github.com/xx/xx.git>
Cambiar la url del repositorio
git remote set-url origin git@github.com:user/project.git
git remote set-url origin <https://github.com/user/project.git>
Eliminar ficheros del repositorio
git rm file
git commit -m 'comentario del delete' file
git push
Revertir ficheros no commiteados
git checkout -- file
Revertir todos los ficheros modificados
git checkout .
Deshacer el último commit no enviado con push
git reset --hard HEAD~1
Si haces un commit y ves que te has equivocado, basta con que añadas con git add los cambios que faltaran en el área de preparación y hagas un nuevo commit, pero con el sufijo--amend. Esto hará que los cambios se incluyan en el último commit realizado, sin tener que crear uno adicional para corregir el error. Si quieres puedes incluir un -m XXXXXX y modificar el mensaje del mismo.
git commit -m 'Commit erroneo'
git add fichero_pendiente
$ git commit --amend
Revertir el último cambiado, al que se le ha hecho push
git push -f origin last_commit:branch
Clonar Repositorio donde estemos posicionados
git clone <https://github.com/atareao/ejemplo01.git>
git clone username@host:/path/to/repository
git clone /path/to/repository
git clone <uri> namedir # clona usando como nombre de directorio namedir.
Visualizar todos los repositorios remotos
git remote -v
Las ramas son utilizadas para desarrollar funcionalidades aisladas unas de otras.
La rama master o main es la rama "por defecto" cuando creas un repositorio.
Crea nuevas ramas durante el desarrollo y fusiónalas a la rama principal cuando termines.
Crea una nueva rama llamada "feature_x" y cámbiate a ella usando
git checkout -b feature_x
vuelve a la rama principal
git checkout master
y borra la rama
git branch -d feature_x
Una rama nueva no estará disponible para los demás a menos que subas (push) la rama a tu repositorio remoto
git push origin <branch>
El comando git reset nos permite dado un historial de commits, volver a un commit anterior al último. Git reset tiene 3 modos de aplicación
Soft: Elimina el commit y deja los cambios en el staging area y en el working area para seguir trabajando
Mix: Por defercto. Elimina el commit y deja los cambios en el working area.
Hard: Elimina los cambios de todas las areas.
git reset --soft HEAD-2 El 2 indica el número de commits a resetear partiendo desde el HEAD
git reset --hard c4s5s5sEl comando git swicht nos permite cambiar el flujo de trabajo, similar a realizar git checkout nombreRama
git swicht nombreRamaGit restore es similar al git checkout. Se introdujo en las últimas versiones y su finalizad trata de restaurar los ficheros a un estado anterior.
Para ficheros que se encuentren en el working area
git restore usuarios.txtPara ficheros que esten en el stage area, deja los cambios en el working area
git restore --staged usuarios.txtPara eliminar cambios de ficheros que se encuentran en el stage area, sin dejarlos en el working area
git restore --staged --worktree usuarios.txtGit restore tambien nos permite devolver el estado a un fichero de un commit especifico.
git restore --source 45fdf4 usuarios.txtPara fusionar ramas locales, partimos que nos traemos los cambios a la rama donde estamos posicionados.
git merge <branch>
Para actualizar tu repositorio local al commit más nuevo del repositorio.
git pull origin master
Git pull combina git fetch y git merge,el pirmero descarga la copia remota u el segundo combina los cambios locales y remotos.
En ambos casos git intentará fusionar automáticamente los cambios. Es posible que se produzcan conflictos. Somos los responsables de solucionar los conflictos manualmente al editar los archivos mostrados por git.
Al mergear ramas, pueden existir conflictos, en este caso hay que revisar los ficheros.
- Eliminar el commit pendiente si exiten conflictos
git merge --abort
Al hacer merge, puede que queramos forzar los cambios que entran y descartar los locales
sudo git pull -s recursive -X theirs origin master
sudo git checkout --theirs path/to/file
Para deshacer todos los cambios locales y commits realizados, podemos recuperar la versión del servidor y apuntar a tu copia local principal de esta forma.
git fetch origin
git reset --hard origin/master
Se realiza al realizar commit entre ramas que no presentan conflictos. Se suele hacer por ejemplo: entre rama_original (sin cambios) y rama que parte de original.
Añade los cambios de la rama a integrar en la rama develop eliminando el historial de cambios, hace que sea más simple el historial.
Se recomienda crear etiquetas para cada nueva versión publicada de un Puedes crear una nueva etiqueta llamada 1.0.0 ejecutando
git tag -a v1.4.0 -m "my version 1.4.0"
Puedes obtener el commit id con, para salir q+Enter
git log
Subir Etiquetas
git push origin --tags
`git tag --delete nombretag`
`git push --delete origin nombretag`
git config user.name
git config user.email
git config --global user.name "xxx"
git config --global user.email xxx@email.es
git config user.email xxx@email.es
git config user.name "xxx"
git config --global core.editor nano
git config --list
Trasladar a la rama master un commit determinado de una rama sin mergear toda la rama. Solo 1 commit.
git cherry-pick 3cdd67fed7ce2265cb366787455da6fc34c022f5
Para cambiar de la rama de trabajo a otra sin guardar las modificaciones no confirmadas.
git stash
Para guardar stash con un nombre.
git stash save "Requisito 01"
Para visualizar los stash.
El stash{0} siempre es el cambio mas actual, en la parte superior de la lista.
git stash list
Para recuperar el trabajo incompleto, si solo hay un stash.
git stash pop
Para recuperar el trabajo incompleto de la list.
git stash apply stash@{0}
git stash apply stash@{1}
Para eliminar un stash de la lista.
git stash drop stash@{0}
Git nos permite el uso de alias para comandos recurrentes.
git config --global alias.tree "log --graph --decorate --all --oneline"Para conflictos, revisar el Doc/VIM
Para evitar que git pregunte cada vez por las credenciales, activamos el store. La próxima vez que las utilicemos quedarán grabadas.
git config --global credential.helper store
Si queremos que caduque en una hora
git config --global credential.helper 'cache --timeout=3600'
Existe un bloqueo por una operación sin finalizar.
Another git process seems to be running in this repository e.g. an editor opened by 'git commit'
Utilizar
rm -f .git/index.lock
En desarrollo
