git chuleta

propósito

  • chuleta propia sobre git

gitignore

deshacer commits

  • para deshacer un commit ya subido a remote
    • lo primero es hacer un reset en el repositorio local
    • se busca el identificador del commit al que quiere volver por ejemplo con git: View History de visual studio code
    • luego se sube los cambios al remote con la opción -f que fuerza la subida
 git reset <commit> --hard
 git push -f origin master

contador de commits

  • para saber el número de commits de un repositorio
  • git rev-list --count master

comandos

git whatchanged

  • como git log pero más intuitivo por el nombre

git add

  • La forma más fácil de guardar todos los cambios tanto las modificaciones como los borrados y archivos añadidos en el árbol de trabajo es
    • git add -A

git amend

para añadir uno o varios archivos a un commit y mantener el mensaje

git commit -m 'initial commit'
git add <nombreFicheroOlvidado>
git commit --amend

para cambiar el mensaje del último commit

  • git commit --amend esto abre el editor para que puedas modificar el texto del mensaje
  • si el commit ya esta subido al remoto
    • git push -f y se ve el cambio

git branch

  • la rama en la que estas
  • git branch
* gh-pages
  • con -a salen todas las ramas no solo las remotas -r
  • -vv verbose doble con toda la información
c:\proyectos\hugo\javier-programacion>git branch -a -vv
* master                bf44f57 [origin/master] el log de 22/04/2018
  remotes/origin/HEAD   -> origin/master
  remotes/origin/master bf44f57 el log de 22/04/2018
  • atención a la diferencia entre rama y remoto
  • para este proyecto en concreto tengo solo una rama que es master pero que puede ser gh-pages en otros repositorios
  • este repositorio local esta conectado con un repositorio remoto llamado origin
  • cuando hago un push indico primero a que remoto subo que rama
  • git push origin master
  • origin es el alias que se le da al repositorio remoto al hacer
    • git remote add origin .....
  • pero podría tener más alias a repositorios remotos

rama oculta

  • con git branch -a
  • sale una rama oculta que se usa cuando se lanza git fetch antes de hacer un merge
  • cuando se hace git pull se lanza un git fetch y un git merge
  • esta rama oculta también se usa lógicamente para saber que cambios cargarías a la rama local cuando se hace un git pull

crear rama

  • git branch nueva_rama

borrar rama

git branch -d nombre_rama
# si la rama tiene trabajos sin fusionar y queremos forzar el borrado
git branch -D nombre_rama
# borrar la rama en remote
git push origin --delete <nombre rama a borrar>

renombrar rama

# desde otra rama
git branch -m old-name new-name
git branch -m nuevo_disegno nuevo_diseño
# desde la propia rama
git branch -m nuevo_diseño

git checkout

  • cambia la rama activa del repositorio y deja el contenido de la rama actual en el directorio de trabajo
C:\cursos\miriadax\git_github\cal_2com>git branch -a
  inverse
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

C:\cursos\miriadax\git_github\cal_2com>git checkout inverse
Switched to branch 'inverse'

C:\cursos\miriadax\git_github\cal_2com>git branch -a
* inverse
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

git diff

  • muestra los cambios que no están preparados es decir añadidos con git add
git diff
diff --git a/gitChuleta.md b/gitChuleta.mindex a4ee01d..441188e 100644
--- a/gitChuleta.md
--- b/gitChuleta.md
@@ -52,7 +52,11 @@ en git 2.x almacena también los borrados
 git reset --hard
 Please, commit your changes or stash them before you can merge.
  • con git diff --cached puedes ver los cambios que llevas preparados hasta ahora

  • una explicación más completa en la documentación de git-scm

git diff con fetch

  • para ver los cambios que se van a integrar en tu rama local en vez de hacer git pull se puede hacer git fetch origin master lo que baja el repositorio remoto a la rama oculta que podemos ver con git branch -a
  • luego para poder ver esos cambios podemos usar la herramienta difftool
  • podemos configurar git para que use visual studio code como editor de esas diferencias modificando el archivo .gitconfig
[diff]
    tool = vscode
[difftool "vscode"]
    cmd = code --wait --diff $LOCAL $REMOTE
  • de esta forma el comando difftool master origin/master saca archivo a archivo las diferencias preguntando si se usa visual para abrir el archivo y mostrar las diferencias
  • también se puede configurar en el archivo C:\Proyectos\hugo\javier-bitacora\.git\config para que el cambio sólo afecte a ese repositorio concreto
C:\Proyectos\hugo\javier-bitacora>git difftool master origin/master

Viewing (1/1): 'content/bitacora/2020/2020-08-24-bitacora.md'
Launch 'vscode' [Y/n]? y
  • luego para fusionar lo que hemos bajado con git fetch a la rama en la que estamos trabajando hay que hacer
git merge origin/master

git grep

  • para buscar una palabra en el repositiorio
    • a explorar con ejemplos

git log

  • muestra el historial de commits
    • git log --oneline
      • muestra la información en una sola línea
    • git log
    • una entrada de blog sobre esto
    • la salida con formato
      • git log --pretty=format:"%h - %an, %ar : %s"
    • crear un alias para un fomato chulo
    • git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
      • luego se puede usar git lg o git lg -p para ver las diferencias

git pull

  • para actualizar la copia local con el repositorio remoto
git pull

C:\nube\MEGA\mundo>git pull
remote: Counting objects: 3, done.
remote: Compressing objes: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 10 (3/3), done.
From https://github.com/pelos6/mundo
   a56588c..0d8d6f gh-pages   -> origin/gh-pages
