tag remota rama origin locales ignorar example deshacer crear cambios cambiar git git-bash

remota - Varias formas de eliminar los cambios locales de Git.



git push tag (9)

Acabo de clonar un repositorio de git y verifiqué una rama. Trabajé en ello y luego decidí eliminar todos mis cambios locales, ya que quería la copia original.

En resumen, tuve que hacer los siguientes dos comandos para eliminar mis cambios locales

git checkout . git clean -f

Mi pregunta es,

(1) ¿Es este el enfoque correcto para deshacerse de los cambios locales, o bien, hágame saber el enfoque correcto?

(2) cuándo utilizamos git reset --hard ya que puedo reiniciar incluso sin este comando

Gracias

* Solución: Edición (es) principal (es): 26/03: * Se reemplazaron muchos de los términos vagos con terminología específica de git [rastreado / no rastreado / estadificado / no estadificado]

Podría haber solo tres categorías de archivos cuando hacemos cambios locales:

Tipo 1. Archivos rastreados por etapas

Tipo 2. Archivos rastreados sin etapas

Tipo 3. Archivos no rastreados no rastreados, también archivos no rastreados

  • Staged - Aquellos que se mueven al área de preparación / Agregados al índice
  • Rastreado - archivos modificados
  • Untracked - nuevos archivos. Siempre sin etapas. Si está en escena, eso significa que son rastreados.

Lo que cada comando hace:

  1. git checkout . - Elimina SOLAMENTE los archivos de Unstaged [Tipo 2]

  2. git clean -f - Elimina archivos sin seguimiento no estadificados SOLAMENTE [Tipo 3]

  3. git reset --hard - Elimina SOLAMENTE los archivos rastreados y no rastreados [Tipo 1, Tipo 2]

  4. git stash -u : elimina todos los cambios [Tipo 1, Tipo 2, Tipo 3]

Conclusión:

Está claro que podemos usar cualquiera

(1) combination of `git clean -f` and `git reset --hard`

O

(2) `git stash -u`

Para lograr el resultado deseado.

Nota: el alijo, ya que la palabra significa "Almacenar (algo) de forma segura y secreta en un lugar específico". Esto siempre se puede recuperar utilizando git stash pop . Así que elegir entre las dos opciones anteriores es una llamada del desarrollador.

Gracias Christoph y Frederik Schøning.

Edición: 27/03

Pensé que valía la pena poner la nota de '' cuidado '' en git clean -f

git clean -f

No hay vuelta atrás. Usa -n o --dry-run para previsualizar el daño que harás.

Si también desea eliminar directorios, ejecute git clean -f -d

Si solo desea eliminar los archivos ignorados, ejecute git clean -f -X

Si desea eliminar los archivos ignorados y no ignorados, ejecute git clean -f -x

referencia: más información sobre git clean : ¿Cómo eliminar archivos locales (sin seguimiento) del árbol de trabajo de Git actual?

Edición: 20/05/15

Descartando todas las confirmaciones locales en esta rama [Eliminando confirmaciones locales]

Para descartar todas las confirmaciones locales en esta rama, para hacer que la rama local sea idéntica a la "corriente arriba" de esta rama, simplemente ejecute git reset --hard @{u}

Referencia: http://sethrobertson.github.io/GitFixUm/fixup.html

o haga git reset --hard origin/master [si la rama local es master ]

Nota: 12/06/2015 Esto no es un duplicado de la otra pregunta SO que está marcada como duplicada. Esta pregunta aborda cómo eliminar los cambios GIT locales [eliminar un archivo agregado, eliminar los cambios agregados al archivo existente, etc. y los diversos enfoques; Donde en el otro subproceso SO solo dirija cómo eliminar el compromiso local. Si agregó un archivo y desea eliminarlo solo, entonces el otro subproceso de SO no lo discute. Por lo tanto, esto no es un duplicado del otro]

Edición: 23/06/15

¿Cómo revertir un compromiso ya enviado a un repositorio remoto?

$ git revert ab12cd15

Edición: 01/09/2015

Eliminar una confirmación anterior de la rama local y la rama remota

Caso: Acaba de comprometer un cambio en su sucursal local e inmediatamente lo empujó a la sucursal remota. De repente se dio cuenta: ¡Oh no! No necesito este cambio. Ahora hacer que?

git reset --hard HEAD~1 [para eliminar esa confirmación de la rama local]

git push origin HEAD --force [ambos comandos deben ejecutarse. Para borrar de la rama remota]

¿Cuál es la rama? Es la rama actualmente retirada.

Editar 09/08/2015 - Eliminar local git merge :

