usar tag repositorios remoto remote ramificacion presentación poner para eliminar como cambiar git

tag - presentación git



¿Cómo reemplazar una sucursal local por una sucursal remota completamente en Git? (10)

Tengo dos ramas:

  1. sucursal local (con la que trabajo)
  2. sucursal remota (pública, solo las confirmaciones bien probadas van allí)

Hace poco estropeé mi sucursal local (supongo que cada git-novato ha estado en mi lugar en algún momento)

¿Cómo reemplazaría la sucursal local por completo con la remota, para poder continuar mi trabajo desde donde se encuentra la sucursal remota ahora?

(Ya busqué en SO y verifiqué localmente la sucursal remota no tiene ningún efecto)


  1. Asegúrese de haber revisado la sucursal que está reemplazando (del comment de Zoltán).
  2. Suponiendo que el maestro es la rama local que está reemplazando, y que "origen / maestro" es la rama remota a la que desea restablecer:

    git reset --hard origin/master

Esto actualiza su rama HEAD local para que sea la misma revisión que origin / master, y --hard sincronizará este cambio también en el índice y el área de trabajo.


Como se proporciona en la explicación elegida, git reset es bueno. Pero hoy en día a menudo usamos submódulos: repositorios dentro de repositorios. Por ejemplo, si usa ZF3 y jQuery en su proyecto, probablemente querrá que se clonen desde sus repositorios originales. En tal caso, git reset no es suficiente. Necesitamos actualizar los submódulos a esa versión exacta que se definen en nuestro repositorio:

git checkout master git fetch origin master git reset --hard origin/master git pull git submodule foreach git submodule update git status

es lo mismo que vendrá (cd) recursivamente al directorio de trabajo de cada submódulo y ejecutará:

git submodule update

Y es muy diferente de

git checkout master git pull

porque los submódulos no apuntan a la rama sino a la confirmación.

En esos casos, cuando verifica manualmente alguna rama para 1 o más submódulos puede ejecutar

git submodule foreach git pull


Eso es tan fácil como tres pasos:

  1. Elimina tu sucursal local: git branch -d local_branch
  2. Obtenga la última rama remota: git fetch origin remote_branch
  3. Reconstruye la rama local basada en la remota: git checkout -b local_branch origin/remote_branch

La respuesta seleccionada es absolutamente correcta , sin embargo, no me dejó con las últimas confirmaciones / empujes ...

Así que para mí:

git reset --hard dev/jobmanager-tools git pull ( did not work as git was not sure what branch i wanted)

Ya que sé que quiero configurar temporalmente mi rama en sentido ascendente durante unas semanas para una rama específica (igual que la que cambié / verifiqué antes e hice un reinicio completo)

Así que después de reiniciar

git branch --set-upstream-to=origin/dev/jobmanager-tools git pull git status ( says--> on branch dev/jobmanager-tools


La forma más fea pero más sencilla: elimine su carpeta local y vuelva a clonar el repositorio remoto.


La forma más segura y completa de reemplazar la sucursal local actual con el control remoto:

git stash git merge --abort git rebase --abort git branch -M yourBranch replaced_yourBranch git fetch origin yourBranch:yourBranch git checkout yourBranch

La línea de stash oculta los cambios que no ha confirmado. La línea de branch mueve su sucursal a un nombre diferente, liberando el nombre original. La línea de recuperación recupera la última copia del control remoto. La línea de checkout recrea la rama original como una rama de seguimiento.

O como una función de bash:

replaceWithRemote() { yourBranch=${1:-`git rev-parse --abbrev-ref HEAD`} git stash git merge --abort git rebase --abort git branch -M ${yourBranch} replaced_${yourBranch}_`git rev-parse --short HEAD` git fetch origin ${yourBranch}:${yourBranch} git checkout ${yourBranch} }

que cambia el nombre de la rama actual a reemplazado con algo_master_98d258f.


Puede hacer lo que dice @Hugo de @Laurent, o puede usar git rebase para eliminar los compromisos de los que desea deshacerse, si sabe cuáles. git rebase -i head~N a usar git rebase -i head~N (donde N es un número, lo que te permite manipular los últimos N confirmados) para este tipo de operaciones.


Reemplace todo con la rama remota; pero , solo desde el mismo compromiso, su sucursal local está en:

git reset --hard origin/some-branch

O BIEN , obtenga lo último de la sucursal remota y reemplace todo:

git fetch origin some-branch git reset --hard FETCH_HEAD

Además, si es necesario, puede eliminar los archivos y directorios sin seguimiento que aún no ha confirmado:

git clean -fd


Si desea actualizar la rama que no está actualmente activada, puede hacerlo

git fetch -f origin rbranch:lbranch


git branch -D <branch-name> git fetch <remote> <branch-name> git checkout -b <branch-name> --track <remote>/<branch-name>