Updating a56588c..0d8d6f3
Fast-forward
 miMundo.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  • para saber que recuperaríamos con git pull
-- sobre el proyecto notas-programacion
git fetch origin
git diff origin/gh-pages --name-only
  • la opción --name-only muestra solo el nombre del archivo modificado

  • origen de esta información

  • donde gh-pages es la rama con la que trabajamos en local y que subimos y descargamos del repositorio remoto origin

  • git fetch baja los cambios a una rama oculta y desde allí se consulta

git push

  • La opción -u es la misma que –set-upstream-to. y sirve para indicar cual es el destino remoto por defecto

git tag

  • para borrar un tag en local
  • git tag --delete v.1.0.21
  • con git tag se ven los tags que hay
  • con git fetch --tags se cargan los tags del repositorio remoto
  • atención pues con git pull se carga el código pero no los tags

forzar un push para sobrescribir el remote

  • si quiere que los cambio en local tengan prioridad sobre los del remoto
    • -f de force
git push -f bitbucket master

git remote

  • muestra la información de los repositorios remotos a los que estan conectado

PARA NO USAR CONTRASEÑA

git remote -v
# ves el remote que suele ser del tipo 
origin  https://javieriranzo3@bitbucket.org/javieriranzo3/epacf_adm_test.git (fetch)
# lo borramos
git remote rm origin
# creamos el nuevo remote que va por SSH sin necesidad de contraseña
git remote add origin git@bitbucket.org:javieriranzo3/epacf_adm_test.git
git remote add origin git@bitbucket.org:javieriranzo3/cypress_paddoc.git
origin  https://javieriranzo3@bitbucket.org/javieriranzo3/cypress_paddoc.git (fetch)

git version

  • git --version
  • git versión 2.10.2.windows.1

git config

  • se puede editar directamente