Estoy en la rama master y la rama master combinada con una nueva phase2

$ git status # On branch master $ git merge phase2 $ git status # On branch master # Your branch is ahead of ''origin/master'' by 8 commits.

P: ¿Cómo deshacerse de esta fusión? git reset --hard y git clean -d -f Ambos no funcionaron.

Lo único que funcionó son los siguientes:

$ git reset --hard origin/master

o

$ git reset --hard HEAD~8

o

$ git reset --hard 9a88396f51e2a068bb7 [sha commit code - este es el que estaba presente antes de que ocurrieran todas tus confirmaciones de fusión]


1. Cuando no quieres mantener tus cambios locales en absoluto.

git reset --hard

Este comando eliminará completamente todos los cambios locales de su repositorio local. Esta es la mejor manera de evitar conflictos durante el comando de extracción, solo si no desea conservar los cambios locales.

2. Cuando quieras mantener tus cambios locales.

Si desea extraer los nuevos cambios desde el control remoto y desea ignorar los cambios locales durante esta extracción, entonces,

git stash

Se ocultarán todos los cambios locales, ahora puede extraer los cambios remotos,

git pull

Ahora, puede recuperar sus cambios locales por,

git stash pop


Como con todo en Git, hay múltiples formas de hacerlo. Los dos comandos que usaste son una forma de hacerlo. Otra cosa que podrías haber hecho es simplemente esconderlos con git stash -u . La -u se asegura de que también se incluyan los archivos recién agregados (sin seguimiento).

Lo práctico de git stash -u es que

  1. es probablemente el comando más simple (¿solo?) para lograr su objetivo
  2. si luego cambias de opinión, recuperas todo tu trabajo con git stash pop (es como eliminar un correo electrónico en gmail donde puedes deshacerlo si luego cambias de opinión)

A partir de su otra pregunta, git reset --hard no eliminará los archivos sin seguimiento, por lo que aún necesitaría el git clean -f . Pero un git stash -u podría ser el más conveniente.


Creo que Git tiene una cosa que no está claramente documentada. Creo que en realidad fue descuidado.

git checkout .

Hombre, me salvaste el día. Siempre tengo cosas que quiero probar usando el código modificado. Pero a veces las cosas terminan ensuciando el código modificado, añadiendo nuevos archivos sin seguimiento, etc. Así que lo que quiero hacer es, poner en escena lo que quiero, hacer las cosas desordenadas, luego limpiar rápidamente y comprometerme si estoy contento.

Hay git clean -fd funciona bien para archivos sin git clean -fd .

Luego, git reset simplemente elimina la puesta en escena, pero git checkout es demasiado engorroso. Especificar el archivo uno por uno o usar directorios no siempre es lo ideal. A veces, los archivos modificados de los que quiero deshacerme están dentro de los directorios que quiero conservar. Deseé este único comando que solo elimina los cambios no programados y aquí está. Gracias.

Pero creo que deberían tener git checkout sin ninguna opción, eliminar todos los cambios no programados y no tocar la puesta en escena. Es un poco modular e intuitivo. Más como lo que hace git reset . git clean también debería hacer lo mismo.


En primer lugar el cheque es su cambio importante guardado o no por:

estado de $ git

que intentar

$ git reset - hard

se restablecerá su rama a la predeterminada

pero si necesita simplemente deshacer:

$ edit (1) $ git add frotz.c filfre.c $ mailx (2) $ git reset
(3) $ git pull git: //info.example.com/ nitfol

Leer más >> https://git-scm.com/docs/git-reset


La mejor manera es revisar los cambios.

Cambiando el archivo pom.xml en un proyecto llamado nombre-proyecto puedes hacerlo:

git status # modified: project-name/pom.xml git checkout project-name/pom.xml git checkout master # Checking out files: 100% (491/491), done. # Branch master set up to track remote branch master from origin. # Switched to a new branch ''master''


Para descartar todo lo que me gusta esconder y colocar ese alijo, es la forma más rápida de descartar todo, especialmente si trabajas entre varios repositorios.

Esto ocultará todos los cambios en la tecla {0} y lo eliminará instantáneamente de {0}

git stash && git stash drop


Todo depende exactamente de lo que intenta deshacer / revertir. Comience leyendo .com/questions/1146973/… . Pero para intentar una respuesta:

Reinicio duro

git reset --hard [HEAD]

Elimine por completo todos los cambios en etapas y sin etapas en los archivos rastreados.

Me encuentro a menudo usando un restablecimiento completo, cuando estoy como "simplemente deshaga todo, como si hubiera hecho un nuevo clonaje desde el control remoto". En su caso, donde solo quiere que su repo prístina, esto funcionaría.

