Skip to content

Instantly share code, notes, and snippets.

@richimf
Last active March 3, 2020 20:28
Show Gist options
  • Save richimf/9a0dc34c765bffcd1c047d8440798127 to your computer and use it in GitHub Desktop.
Save richimf/9a0dc34c765bffcd1c047d8440798127 to your computer and use it in GitHub Desktop.
Comandos de Git

Git

Ver diferencias de cambios

Una vez modificado un archivo, podemos ver los cambios con:

git diff

Deshacer cambios

Deshacer cambios de un archivo: (Nota, no hemos utilizado el comando git add)

git checkout -- myfile.txt

Deshacer TODOS los cambios:

git checkout -- .

Pero, si utilizamos el comando git add, nuestro archivo aparecerá en verde en el staging area y por consiguiente checkout NO funcionará. Debemos utilizar un nuevo comando reset.

git reset HEAD myfile.txt

Ahora, ya sale en rojo en el staging area. Como si nunca hubieramos usado el comando git add. Ahora podemos utilizar el checkout sin problema.

Deshacer Commits

Primero, imprimimos el Log de commits.

git log --oneline

d934552 (HEAD -> master, origin/master) rebase interactivo cambio
729f5d7 Rebase interactivo
367f18a Update Tag Readme
0a15183 (tag: v3.14) rebase tips readme
871e064 (branchToRebase) update json
019a826 git ignore

Tenemos el hash del commit y el mensaje.

Ahora queremos borrar el commit 367f18a Update Tag Readme.

git reset 367f18a

Borrar tanto del stage como el commit, es PELIGROSO:

git reset --hard 367f18a

Pero tenemos un comando que permite Deshacer un Commit pero que conserve los cambios en el Staging area, como si apenas hubieramos escrito el codigo pues.

git reset --soft 367f18a

On branch master:
Changes to be committed:

	modified file.txt

Revert cambios

En lugar de utilizar git reset es mejor utilizar este comando.

Vemos diferencia entre dos commits:

git diff 729f5d7 d934552

O bien, comparamos el penúltimo commit con el último.

git diff HEAD~1 HEAD

Hacemos Revert del commit especificando el Hash o si es el último commit usamos HEAD ( o el penultimo commit usamos HEAD~1):

git revert d934552

git revert HEAD

Luego, git nos pedira ingresar un commit, generalmente llevan la palabra "Revert commit ....", es decir, se crea un commit de un commit revertido.

Si no queremos que git haga esto, usamos el siguiente comando. Este comando hará un git rever pero, no creara un nuevo commit, sino dejara tus cambios en el Staging area.

git revert --no-commit HEAD~1

Ramas

Creamos una rama:

git branch name-of-branch

Nos cambiamos a esa rama:

git checkout name-of-branch

O hacer ambas cosas con un comando:

git checkout -b name-of-branch

Mostrar ramas ocultas:

git branch -a

Tags

Tags anotadas: son almacenadas como objetos, mas detalladas. Tags ligeras: son tags con menos informacion.

Tag anotada:

git tag -a v0.8 -m "un mensaje, es la version 0.8"

Tag no anotada:

git tag v1.0

Asignar un Tag a un Commit en especifico, usamos el numero SHA del Commit al final del comando (ej. num sha 612d323):

git tag -a v1.0 -m "soy la version 1.0" 612d323

Una vez creadas las tags, debemos subirlas al github.

git push origin v1.0

Subir todos los Tags:

git push origin --tags

To show all tags:

git tag -l

Delete a TAG

First, notice the two points : its important.

In order to delete a tag, le us say tag v3.14, type:

git push origin :v3.14

 - [deleted]         v3.14

NOTE: If you type it without the two points :, you are uploading the TAG instead of Deleting it.

Git Fetch and Merge

Guarda los cambios en la rama oculta:

git fetch origin

From https://github.com...
	3424234..42343 master -> origin/master

Pasa los cambios de la rama oculta a la rama master:

git merge origin/master

Auto-merging
From https://github.com...
	3424234..42343 master -> origin/master

Git Pull

Git Pull es como ejecutar un git fetch y un git merge al mismo tiempo.

git pull = git fetch + git merge

Git Rebase

Si queremos actualizar nuestra rama con los últimos cambios de master.

Primero tener actualizado master:

git checkout master && git pull

Cambiamos a nuestra Rama:

