ver tipos tag ramas rama etiquetas eliminar crear git git-branch master

tag - tipos de etiquetas en git



Git: mover los cambios fuera de la rama maestra (6)

A partir de su descripción, asumo que aún no ha realizado ningún cambio, ¿es correcto?

Si es así, aquí están tus respuestas:

Cómo evitar ediciones directas a master

Necesitarías establecer eso en tu editor, pero eso probablemente será difícil. Mostrar su rama actual en su solicitud y su editor ayuda mucho.

Cómo mover los cambios a una nueva rama nueva rama new-working-branch y luego descartar working-branch

git checkout -b new-working-branch git add … git commit -m "mycommit"

Como todavía no has comprometido nada para dominar, no necesitas cambiar nada en el maestro. Ahora puedes descartar tu rama de trabajo si lo deseas.

Cómo mover los cambios a working-branch

git checkout -b temp-branch git add … git commit -m "mycommit" git rebase --onto working-branch master git checkout working-branch git reset --hard temp-branch git branch -d temp-branch

Si sus cambios no entran en conflicto con los cambios que están en el maestro, pero no en la rama de trabajo, esto se puede hacer mucho más simple:

git stash git checkout working-branch git stash pop

Pregunta básica pero esto me pasa todo el tiempo:

  • Hacer cambios en una working-branch
  • Cambiar a master
  • git merge working-branch
  • git push
  • cap deploy (a la puesta en escena)
  • hacer una nueva taza de té

luego vuelvo y pienso en otra cosa y empiezo a hacer algunos cambios ... mientras aún estoy en master.

¿Qué es una manera fácil de:

  1. evitar ediciones directas en el master (advertencia quizás)
  2. para mover todas las ediciones a working-branch y borrar el master para que pueda continuar editando en working-branch
  3. ¿Para girar las ediciones en una rama completamente nueva, nueva rama new-working-branch y luego descartar working-branch ?

Tomó un riesgo y probó una recomendación en la última parte de la sección "Ramas" de esta página, ¡¡ pero eso acabó con TODAS mis ediciones!?! tal vez porque después de git branch dubious-experiment y git checkout master el git status en ambas sucursales era idéntico (no "limpio" en master). Así que git reset --hard <SHA1sum> eliminó todos los cambios en ambos!?!

git branch dubious-experiment M---N-----O----P---Q ("master" and "dubious-experiment") git checkout master # Be careful with this next command: make sure "git status" is # clean, you''re definitely on "master" and the # "dubious-experiment" branch has the commits you were working # on first... git reset --hard <SHA1sum of commit N>


Adquiera el hábito de escribir $ git status antes de ejecutar un comando git que modifique algo.

Dado esto, probablemente haya editado su archivo pero no lo haya registrado, porque ejecutaría el git status antes de la confirmación. En este caso, git hace lo correcto si simplemente cambias las ramas y luego las confirmas.

Si ha disparado un commit a master, entonces simplemente mueva el archivo entre ramas con algo como esto:

$ git checkout --patch master <somefile>

Realmente no tiene que restablecer el maestro si solo va a combinar el mismo archivo con él, pero como es de suponer que todavía no ha introducido nada, solo debe restablecer las ramas de seguimiento remoto ...

$ git reset master origin/master $ git reset stage origin/stage # whatever


Generalmente recomiendo la siguiente configuración de Git:

git config push.default nothing

Con esto, al menos tendrás que nombrar la rama cuando empujes. No impedirá que se comprometa a dominar localmente, pero cuando se da cuenta de que lo ha hecho, puede mover esos compromisos a una rama sin afectar a nadie.


Si ya ha realizado los cambios para master pero no ha presionado a ningún lado ...

Crea una nueva rama para los últimos cambios.

git checkout -b newfeat master

vuelva a reproducir todos los cambios (mueva las confirmaciones) en la parte superior de su rama de trabajo

git rebase --onto working-branch origin/master newfeat

cambiar a la rama master y restablecerla al estado del último impulso

git checkout master git reset --hard origin/master

En este punto tienes:

  • master apuntando a la última confirmación empujada ( origin/master )
  • working-branch nunca cambió
  • una nueva rama newfeat que contiene todos los nuevos compromisos y está por delante de working-branch de working-branch .

Utilicé para casos similares:

git branch -f <branch-name> git checkout <branch-name>

o

git checkout -B <branch-name>

.

Ambas variantes mueven el branch-name la rama a su compromiso actual sin reiniciar el árbol.


1. evitar ediciones directas en el master (advertencia quizás)

No eres el único que quiere esto. La mejor idea que he encontrado es poner la rama git directamente en el indicador de shell. Mi mensaje se ve así:

[user@host directory:git_branch]

También coloreé la entrada de git_branch, por lo que es bastante obvio en qué estoy trabajando en todo momento. These two enlaces en deberían ayudar con su solicitud.

2. para mover todas las ediciones a la rama de trabajo y borrar el maestro para que pueda continuar editando en la rama de trabajo

o

3. ¿Para girar las ediciones en una rama completamente nueva, nueva rama de trabajo y luego descartar la rama de trabajo?

Estas son realmente la misma pregunta: cómo mover los cambios del maestro a una rama, ya sea una rama antigua o una nueva. Y tu propia respuesta es correcta. Aunque a segunda vista, asumiendo que eres un maestro, podrías simplemente ejecutar:

git branch new_branch git reset --hard origin/master

Prefiero simplemente restablecer master a origin / master en lugar de preocuparme por un SHA de confirmación específico. Pero tus pasos fueron esencialmente correctos. En cuanto a por qué perdiste los cambios, tendría que pensar que, por error, no había un puntero de bifurcación a Q cuando restableciste el maestro. Ninguna otra explicación tiene sentido. Una vez más, tener el indicador de shell de la rama ayudará a evitar estos errores. Además, soy un gran fan del uso de gitk o git log --graph para verificar dónde están mis sucursales antes de moverlas. Como no puedo usar gitk fácilmente en el trabajo, tengo un alias en mi .gitconfig llamado "gráfico", que es esencialmente una versión de la línea de comandos:

[alias] graph = log --graph --all --date=short --pretty=format'':%C(yellow)%h%Cblue%d%Creset %s %Cgreen %aN, %ad%Creset''

Esto mostrará el gráfico en el extremo izquierdo, el SHA de confirmación en amarillo, las ramas en azul, el mensaje de confirmación en blanco y el autor y la fecha en verde. Por supuesto esto puede ser modificado a su gusto.

[editado para simplificar los comandos anteriores]

==============================

En respuesta al comentario a continuación:

Empezar con

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

Ahora ejecuta git checkout -b new_branch

A-B < origin/master / C-D < master, new_branch

Ahora compruebe maestro, git checkout master . Tenga en cuenta que git checkout -b new_branch && git checkout master es el mismo que git branch new_branch si ya estaba en master. Edité la respuesta anterior para reflejar esto.

Ahora reinicie master a origen / master, git reset --hard origin/master

A-B < master, origin/master / C-D < new_branch

Debido a que tenía una rama (new_branch) apuntando a D, no se pierden cambios. Si he cometido un error, por favor explique dónde.