Limpiar

git clean [-f]

Eliminar archivos que no son rastreados.

Para eliminar archivos temporales, pero mantenga los cambios en etapas y sin etapas en los archivos ya rastreados. La mayoría de las veces, probablemente termine haciendo una regla de ignorar en lugar de limpiar repetidamente, por ejemplo, para las carpetas bin / obj en un proyecto de C #, que normalmente querría excluir de su repositorio para ahorrar espacio, o algo así.

La opción -f (forzar) también eliminará los archivos que no se rastrean y que git los ignora, aunque ignora la regla. En el caso anterior, con una regla de ignorar para nunca rastrear las carpetas bin / obj, aunque git esté ignorando estas carpetas, el uso de la opción force las eliminará de su sistema de archivos. Esporádicamente he visto un uso para esto, por ejemplo, cuando implemento scripts, y desea limpiar su código antes de implementar, comprimir o lo que sea.

Git clean no tocará los archivos que ya están siendo rastreados.

Pago "punto"

git checkout .

En realidad nunca había visto esta notación antes de leer tu publicación. Me cuesta mucho encontrar documentación para esto (quizás alguien pueda ayudar), pero al jugar un poco, parece que significa:

msgstr "deshacer todos los cambios en mi árbol de trabajo".

Es decir, deshacer los cambios en etapas en los archivos rastreados. Al parecer, no toca los cambios preconfigurados y deja los archivos sin seguimiento solo.

Alijo

Algunas respuestas mencionan el alijo. Como lo indica la redacción, es probable que utilice el ocultamiento cuando esté en medio de algo (no esté listo para un compromiso), y tenga que cambiar temporalmente las sucursales o trabajar de alguna manera en otro estado de su código, más tarde para volver a su "desordenada escritorio". No veo que esto se aplique a tu pregunta, pero definitivamente es útil.

Para resumir

En general, si confía en que se ha comprometido y tal vez se haya presionado para realizar cambios importantes remotos, si solo está jugando o algo similar, utilice git reset --hard HEAD seguido de git clean -f que limpiará definitivamente su código al estado, estaría dentro, si hubiera sido clonado y retirado de una sucursal. Es muy importante enfatizar que el restablecimiento también eliminará los cambios en etapas, pero no confirmados. Limpiará todo lo que no se haya confirmado (excepto los archivos no rastreados, en cuyo caso, use limpio ).

Todos los demás comandos están ahí para facilitar escenarios más complejos, donde se necesita una granularidad de "deshacer cosas" :)

Siento que tu pregunta # 1 está cubierta, pero, por último, para concluir sobre el # 2: la razón por la que nunca encontraste la necesidad de usar git reset --hard fue que nunca habías puesto en escena nada. Si hubieras realizado un cambio, ni git checkout . ni git clean -f habría revertido eso.

Espero que esto cubra.


Utilizar:

git checkout -- <file>

Para descartar los cambios en el directorio de trabajo.


Razón para añadir una respuesta en este momento:

Hasta ahora estaba agregando la conclusión y las ''respuestas'' a mi pregunta inicial, haciendo que la pregunta fuera muy larga, por lo tanto, pasé a una respuesta separada.

También he agregado comandos git que se usan con más frecuencia que me ayudan en git, para ayudar a alguien más también.

El primer paso antes de realizar cualquier confirmación es configurar su nombre de usuario y correo electrónico que aparece junto con su confirmación.

# Configura el nombre que desea adjuntar a sus transacciones de compromiso

$ git config --global user.name "[name]"

# Configura el correo electrónico que desea adjuntar a sus transacciones de compromiso

$ git config --global user.email "[email address]"

#Listar la configuración global

$ git config --list

#comprobar estado

git status

#Listar todas las sucursales locales y remotas

git branch -a

#crea una nueva sucursal local y comienza a trabajar en esta sucursal

git checkout -b "branchname"

O bien, se puede hacer como un proceso de dos pasos.

crear rama: git branch branchname trabajo en esta rama: git checkout branchname

#comita cambios locales [proceso de dos pasos: - Agregue el archivo al índice, eso significa agregar al área de preparación. Luego confirma los archivos que están presentes en esta área de preparación]

git add <path to file> git commit -m "commit message"

#controlar alguna otra sucursal local

git checkout "local branch name"

#eliminar todos los cambios en la rama local [Supongamos que hiciste algunos cambios en la rama local, como agregar un archivo nuevo o modificar un archivo existente, o hacer un compromiso local, pero ya no es necesario que] git clean -d -f y git reset --hard [ limpie todos los cambios locales realizados en la sucursal local, excepto si el compromiso local]