git checkout BranchToRebase

Ahora, procedemos a realizar el Rebase:

git rebase master

En caso de tener un conflicto...

Podemos abortar, esto significa dejar la rama como estaba.

git rebase --abort

O bien, corregir los conflictos:

Arreglando conflictos Rebase

Despues de hacer Rebase.

$git rebase master
First, rewinding head to replay your work on top of it...
Applying: git ignore
Applying: update json
Using index info to reconstruct a base tree...
M	simpleJson.json
Falling back to patching base and 3-way merge...
Auto-merging simpleJson.json
CONFLICT (content): Merge conflict in simpleJson.json
error: Failed to merge in the changes.
Patch failed at 0002 update json
Use 'git am --show-current-patch' to see the failed patch

Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".

Se observa que hay un conflicto:

CONFLICT (content): Merge conflict in simpleJson.json
error: Failed to merge in the changes.

Procedemos a abrir el archivo con un mergetool.

git mergetool

Luego, detectamos los conflictos. Suelen parecerse a esto:

<<<<<<< HEAD
    "some code": "code of master branch"
=======
    "some code": "code of branchToRebase"

HEAD: Último commit.

Despues de corregir los conflictos. Agregamos el archivo corregido con:

git add conflict_files

Luego indicamos que continue el Rebase.

git rebase --continue

Y listo.

Si estamos corrigiendo conflictos de un Merge:

Ejecutamos:

git mergetool

Corregimos... Y agregamos los archivos corregidos.

git add conflict_files

Hacemos un Commit.

git commit -m "se arreglaron conflictos"

Lo enviamos a master

git push origin master

Rebase Interactivo

Podemos cambiar orden de commits. Podemos aplastar commits en uno, squash. Podemos poner un mensaje general de varios commits.

NUNCA: se hace Rebase Interactivo en código Pusheado, solo local.

git rebase -i

Identificamos cuantos commits queremos modificar, digamos los ultimos 4 de la rama.

git rebase -i HEAD~4

Se abre un editor de textos VIM en la terminal.

pick 213213 Mi cambio C                 (el mas viejo)
pick 624236 Mi otro cambio B
pick 411239 Mi cambio A                 (el mas nuevo)

Para cambiar el orden de los commits, solo cambialo de renglon.

pick 411239 Mi cambio A
pick 624236 Mi otro cambio B
pick 213213 Mi cambio C e

Podemos aplastar commits squash, para que aparezca como un unico commit: Debemos dejar el commit superior con pick, ya que en este commit se incluiran los demas cambios.

pick 411239 Mi cambio A
squash 624236 Mi otro cambio B
squash 213213 Mi cambio C

Guardamos cambios :wq

Luego, Git preguntara por un mensaje global (se muestra otravez el editor de textos)

Agregamos un comentario del Commit global

Guardamos cambios :wq

Como arreglar un Commit: Ammends

Un commit de manera local:

git commit --amend -m "Nuevo mensaje en commit"

Git pensara que no hay nada que subir, entonces usamos el comando de force push:

git push origin master -f

Error: Can't push to remote branch, cannot be resolved to branch

Suele pasar cuando creamos una rama nueva, pero esta entra en conflicto con otra existente en:

.git/refs/heads

Entonces abrimos dicho path con open .git/refs/heads y vemos si esta repetida.

Como resolver ese error?, pues creando una rama nueva con diferente nombre.

Ver commits de mi branch ignorando commit merge

Para los que han sufrido revisando cuales commits hacen parte de su branch ignorando los commit de merge etc.

git log --no-merges --first-parent

Cuando hay referencias de Ramas Perdidas: PRUNE

git remote prune origin

VIM Edior

i: te permite escribir
esc, dos puntos, tecleamos wq
w: write
q: salir

:wq

Git Ignore

Agregamos en el archivo .gitignore aquello que queremos que no se suba al repositorio. obviamente se debe hacer push al archivo .gitignore despues de haber sido editado.

Cuando el Carthage Falla

O es el WIFI o es esto:

A shell task (/usr/bin/env git fetch --prune --quiet https://github.com/...git refs/tags/:refs/tags/ +refs/heads/:refs/heads/ (launched in /Users/Library/Caches/org.carthage.CarthageKit/dependencies)) failed with exit code 1

Utilizar el comando:

rm -rf ~/Library/Caches/org.carthage.CarthageKit

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