[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	symlinks = false
	ignorecase = true
[remote "origin"]
	url = https://javieriranzo3:xxxxxxxx@bitbucket.org/javieriranzo3/javier-programacion.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

git config --list

core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
diff.astextplain.textconv=astextplain
rebase.autosquash=true
credential.helper=manager
user.name=pelos6
user.email=javieriranzo@hotmail.com
gui.recentrepo=C:/nube/MEGA/programacion/git/first-contributions
gui.recentrepo=C:/proyectosGit/my_project
gui.recentrepo=C:/servidorGit
gui.recentrepo=C:/proyectosGit/prueba.git
gui.recentrepo=C:/nube/MEGA/programacion/HtmlCssEstatico/jekyll/notas-programacion
http.postbuffer=157286400
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
remote.origin.url=https://javieriranzo3:pelos678@bitbucket.org/javieriranzo3/notas-programacion.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.gh-pages.remote=origin
branch.gh-pages.merge=refs/heads/gh-pages
gui.encoding=utf-8
gui.wmstate=zoomed
gui.geometry=584x210+104+104 483 430
  • para configurar el editor que sale al hacer commit sin indicar el mensaje

git config --global core.editor notepad

paginar

  • core.pager

  • El parámetro core.pager selecciona el paginador utilizado por Git cuando muestra resultados de comandos tales como ‘log’ o diff . Puedes ajustarlo para que utilice ‘more’ o tu paginador favorito, (por defecto, se utiliza less); o puedes anular la paginación si le asignas una cadena vacía.

git config --global core.pager ''
  • Si lanzas esto, Git mostrará siempre el resultado completo de todos los comandos, independientemente de lo largo que sea este.

  • origen

  • de less se sale con q en modo dos puntos

  • esto explica el problema con diff y log

  • otra solución es sacar el resultado del comando a un fichero y consultarlo luego

git diff > diff.md

recuperar un archivo borrado

git log --oneline --name-status --diff-filter=D -- **/figueras15entloIzdaInquilinos
  • falta saber como salir de la edición
    • se sale con q simplemente
  • para recuperar un archivo borrado de un repositorio git
    • primero encuentro en que commit se borro git log --diff-filter=D --summary > aborrar.txt
    • en aborrar puedo buscar el archivo y la información del commit
    • luego ese commit lo descargo en un zip …

grafico de commits

  • para sacar un gráfico rudimentario de commits
git log --oneline --graph --all
| * e765511 automatico notas-programacion
| *   90fd75f Merge branch 'gh-pages' of https://bitbucket.org/javieriranzo3/notas-programacion into gh-pages
| |\
| * | 073b5f7 automatico notas-programacion
* | | 9d962d6 automatico notas-programacion
| |/
|/|
* | 4fe3c1c automatico notas-programacion
* | d902fb8 para probar el stat
|/
* a8515be automatico notas-programacion
  • para todas las ramas con --all

BORRA EL GESTOR DE CONTRASEÑAS

  • es molesto cuando tienes varios usuarios
  • lanzarlo como administrador del equipo
  • origen

git config --system --unset credential.helper

.gitignore

recuperar un archivo de un commit anterior

  • primero para ver que commits hemos hecho
  • git log --oneline
  • una vez encontrado el commit usamos su valor sha1 para la siguiente instrucción
  • git checkout b6a56c7 hola.md
  • donde b6a56c7 es la etiqueta sha1 del commit y hola.md es el fichero que queremos recuperar
    • en ese momento el archivo hola.md que teníamos en la copia de trabajo se habrá sustituido por el que teníamos en el commit seleccionado

ejemplo

  • he perdido en el directorio de trabajo de mi portátil un script del proyecto TEST-EPACF
  • en el repositorio remoto en bitbucket aún lo tengo
  • el último commit es aa43d09
C:\proyectos\TEST-EPACF>git log --oneline
aa43d09 (HEAD -> master, origin/master) automatico TEST-EPACF26/03/2019
c32cc automático TEST-EPACF23/03/2019
a7e98b0 automático TEST-EPACF23/03/2019
  • git checkout aa43d09 test-epacf/Scripts/LOGIN-EPACF-ADM/Script1552513941793.groovy
C:\proyectos\TEST-EPACF>git checkout aa43d09 test-epacf/Scripts/LOGIN-EPACF-ADM/Script1552513941793.groovy
error: pathspec 'test-epacf/Scripts/LOGIN-EPACF-ADM/Script1552513941793.groovy' did not match any file(s) known to
  • al final hago un clone y recupero los archivos :-1

recuperar un archivo de un commit anterior proceso largo

  • sacar con git cat el contenido de un fichero de un commit anterior
    • antes descubrir el sha1 de ese fichero
  • listado de commits formateado
git log --pretty=format:"%h - %an, %ar : %s"
fa26c31 - pelos6, 24 hours ago : automatico notas-programacion
51e855b - pelos6, 2 days ago : automatico notas-programacion
2e9e1f5 - pelos6, 2 days ago : motivo: para probar la plantilla de mensaje soluciona: una prueba
b56fc49 - javier iranzo, 2 days ago : automatico notas-programacion
271bee1 - pelos6, 2 days ago : automatico notas-programacion
236f9d9 - javier iranzo, 3 days ago : automatico notas-programacion
0a9ee5f - pelos6, 3 days ago : automatico notas-programacion
  • elegimos el commit del que queremos recuperar un archivo seleccionando el valor hash 0a9ee5f

  • sacamos la información de ese commit

C:\nube\MEGA\programacion\HtmlCssEstatico\jekyll\notas-programacion>git cat-file -p 0a9ee5f
tree 18cd7487cea13fc35c50360d539d7e153d925802
parent 40c1d8e4a7db0379389799a6513957a732920695
author pelos6 <javieriranzo@hotmail.com> 1505362837 +0200
committer pelos6 <javieriranzo@hotmail.com> 1505362837 +0200

automatico notas-programacion
  • ahora del tree que es el árbol de archivos afectados por ese commit
C:\nube\MEGA\programacion\HtmlCssEstatico\jekyll\notas-programacion>git cat-file -p 18cd7487ce
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    .code-workspace
100644 blob 716215a8a011601f4174d355ac35ba0ecec58793    .gitignore
100644 blob ce072115b8eeaf3686c2df5cc7da6d42cb5c2242    .markdownlint.json
040000 tree 5275505c9573a166daf13fbca7b7db10d6da4fa3    .vscode
100644 blob 42586b1b40881abdd0ac6166be6329a9dfdb7a89    Gemfile
100644 blob 9df0e71963ef5cbd82da90346e43b36d90e83498    LICENSE.txt
100644 blob f549328aaea75b1a969d2628ef1089de15e88502    README.md
100644 blob fb568f1ce9d61a0fa26e7c263bddbe6886d6f961    _config.yml
  • y por fin del archivo que queremos
C:\nube\MEGA\programacion\HtmlCssEstatico\jekyll\notas-programacion>git cat-file -p fb568f1ce9
site-version: v286
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing these this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.

interfaz gráfico

  • gitk
    • forma parte de Git Gui

plantilla de commit

  • para tener un formato unificado de commit se puede usar una plantilla
    • escribir un fichero y enlazarlo en la configuración de git
    • se puede configurar de forma global o solo para el repositorio (recomendado)
git config commit.template para-commit.md
  • se abre el editor por defecto que es vi
  • para cambiar el editor por defecto
git config --global core.editor notepad
  • se lanza git commit lo que abre notepad con la plantilla
  • al guardar el editor se finaliza el commit
  • si se lanza git commit -m "mensaje de commit" no se usa la plantilla

inicio repositorio en gitHub

  • primero se crea la el repositorio en GitHub
echo "# olddognewtricks" >> README.md
git init
git add add -A
git commit -m "first commit"
git remote add origin https://github.com/javieriranzo3/olddognewtricks.git
git push -u origin master

secuencia habitual de confirmación

git add -A
git commit -m "mensaje del commit"
git push origin master
  • git add -A
    • en git 1.x almacena todos los archivos ya sean nuevos, modificados o borrados
    • en git 2.x también
  • git add .
    • en git 1.x almacena todos los archivos ya sean nuevos o modificados no los borrados
    • en git 2.x almacena también los borrados
  • git push
    • origin es el alias que hemos puesto al repositorio remoto con fmote
    • master suele ser la rama en el repositorio remoto pero puede ser gh-pages para esta documentación

secuencia habitual al inicio

git status
git remote -v
git branch -a -vv
git fetch origin
git branch -a -vv
git diff
  • a completar con casos reales

deshacer unos cambios

  • al hacer git pull me sale este mensaje
error: Your local changes to the following files would be overwritten by merge:
        _posts/2017-05-02-bitacora.md
Please commit your changes or stash them before you mer.
Aborting
  • para ver lo que pasa lanzo git status
C:\DATOS\javier\notas-programacion>c:\portables\PortableGit\bin\git status
On branch gh-pages
Your branch is behind 'origin/gh-pages' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
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:   _posts/2017-05-02-bitacora.md
  • esto se soluciona con
C:\DATOS\javier\notas-programacion>c:\portables\PortableGit\bin\git checkout _posts/2017-05-02-bitacora.md
C:\DATOS\javier\notas-programacion>c:\portables\portableGit\bin\git status
On branch gh-pages
Your branch is behind 'origin/gh-pages' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
nothing to commit, working tree clean

para ver el historial de cambios de un archivo

git log -p C:\Proyectos\eprem\src\java\es\aragon\eprem\struts\actions\DispatcherMenuAplicacionAction.java
# otro más gráfico y mejor
gitk C:\Proyectos\eprem\src\java\es\aragon\eprem\struts\actions\DispatcherMenuAplicacionAction.java

para ver las diferencias entre un archivo concreto

git diff remotes/origin/gh-pages:pages/tutoriales/PADDOC-EPACF.md gh-pages:pages/tutoriales/PADDOC-EPACF.md
  • la información de la rama oculta es la que sale con el comando git branch -a

diferencias con remote

  • la clave para entender esto es la rama oculta que se actualiza con git fetch por eso si no se lanza este comando no es coherente la información que obtenemos
  • del comando se sale con q

repositorios remotos

  • para ver la url
 git remote -v

git y sublime text 3

  • parece que al instalar el package en sublime algo se modifica en la configuración con el paquete de markdownpreview no coge la plantilla.
  • tengo que quitar el package git y volver a abrir sublime ..!!!

warning: LF will be replaced by CRLF in Gemfile.lock

  • en esta página
  • proponen una solución

git config --local core.autocrlf false

  • esto provocaba un despliegue erróneo en Aerobatic
Your Gemfile.lock is corrupt. The followg gem is missing from the DEPENDENCIES section: 'ffi'
Version failed with error: Process bundle failed with code 20 code=20
  • así ya no sale el mensaje al hacer git add -A pero el despliegue sigue dando el mismo problema
  • pruebo a solucionarlo borrando Gemfile.lock en la copia local
  • primero paro Jekyll
  • luego borro Gemfile.lock
  • fuerzo un cambio
  • el despliegue se queda en queue
  • a esperar !!!
  • Ahora meto en .gitingnore a Gemfile.lock

para limpiar la caché

  • git rm -r --cached .

clonar una versión de un commit anterior

  • han desaparecido varios archivos de un repositorio y no se porque
  • para recuperarlos …
  • creo un directorio
    • http://es.stackoverflow.com/questions/1458/regresar-un-repositorio-a-un-commit-especifico
    • mkdir recuperacion
    • cd recuperacion
    • git clone https://github.com/pelos6/notas-programacion.git
    • cd notas-programacion
    • git log
    • esto te extrae los últimos commits con las fechas y el hash
    • 395507f este es el que busco
    • git checkout 395507f
      • no confundir con el número más largo
        • git checkout 0cfadb06391b16fb620978c155193ba289507210
    • luego copio todos los *.md y digo que no quiero que se sobrescriban los que ya están.

git creando un servidor en local

c:\servidorGit>git clone --bare https://github.com/pelos6/aplicacionBase.git my_project.g

c:\servidorGit\my_project.git>git remote
origin  https://github.com/pelos6/aplicacionBase.git (fetch)
origin  https://github.com/pelos6/aplicacionBase.git (push)

c:\servidorGit>tree
Listado de rutas de carpetas para el volumen Acer
El número de serie del volumen es 00000200 22C7:ADBD
C:.
└───my_project.git
    ├───hooks
    ├───info
    ├───objects
    │   ├───info
    │   └───pack
    └───refs
        ├───heads
        └───tags
C:\SERVIDORGIT\.GIT
├───hooks
├───info
├───objects
│   ├───4b
│   ├───info
│   └───pack
└───refs
    ├───heads
    └───tags
c:\servidorGit>

C:\proyectosGit>git clone c:/servidorGit/my_project.git
Cloning into 'my_project'...
done.
Checking out files: 100% (836/836), done.

C:\proyectosGit\my_project>git remote -v
origin  c:/servidorGit/my_project.git (fetch)
origin  c:/servidorGit/my_project.git (push)

secuencia de actuación

  • el comando que dicen en los tutoriales git init --bare
c:\servidorGit>git init --bare primer-proyecto
  • he tenido que renombrar el directorio de primer-proyecto a primer-proyecto.git
c:\servidorGit>git init --bare primer-proyecto.git
c:\proyectosGit>git clone c:\servidorGit\primer-proyecto primer-proyecto
c:\proyectosGit\primer-proyecto>git remote -v
origin  c:\servidorGit\primer-proyecto (fetch)
origin  c:\servidorGit\primer-proyecto (push)
c:\proyectosGit\primer-proyecto>echo hola mundo > hola.md
c:\proyectosGit\primer-proyecto>git add -A

c:\proyectosGit\primer-proyecto>git commit -m "hola"
[master (root-commit) eae07ce] hola
 1 file changed, 1 insertion(+)
 create mode 100644 hola.md

c:\proyectosGit\primer-proyecto>git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 219 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To c:\servidorGit\primer-proyecto
 * [new branch]      master -> master

c:\proyectosGit>git clone c:\servidorGit\primer-proyecto.git primer-proyecto-clonado
Cloning into 'primer-proyecto-clonado'...
fatal: 'c:\servidorGit\primer-proyecto.git' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

c:\proyectosGit>git clone c:\servidorGit\primer-proyecto.git primer-proyecto-clonado
Cloning into 'primer-proyecto-clonado'...
done.

c:\proyectosGit>cd primer-proyecto-clonado

c:\proyectosGit\primer-proyecto-clonado>dir
 El volumen de la unidad C es Acer
 El número de serie del volumen es: 22C7-ADBD

 Directorio de c:\proyectosGit\primer-proyecto-clonado

22/07/2017  20:58    <DIR>          .
22/07/2017  20:58    <DIR>          ..
22/07/2017  20:58                13 hola.md
               1 archivos             13 bytes
               2 dirs  542.763.098.112 bytes libres
  • parece que es necesario para clonar que el directorio tenga la extensión .git pero sin embargo el remote de primer-proyecto sale sin esa extensión
c:\proyectosGit\primer-proyecto>git remote -v
origin  c:\servidorGit\primer-proyecto (fetch)
origin  c:\servidorGit\primer-proyecto (push)

c:\proyectosGit\primer-proyecto>cd ..\primer-proyecto-clonado

c:\proyectosGit\primer-proyecto-clonado>git remote -v
origin  c:\servidorGit\primer-proyecto.git (fetch)
origin  c:\servidorGit\primer-proyecto.git (push)
  • a pesar de esa incoherencia puedo hacer pull y push entre los dos repositorios clonados contra el mismo servidor

referencia de Hostinger

  • git config
    • Uno de los comandos más usados en git es git config, que puede ser usado para establecer una configuración específica de usuario, como sería el caso del email, un algoritmo preferido para diff, nombre de usuario y tipo de formato, etc… Por ejemplo, el siguiente comando se usa para establecer
  • git init
    • Este comando se usa para crear un nuevo repertorio GIT:
  • git add
    • Este comando puede ser usado para agregar archivos al index. Por ejemplo, el siguiente comando agrega un nombre de archivo temp.txt
  • git clone
    • Este comando se usa con el propósito de revisar repertorios.
  • git commit
    • El comando commit es usado para cambiar a la cabecera. Ten en cuenta que cualquier cambio comprometido no afectara al repertorio remoto.
  • git status
    • Este comando muestra la lista de los archivos que se han cambiado junto con los archivos que están por ser añadidos o comprometidos.
  • git push
    • Este es uno de los comandos más básicos. Un simple push envía los cambios que se han hecho en la rama principal de los repertorios remotos que están asociados con el directorio que está trabajando. Por ejemplo:
  • git checkout
    • El comando checkout se puede usar para crear ramas o cambiar entre ellas. Por ejemplo, el siguiente comando crea una nueva y se cambia a ella:
  • git remote
    • El comando git se usa para conectar a un repositorio remoto. El siguiente comando muestra los repositorios remotos que están configurados actualmente:
  • git branch
    • Este comando se usa para listar, crear o borrar ramas. Para listar todas las ramas se usa:
  • git pull
    • Para poder fusionar todos los cambios que se han hecho en el repositorio local trabajando, el comando que se usa es:
  • git merge
    • Este comando se usa para fusionar una rama con otra rama activa:
  • git diff
    • Este comando se usa para hacer una lista de conflictos. Para poder ver conflictos con el archivo base usa:
  • git tag
    • Etiquetar se usa para marcar commits específicos con asas simples.
  • git log
    • Ejecutar este comando muestra una lista de commits en una rama junto con todos los detalles.
  • git reset
    • Para resetear el index y el directorio que está trabajando al último estado comprometido se usa este comando:
  • git stash
    • Este es uno de los comandos menos conocidos, pero ayuda a salvar cambios que no están por ser comprometidos inmediatamente, pero temporalmente:
  • git show
    • Se usa para mostrar información sobre cualquier objeto git.
  • git fetch
    • Este comando le permite al usuario buscar todos los objetos de un repositorio remoto que actualmente no reside en el directorio local que está trabajando. Por ejemplo:
  • git ls-tree
    • Para ver un objeto de árbol junto con el nombre y modo de cada uno de ellos, y el valor blob´s SHA-1, se usa:
  • git cat-file
    • Usando el valor SHA-1, se puede ver el tipo de objeto usando este comando. Por ejemplo:
  • git grep
    • Este comando le permite al usuario buscar en los árboles de contenido cualquier frase o palabra. Por ejemplo, para buscar por www.tupaginaweb.com en todos los archivos se usaría:
  • git instaweb
    • Con este comando un servidor web puede correr interconectado con el repositorio local. Un navegador web también está automáticamente dirigido a el:
  • git gc
    • Para optimizar el repositorio por medio de una recolección de basura, que limpiara archivos innecesarios y los optimizara, usa:git hc
  • git archive
    • Este comando le permite al usuario crear archivos zip o tar que contengan los constituyentes de un solo árbol de repositorio:git archive – -format=tar master
  • git prune
    • Con este comando los objetos que no tengan ningún puntero entrante serán eliminados:git prune
  • git fsck
    • Para poder hacer un chequeo de integridad del sistema de archivos git, usa este comando. Cualquier objeto corrompido será detectado:git fsck
  • git rebase
    • Este comando se usa para la re aplicación de los compromisos en otra rama. Por ejemplo:git rebase master

GitBucket dga

  • las pages http://1.43.10.43:8180/jiranzo/aplicacionBase/pages/

forzar un pull

  • para forzar un pull a lo que tengo en remoto
git fetch origin master
git reset --hard origin/master

Curso de MiriadaX

ejercicio del módulo 2

  • clonar el repositorio que he previamente copiado con fork de jquemada
c:\cursos\miriadax\git_github>git clone https://github.com/javier-iranzo/cal_2com
  • hago la modificación en el html
  <h1>javier iranzo</h1>
  • añado el cambio y hago un commit
c:\cursos\miriadax\git_github\cal_2com>git status
On branch master
Your branch is up-to-date with 'origin/master'.
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:   calculator.html

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

c:\cursos\miriadax\git_github\cal_2com>git branch --all
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

c:\cursos\miriadax\git_github\cal_2com>git add -A
c:\cursos\miriadax\git_github\cal_2com>git commit -m "Calculadors:Autor"
c:\cursos\miriadax\git_github\cal_2com>git log --oneline --graph
* c8a0207 Calculadors:Autor
* b0e63ad x^2 button
* 1096247 Readme & License

c:\cursos\miriadax\git_github\cal_2com>
  • copio la rama inverse del repositorio cal_branches al repositorio de trabajo con el nombre inverse
git fetch https://github.com/jquemada/cal_branches.git inverse:inverse
  • la situación
c:\cursos\miriadax\git_github\cal_2com>git fetch https://github.com/jquemada/cal_branches.git inverse:inverse
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 1
Unpacking objects: 100% (3/3), done.
From https://github.com/jquemada/cal_branches
 * [new branch]      inverse    -> inverse

c:\cursos\miriadax\git_github\cal_2com>git branch -a -vv
  inverse               e868dc4 1/x button
* master                c8a0207 [origin/master: ahead 1] Calculadors:Autor
  remotes/origin/HEAD   -> origin/master
  remotes/origin/master b0e63ad x^2 button
  • si hago un git checkout inverse la calculadora que sale no tiene mi nombre y la función calcula el inverso del número

  • git merge inverse

  • resuelvo los conflictos y cambio una llave para que funcionen las dos funciones.

  • hago un commit de esos cambios

  • cambio a la rama inverse con git checkout inverse

  • ahora la calculadora es la original sin mi nombre

  • git merge master

  • ahora la calculadora es la misma que tenia en master


C:\cursos\miriadax\git_github\cal_2com>git log --oneline --graph
*   cad7801 integrar inverse
|\
| * e868dc4 1/x button
* | c8a0207 Calculadors:Autor
* | b0e63ad x^2 button
|/
* 1096247 Readme & License

PROBLEMAS

REMOTE: HTTP BASIC: ACCESS DENIED

  • al cambiar de contraseña en jiranzo@aragon.es por recomendación de AST los repositorios que usaba contra cirepo y que no necesitaban contraseña dan este error al hacer un pull por ejemplo
  • origen de la solución
  • Windows + R
    • control /name Microsoft.CredentialManager
      • credenciales de Windows
        • buscar git:https://herramientas.aragon.es
          • editar y cambiar la contraseña vieja a la nueva

alert handshake failure

  • al intentar clonar los repositorios de cirepo a local
C:\proyectos>git clone https://herramientas.aragon.es/cirepo/EduCulDep/GEB.DEV.git
Cloning into 'GEB.DEV'...
fatal: unable to access 'https://herramientas.aragon.es/cirepo/EduCulDep/GEB.DEV.git/': error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

Git clone fails with SSL routines:SSL23_GET_SERVER_HELLO

  • al clonar desde el equipo sony
  • actualizo la versión de git a la 2.10.1 y deja de dar este error

Filename too long

  • me ocurre con PADDOC-EPCNT
C:\Proyectos\epcnt>git add -A
error: open("src/java/es/aragon/epcnt/struts/actions/convocatorias/gestionConvocatoria/presolicitudes/gestionPresolicitud/peticiones/gestionPeticionesDerechoPreferenteCentro/ConvInitGestionConvocatoriaPresolicitudPeticionesDerechoPreferenteCentroAction.java"): Filename too long
error: unable to index file src/java/es/aragon/epcnt/struts/actions/convocatorias/gestionConvocatoria/presolicitudes/gestionPresolicitud/peticiones/gestionPeticionesDerechoPreferenteCentro/ConvInitGestionConvocatoriaPresolicitudPeticionesDerechoPreferenteCentroAction.java
fatal: adding files failed
  • también pasa al hacer un pull del mismo proyecto

  • esta solución da problemas de permisos git config --system core.longpaths true

  • esta funciona git config core.longpaths true

  • es necesario lanzar esa instrucción en los repositorios donde se use el proyecto que tiene nombre largos

fallo en la red

  • se cae la red al hacer un commit y sale este error
c:\Proyectos\epacf_adm>git push origin master
      0 [main] bash 6812 C:\Program Files\Git\usr\bin\bash.exe: *** fatal error - add_item ("\??\C:\Program Files\Git", "/", ...) failed, errno 1
Stack trace:
Frame        Function    Args
000FFFF9B90  0018005CE9E (0018023D522, 0018021AC39, 00600010000, 000FFFF8B10)
000FFFF9B90  00180046559 (000FFFFABC0, 000FFFF9B90, 1D3F41DDD5AD9D7, 00000000000)
000FFFF9B90  00180046592 (000FFFF9B90, 00000000001, 00600010000, 505C3A435C3F3F5C)
000FFFF9B90  001800CADBB (00000000000, 00140000024, 00000000000, 1D3F41DE64BAB57)
000FFFFCBE0  00180118755 (00000000000, 00000000000, 00000000000, 00000000000)
000FFFFCCB0  00180046B65 (00000000000, 00000000000, 00000000000, 00000000000)
00000000000  001800457C3 (00000000000, 00000000000, 00000000000, 00000000000)
000FFFFFFF0  00180045874 (00000000000, 00000000000, 00000000000, 00000000000)
End of stack trace

RPC failed

C:\nube\MEGA\programacion\HtmlCssEstatico\jekyll\notas-programacion>git pull
error: fatal: RPC failed; curl 56 SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054
The remote end hung up unexpectedly
fatal: protocol error: bad pack header

C:\nube\MEGA\programacion\HtmlCssEstatico\jekyll\notas-programacion>git pull
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7 (delta 5), reused 0 (delta 0)
Unpacking objects: 100% (7/7), done.
From https://bitbucket.org/javieriranzo3/notas-programacion
   90fa702..651523f  gh-pages   -> origin/gh-pages
error: Your local changes to the following files would be overwritten by merge:
        _config.yml
Please commit your changes or stash them before you merge.
Aborting
  • otro igual 2018-05-22 17:49:38
C:\proyectos\proyectoskatalon>call git push origin master
Password for 'https://javieriranzo3@bitbucket.org':
Counting objects: 277, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (272/272), done.
Writing objects: 100% (277/277), 8.06 MiB | 5.66 MiB/s, done.
Total 277 (delta 106), reused 0 (delta 0)
error: RPC failed; curl 56 SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date
  • tiene muchas capturas de pantalla de katalon
    • las quito y a la siguiente vez funciona

PROBLEMAS CON VARIAS CUENTAS

  • el icono del usuario era distinto a pesar de tener el mismo nombre

  • no llegaban los email de confirmación de ticket en integración continua

  • los problemas con el despliegue continuo tienen que ver con el usuario con el que estoy mandando las versiones que no es jiranzo@aragon.es sino pelos6

    • por eso el icono de los commits era diferente
    • en el ordenador del trabajo Windows Panel de control\Todos los elementos de Panel de control\Administrador de credenciales
      • credenciales de Windows
    • quito todas las credenciales que van con git.
  • lanzo git config --edit --global

# This is Git's per-user configuration file.
[user]
#	name = javier iranzo
#	email = pelos6@users.noreply.github.com
# Please adapt and uncomment the following lines:
	name = JAVIER IRANZO BURRIEL
#	email = jiranzo@DC.ARAGON.ES
	email = jiranzo@aragon.es
[core]
	editor = notepad
[filter "lfs"]
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true
	clean = git-lfs clean -- %f
[credential]
#	helper = manager
  • y cambio para que sea el usuario jiranzo

  • git config --edit --system como administrador

[diff "astextplain"]
	textconv = astextplain
[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true
[http]
	sslBackend = openssl
	sslCAInfo = C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
[core]
	autocrlf = true
	fscache = true
	symlinks = false
[pull]
	rebase = false
[credential]
	helper = manager
[init]
	defaultBranch = master
  • y quito helper = manager
  • también del archivo que sale con edit --global
    • ahora me pide el usuario y la clave en el repositorio EPACF_ADM y en el que esta en el directorio ast para integración continua
    • veo que cambia el icono y al mandar a AST llega el correo y el despliegue es correcto con la versión 1.0.21

PROBLEMAS CON VARIAS CUENTAS PERO TODAS CON SSH MENOS LA DE AST

  • modifico las cuentas que no son de AST para usar SSH lo que hace que no me pida contraseña ni usuario
  • lanzo git config --edit --global como administrador
# This is Git's per-user configuration file.
[user]
#	name = javier iranzo
#	email = pelos6@users.noreply.github.com
# Please adapt and uncomment the following lines:
	name = JAVIER IRANZO BURRIEL
#	email = jiranzo@DC.ARAGON.ES
	email = jiranzo@aragon.es
[core]
	editor = notepad
[filter "lfs"]
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true
	clean = git-lfs clean -- %f
[credential]
	# helper = cache
	helper = manager
  • lanzo git config --edit --system y añado helper = manager
[diff "astextplain"]
	textconv = astextplain
[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true
[http]
	sslBackend = openssl
	sslCAInfo = C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
[core]
	autocrlf = true
	fscache = true
	symlinks = false
[pull]
	rebase = false
[credential]
	helper = manager
[init]
	defaultBranch = master
  • ademas en el gestor de contraseñas de Windows tiene que estar la entrada para cirepo
dirección de red git:https://herramientas.aragon.es
usuario jiranzo@aragon.es
contraseña xxxxxxxx
  • comprobado que funciona como antes con la contraseña y el usuario

PROBLEMA PARA RESOLVER EL HOST

  • me da este error
proyectos\jekyll\notas-programacion>git push -u origin gh-pages
fatal: unable to access 'https://javieriranzo3:pelos678@bitbucket.org/javieriranzo3/notas-programacion.git/':
Couldn't resolve host 'bitbucket.org'
  • al segundo intento hace el commit

problemas con git pull no tracking information for the current branch

  • salía este mensaje
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>
  • se soluciona haciendo git pull origin master en vez de solo git pull
  • luego git push -u origin master funciona como siempre

problema con git pull such ref was fetched

  • sale este mensaje 2017-12-14 07:44:09
C:\DATOS\javier\notas-programacion>git pull
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 8 (delta 6), reused 0 (delta 0)
Unpacking objects: 100% (8/8), done.
From https://bitbucket.org/javieriranzo3/notas-programacion
   dba9d58..cd61997  gh-pages   -> origin/gh-pages
Your configuration specifies to merge with the ref 'refs/heads/gh-pages'
from the remote, but no such ref was fetched.

C:\DATOS\javier\notas-programacion>git pull
Updating dba9d58..cd61997
Fast-forward
 _posts/2017-12-12-bitacora.md |  2 +-
 _posts/2017-12-13-bitacora.md | 14 ------+-------
 2 files changed, 8 insertions(+), 8 deletions(-)
  • al segundo vuelvo a lanzar el comando y funciona

fatal: refusing to merge unrelated histories

  • al hacer un git pull
  • lo soluciono con esta modificación
  • git pull --allow-unrelated-histories

remote con contraseña

  • para evitar los problemas que da tener varias cuentas en la misma máquina se puede poner la contraseña en el remote
git remote rm origin

git remote add origin https://pelos6@github.com/pelos6/test.git
git config remote.origin.url https://pelos6:pelos678@github.com/pelos6/test.git
  • con bitbucket
git remote rm origin
git remote add origin https://javieriranzo3@bitbucket.org/javieriranzo3/feeling-responsive.git
git config remote.origin.url https://javieriranzo3:pelos678@bitbucket.org/javieriranzo3/feeling-responsive.git
  • esto soluciona el problema que decía
c:\nube\MEGA\programacion\HtmlCssEstatico\jekyll\plantillajekyll>git push -u origin gh-pages
remote: Permission to javieriranzo3/plantillajekyll.git denied to pelos6.
fatal: unable to access 'https://javieriranzo3@github.com/javieriranzo3/plantillajekyll.git/':
The requested URL returned error: 403
  • otro problema relacionado
From https://bitbucket.org/javieriranzo3/notas-programacion
 * [new branch]      gh-pages   -> origin/gh-pages
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> gh-pages

c:\proyectos\notas-programacion> git branch --set-upstream-to=origin/gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
  • nuevo problema
C:\nube\MEGA\programacion\HtmlCssEstatico\jekyll\notas-personal>git push -u origin gh-pages
remote: Unauthorized
fatal: Authentication failed for 'https://javieriranzo3@bitbucket.org/javieriranzo3/notas-personal.git/'
  • cambio el repositorio a público y funciona el push pero el despliegue en aerobatic se queda en QUEUED ????

  • para forzar que te pide la contraseña

    • git config –global core.askpass

problema con el buffer

  • creo un repositorio nuevo en bitbucket en concreto el de las fotos del camino de santiago con 770 imagenes
  • al hacer el push me da un error
C:\nube\MEGA\programacion\HtmlCssEstatico\jekyll\galeria_santiago>git push -u origin master
Counting objects: 767, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (767/767), done.
error: Wfatal: RPC failed; curl 56 SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054
The remote end hung up unexpectedly1 MiB | 82.00 KiB/s
Writing objects: 100% (767/767), 1.34 GiB | 8.31 MiB/s, done.
Total 767 (delta 1), reused 0 (delta 0)
fatal: The remote end hung up unexpectedly
Everything up-to-date
  • para solucionarlo git config --global http.postBuffer 157286400 sacado de altassian

cannot lock ref

  • al lanzar git pull, desde el equipo de la dga y desde el de casa también, sale este mensaje de error
C:\DATOS\javier\notas-programacion>git pull
error: cannot lock ref 'refs/remotes/origin/gh-pages': Unable to create 'C:/DATOS/javier/notas-programacion/.git/refs/remotes/origin/gh-pages.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
From https://bitbucket.org/javieriranzo3/notas-programacion
 ! 468afe7..06bd296  gh-pages   -> origin/gh-pages  (unable to update local ref)
  • en casa tenía lanzada la lanza_pull_build_deploy.bat pero no tengo claro que eso sea lo que provoca este problema dado que habla de local.ref

  • segundo despues vuelvo a lanzar el comando y funciona correctamente

  • el archivo que referencia no esta

  • la siguiente vez buscar el archivo y ver que contiene

  • 2017-10-03 07:45:59

  • existe un archivo llamado gh-pages con este contenido 15ef251fe2034012e835020c1dbdb218e097d57e

  • lo lanzo al minuto y funciona

  • no tiene que ver con lanza_pull_build_deploy.bat

  • ayer habia conflictos al hacer un git pull desde casa.

Couldn’t resolve host

  • coincide con una caída de internet por lo que creo que esa es la causa
  • se restaura y deja de dar el error

unable to resolve reference ‘refs/heads/master’: reference broken

  • en javier-personal
fatal: cannot lock ref 'HEAD': unable to resolve reference 'refs/heads/master': reference broken
  • pasa en los tres repositorios personales de hugo

  • pone todos los archivos como si fueran nuevos

  • con EPCNT_ADM funciona bien

  • veo estos consejos en stackoverflow

  • y de esos sigo este

When I run into this I just git clone the project into a new file directory and pull the heads folder from located at .git\refs\heads and replace the original heads file in the directory that your having the problem. Then just delete the new clone you created (since it obviously doesn't have the updates your trying to push).
  • edito el archivo C:\Proyectos\hugo\javier-personal.git\refs\heads y veo que esta vacio

    • lo edito con NOTEPAD con otros editores no se ve vacio y genera incertidumbre
  • clono el repositorio de nuevo en c:\cajaDeArena\javier-personal para ver como esta ese archivo en el repositorio recien clonado

  • ese archivo contiene 72c697daef383cfbf4f69bf22c32e3efdc2b6270

  • lo pego en el archivo del repositorio que no funciona

  • ahora ya funciona bien tanto el commit como cuando hacer git status que muestra la información esperada

  • hago lo mismo con javier-bitacora y javier-programacion

    • e474bccd1686f7e0f283606f80e3457cb1b73545 para javier-bitacora
    • 09baf965525869e729eaa1abf1afb62c597a593a para javier-programacion
  • 2021-03-31 08:05:30

  • problemas con javier-programacion parecido pero en otro archivo

error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference broken
  • el archivo al que se refiere esta vacio
  • clono el repositorio para ver las diferencias y veo que el archivo que da problemas no existe en la copia recien clonada
  • borro ese archivo vacio en la copia de trabajo y funciona el comando git pull
    • hago una modificación y un commit con push y veo que funciona todo

HUMOR

chiste