¿Cómo descartar el compromiso local usando Git?

Tengo un compromiso en mi repository local. En el server remoto, alguien comete más.

¿Cómo descartar mi compromiso local? (Pero conserva las confirmaciones)

Creo que necesito usar git reset o git rebase o git checkout? o algo así como Git Revert?

Estoy realmente confundido acerca de esos commands.

Asumiendo que ya has confirmado tus cambios, usaría rebase (a less que aún estés trabajando en tus cambios, entonces quizás quieras savelos en tu copy local).

Rebase comparará dos twigs y saltará los cambios de su twig actual (por ejemplo, sus cambios locales), extraerá la otra twig (por ejemplo, el control remoto) y reproducirá los cambios en la parte superior uno a uno

Rebase funciona cuando ya has confirmado tus cambios. Por ejemplo,

master: A - B - C origin/master: A - B - D 

Rebasing master en origen / master convierte esto en

 master: A - B - D -C 

Hay una opción de conveniencia para esto con git pull

git pull --rebase

También me gusta usar mucho rebase interactivo que te da más flexibilidad, lo que te permite cambiar el nombre de los commits, reorderarlos, aplastarlos en otros commits, etc.

git rebase -i origin/master

Una advertencia con rebase es que recreará todas las confirmaciones que rebases. Esto significa que todos obtendrán SHA nuevos y que Git no los reconocerá como los mismos commits

EDITAR:

Si no quiere volver a establecer la base, debería poder usar el restablecimiento.

git reset <commit>

A continuación, agrego un "commit incorrecto" y quiero deshacer mi log mientras mantengo los cambios de commit incorrecto en mi copy de trabajo. Uso el alias HEAD ~ 1, pero también puedes darle un SHA.

 Bodah@jbodah-local 2.1.3p242 ~/repos/spy_rb (master) $ git log origin/master -1 commit 8fd6a1a7704d2c0dc1323c4d8e5e169c169c833c Author: Josh Bodah <jb3689@yahoo.com> Date: Thu Dec 18 17:55:14 2014 -0500 generate tags in change_version Bodah@jbodah-local 2.1.3p242 ~/repos/spy_rb (master) $ git log -2 commit b925445207000905d535e715a06d312ca65be5c1 Author: Josh Bodah <jb3689@yahoo.com> Date: Tue Dec 30 09:31:36 2014 -0500 bad commit commit 8fd6a1a7704d2c0dc1323c4d8e5e169c169c833c Author: Josh Bodah <jb3689@yahoo.com> Date: Thu Dec 18 17:55:14 2014 -0500 generate tags in change_version Bodah@jbodah-local 2.1.3p242 ~/repos/spy_rb (master) $ git log origin/master -1 commit 8fd6a1a7704d2c0dc1323c4d8e5e169c169c833c Author: Josh Bodah <jb3689@yahoo.com> Date: Thu Dec 18 17:55:14 2014 -0500 generate tags in change_version Bodah@jbodah-local 2.1.3p242 ~/repos/spy_rb (master) $ git reset HEAD~1 Unstaged changes after reset: M README.md Bodah@jbodah-local 2.1.3p242 ~/repos/spy_rb (master) $ git log -1 commit 8fd6a1a7704d2c0dc1323c4d8e5e169c169c833c Author: Josh Bodah <jb3689@yahoo.com> Date: Thu Dec 18 17:55:14 2014 -0500 generate tags in change_version Bodah@jbodah-local 2.1.3p242 ~/repos/spy_rb (master) $ 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: README.md no changes added to commit (use "git add" and/or "git commit -a") 

Utilizar

 git revert {commit hash} 

Puede usar git log para encontrar el hash de confirmación (es la cadena de letras y numbers). Esto "revertirá" (funciona como deshacer hace en el bloc de notas) su confirmación, pero déjelo intacto. Más tarde, alguien podría querer revertir su reversión, por lo que es bueno dejarlo.

Alguien más publicó sobre

 git reset --hard {commit hash} 

Esto probablemente no es lo que quieres. Esto eliminará todas las confirmaciones Y los cambios a los files que comiencen en HEAD hasta el {commit hash} provisto.

 git reset --soft {commit hash} 

Un "restablecimiento parcial" eliminará todas las confirmaciones, pero conservará los cambios en los files. A continuación, puede hacer algo realmente feo, como volver a comprometer la totalidad de su restablecimiento. De nuevo, probablemente no sea lo que estás buscando.