ver remota rama modificados example cambiar archivos git branch git-checkout

remota - cambiar la rama de git sin archivos de pago



git push example (9)

¿No sería una mejor solución tener dos directorios de trabajo (dos áreas de trabajo) con un repositorio, o incluso dos repositorios?

Hay git-new-workdir herramienta git-new-workdir en contrib/ section para ayudarte con esto.

¿Es posible en Git cambiar a otra sucursal sin revisar todos los archivos? Después de cambiar de rama, necesito eliminar todos los archivos, regenerarlos, confirmar y volver a abrir. Por lo tanto, revisar archivos es una pérdida de tiempo (y hay aproximadamente 14000 archivos, es una operación larga).

Para aclarar todo:

Necesito todo esto para subir la documentation a github.

Tengo un repo con la rama gh-pages. Cuando reconstruyo la documentación localmente, la copio al directorio repo, commit y push a github. Pero no estaba contento porque tenía dos copias de la documentación a nivel local. Y decidí crear una rama vacía y después de activar el interruptor para vaciar y eliminar archivos. Pero volver atrás es una operación larga, así que hice esta pregunta.

Sé que puedo irme en la sucursal de gh-páginas y eliminar archivos, pero no me gustan los árboles sucios que funcionan)


Con tantos archivos, es mejor que solo conserve dos repositorios, uno para cada sucursal. Puede hacer cambios hacia adelante y hacia atrás según sea necesario. Esto va a ser menos sorprendente que tratar de jugar trucos escorbuto con git.


Creo que estás buscando el comando de plomería git read-tree . Esto actualizará el índice pero no actualizará ningún archivo en su directorio de trabajo. Por ejemplo, asumiendo branch es el nombre de la rama para leer:

git read-tree branch

Si quieres comprometerte con la sucursal que acabas de leer, también necesitarás:

git symbolic-ref HEAD refs/heads/branch


Para el beneficio del lector:

Si bien creo que share es correcta, esta solución necesita un ajuste cuando se cambia a algo, que no es una sucursal local. También debería haber alguna forma de hacerlo con comandos regulares, lo cual es fácil de entender. Aquí es lo que se me ocurrió:

git checkout --detach git reset --soft commitish git checkout commitish

Explicado:

  • git checkout --detach es lo mismo que git checkout HEAD^{} que deja atrás la rama actual y entra en "estado de cabeza separada". Entonces la próxima modificación de HEAD no afecta más a ninguna rama. Separar HEAD no afecta el árbol de trabajo ni el índice.
  • git reset --soft commitish luego mueve HEAD al SHA del commitish dado. Si desea actualizar el índice, también, deje --soft distancia, pero no lo recomiendo. Esto, nuevamente, no toca el árbol de trabajo, y ( --soft ) no el índice.
  • git checkout commitish luego une HEAD a la commitish dada (branch) nuevamente. (Si commitish es un SHA, no pasa nada.) Esto tampoco afecta al índice ni al árbol de trabajo.

Esta solución acepta todo lo que se refiere a un compromiso, por lo que es ideal para algunos alias de git . El siguiente rev-parse es solo una prueba para asegurarse de que nada se rompa en la cadena, de modo que los errores tipográficos no se cambian accidentalmente a un estado principal separado (la recuperación de errores sería mucho más compleja).

Esto lleva al siguiente git switch treeish alias:

git config --global alias.switch ''!f() { git rev-parse --verify "$*" && git checkout "HEAD^{}" && git reset --soft "$*" && git checkout "$*"; }; f''

FYI, puedes encontrarlo en mi lista de alias de git .


Puede sobrescribir su archivo HEAD con un nombre de rama diferente:

echo "ref: refs / heads / MyOtherBranch"> .git / HEAD


Sí, usted puede hacer esto.

git symbolic-ref HEAD refs/heads/otherbranch

Si necesita comprometerse en esta rama, también querrá restablecer el índice, de lo contrario terminará comprometiendo algo en función de la última rama desprotegida.

git reset


Si simplemente intenta cambiar el punto de una rama remota, puede hacerlo con "git push" sin tocar su copia local.

http://kernel.org/pub/software/scm/git/docs/git-push.html

El formato de un parámetro <refspec> es un plus + opcional, seguido de la fuente ref <src>, seguido de dos puntos:, seguido de la referencia de destino <dst>. Se utiliza para especificar con qué objeto <src> se actualizará la <dst> ref en el repositorio remoto.

Por ejemplo, para actualizar foo para cometer c5f7eba, haga lo siguiente:

git push origin c5f7eba:foo

No estoy seguro de si eso es lo que buscabas o no.


puedes hacer uso de

1. git checkout -f <new-branch> 2. git cherry-pick -x <previous-branch-commit-id>

previous-branch-commit-id es la confirmación desde donde desea copiar los datos antiguos.


Usando comandos básicos de git solo:

Esta respuesta es un poco más larga que la de Charles, pero consiste únicamente en comandos git básicos que puedo entender y recordar así, eliminando la necesidad de seguir buscándolo.

Marque su ubicación actual (comprométase primero si es necesario):

git checkout -b temp

Restablece (mueve) el marcador a la otra rama sin cambiar el directorio de trabajo:

git reset <branch where you want to go>

ahora la temperatura y otras ramificaciones apuntan a la misma confirmación, y su directorio de trabajo permanece intacto.

git checkout <branch where you want to go>

dado que su HEAD ya está apuntando a la misma confirmación, no se toca el directorio de trabajo

git branch -d temp

Tenga en cuenta que estos comandos también están disponibles en cualquier cliente gráfico.