git stash -u también elimina todos los cambios

Nota: está claro que podemos usar (1) una combinación de git clean –d –f y git reset --hard O (2) git stash -u para lograr el resultado deseado.

Nota 1: el alijo, ya que la palabra significa "Almacenar (algo) de forma segura y secreta en un lugar específico". Esto siempre puede ser recuperado usando git stash pop. Así que elegir entre las dos opciones anteriores es una llamada del desarrollador.

Nota 2: git reset --hard eliminará los cambios de directorio de trabajo. Asegúrese de guardar cualquier cambio local que desee mantener antes de ejecutar este comando.

# Cambie a la rama maestra y asegúrese de estar actualizado.

git checkout master

git fetch [esto puede ser necesario (dependiendo de su configuración de git) para recibir actualizaciones en origen / maestro]

git pull

# Fusionar la rama de la característica en la rama maestra.

git merge feature_branch

# Restablecer la rama maestra al estado de origen.

git reset origin/master

# ¿Se eliminó accidentalmente un archivo del local, cómo recuperarlo? Haga un git status para obtener la ruta de archivo completa del recurso eliminado

git checkout branchname <file path name>

¡Eso es!

#Merge master branch con someotherbranch

git checkout master git merge someotherbranchname

#rename sucursal local

git branch -m old-branch-name new-branch-name

#eliminar sucursal local

git branch -D branch-name

#delete rama remota

git push origin --delete branchname

o

git push origin :branch-name

#revertir una confirmación ya enviada a un repositorio remoto

git revert hgytyz4567

#branquio de una confirmación anterior usando GIT

git branch branchname <sha1-of-commit>

#Cambiar mensaje de confirmación de la confirmación más reciente que ya se ha enviado a remoto

git commit --amend -m "new commit message" git push --force origin <branch-name>

# Descartando todas las confirmaciones locales en esta rama [Eliminando confirmaciones locales]

Para descartar todas las confirmaciones locales en esta rama, para hacer que la rama local sea idéntica a la "corriente arriba" de esta rama, simplemente ejecute

git reset --hard @{u}

Referencia: http://sethrobertson.github.io/GitFixUm/fixup.html o git reset --hard origin/master [si la rama local es master]

# ¿Revertir un compromiso ya enviado a un repositorio remoto?

$ git revert ab12cd15

#Borrar una confirmación anterior de la rama local y la rama remota

Caso de uso: Acaba de comprometer un cambio en su sucursal local e inmediatamente lo empujó a la sucursal remota. De repente se dio cuenta: ¡Oh no! No necesito este cambio. Ahora hacer que?

git reset --hard HEAD~1 [para eliminar esa confirmación de la rama local. 1 denota el compromiso que hiciste]

git push origin HEAD --force [ambos comandos deben ejecutarse. Para borrar de la rama remota]. La sucursal actualmente retirada será referida como la sucursal donde está realizando esta operación.

# Elimine algunos de los compromisos recientes del repositorio local y remoto y conserve el compromiso que desee. (una especie de revertir confirmaciones locales y remotas)

Supongamos que tiene 3 confirmaciones que ha enviado a la rama remota llamada '' develop ''

commitid-1 done at 9am commitid-2 done at 10am commitid-3 done at 11am. // latest commit. HEAD is current here.

Para revertir al antiguo commit (para cambiar el estado de la rama)

git log --oneline --decorate --graph // para ver todos sus comentarios.

git clean -d -f // limpia cualquier cambio local

git reset --hard commitid-1 // volviendo localmente a este commitid

git push -u origin +develop // empujar este estado a remoto. + hacer fuerza de empuje

# Eliminar la combinación de git local: Caso: Estoy en la rama maestra y la rama maestra combinada con una nueva fase de la fase 2

$ git status

En rama maestro

$ git merge phase2 $ git status

En rama maestro

Tu rama está delante de ''origen / maestro'' por 8 confirmaciones.

P: ¿Cómo deshacerse de esta fusión local de git? git reset --hard y git clean -d -f Ambos no funcionaron. Lo único que funcionó son los siguientes:

$ git reset - hard origin / master

o

$ git reset - hard HEAD ~ 8

o

$ git reset --hard 9a88396f51e2a068bb7 [sha commit code - este es el que estaba presente antes de que ocurrieran todas tus confirmaciones de fusión]

#crear archivo gitignore

touch .gitignore // cree el archivo en usuarios de mac o unix

muestra .gitignore contenidos:

.project *.py .settings

Enlace de referencia a la hoja de trucos de GIT: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf