Tengo dos ramas:
- sucursal local (con la que trabajo)
- rama remota (público, solo los commits bien probados van allí)
Recientemente arruiné seriamente mi sucursal local.
¿Cómo reemplazaría la sucursal local por completo con la remota, para poder continuar mi trabajo desde donde está la sucursal remota ahora?
Ya he buscado SO y salir de la sucursal remota localmente no tiene ningún efecto.
Respuestas:
Asumiendo que master es la rama local que está reemplazando, y que "origin / master" es la rama remota a la que desea restablecer:
Esto actualiza su rama HEAD local para que tenga la misma revisión que origin / master, y
--hard
también sincronizará este cambio en el índice y el espacio de trabajo.fuente
git reset
de forma predeterminada, volverá a señalar su rama actual y sincronizará el índice.--soft
omitirá la actualización del índice,--hard
también sincronizará el espacio de trabajo. Mi propia experiencia es usar la--hard
mayor parte del tiempo, excepto cuando quiero deshacer el último commit (que es sologit reset HEAD^
)git fetch origin remote_branch
master
, así que asegúrese de haber verificado primero la rama que está reemplazando.Eso es tan fácil como tres pasos:
git branch -d local_branch
git fetch origin remote_branch
git checkout -b local_branch origin/remote_branch
fuente
git branch -D local_branch
en el primer paso si su rama no está fusionada.fuente
git help branch
dice--track
.When creating a new branch, set up branch.<name>.remote and branch.<name>.merge configuration entries to mark the start-point branch as "upstream" from the new branch. This configuration will tell git to show the relationship between the two branches in git status and git branch -v. Furthermore, it directs git pull without arguments to pull from the upstream when the new branch is checked out.
Arreglé este comando en la respuesta. Gracias por plantear el punto.git status
, informará si su sucursal local está adelante o detrás de la sucursal remota si los tiene asociados. Además, puede hacergit pull
(opush
) en lugar de completargit pull <remote> <branch>
si ya ha configurado su rama para realizar un seguimiento<remote/branch>
.Reemplace todo con la rama remota; pero , solo desde el mismo compromiso, su sucursal local está activada:
O , obtenga lo último de la rama remota y reemplace todo:
Por otro lado, si es necesario, puede borrar los archivos y directorios no rastreados que aún no ha confirmado:
fuente
git clean
comando lo hizo por mí.git reset hard origin/master
no borre los archivos no rastreados. ¡Gracias!La forma más segura y completa de reemplazar la sucursal local actual con el control remoto:
La
stash
línea guarda los cambios que no ha confirmado. Labranch
línea mueve su rama a un nombre diferente, liberando el nombre original. Lafetch
línea recupera la última copia del control remoto. Lacheckout
línea recrea la rama original como una rama de seguimiento.O como una función bash:
que cambia el nombre de la rama actual a algo como reemplazado_master_98d258f.
fuente
git stash pop
en ese flujo de trabajo. Si desea volver a aplicar sus archivos escondidos.Estoy un poco sorprendido de que nadie haya mencionado esto todavía; Lo uso casi todos los días:
Básicamente,
@{u}
es solo una abreviatura de la rama ascendente que su rama actual está rastreando. Por ejemplo, esto generalmente equivale aorigin/[my-current-branch-name]
. Es agradable porque es independiente de la rama.Asegúrese
git fetch
de obtener primero la última copia de la rama remota.fuente
Se puede hacer de varias maneras, continuando editando esta respuesta para difundir una mejor perspectiva de conocimiento.
1) Restablecer duro
Si está trabajando desde la rama de desarrollo remoto, puede restablecer HEAD a la última confirmación en la rama remota de la siguiente manera:
2) Eliminar la rama actual y volver a pagar desde el repositorio remoto
Teniendo en cuenta que está trabajando en la sucursal de desarrollo en el repositorio local, que se sincroniza con la sucursal remota / de desarrollo, puede hacer lo siguiente:
3) Abortar fusión
Si está en medio de una fusión incorrecta (por error, con una rama incorrecta), y desea evitar la fusión para volver a la última rama como se muestra a continuación:
4) Cancelar base
Si está en medio de un rebase incorrecto, puede cancelar la solicitud de rebase de la siguiente manera:
fuente
Puede hacer lo que @Hugo de @Laurent dijo, o puede usar
git rebase
para eliminar las confirmaciones que desea eliminar, si sabe cuáles. Tiendo a usargit rebase -i head~N
(donde N es un número, lo que le permite manipular los últimos N commits) para este tipo de operaciones.fuente
La respuesta seleccionada es absolutamente correcta , sin embargo, no me dejó con los últimos commit / push ...
Entonces para mi:
Como sé que quiero configurar temporalmente mi rama ascendente durante unas semanas en una rama específica (igual a la que cambié / verifiqué anteriormente e hice un restablecimiento completo)
Entonces DESPUÉS de reiniciar
fuente
Si desea actualizar la sucursal que no está actualmente desprotegida, puede hacer lo siguiente:
fuente
Como se proporciona en la explicación elegida, git reset es bueno. Pero hoy en día a menudo utilizamos submódulos: repositorios dentro de repositorios. Por ejemplo, si usa ZF3 y jQuery en su proyecto, lo más probable es que desee que se clonen de sus repositorios originales. En tal caso, git reset no es suficiente. Necesitamos actualizar submódulos a esa versión exacta que se define en nuestro repositorio:
es lo mismo que vendrá (cd) recursivamente al directorio de trabajo de cada submódulo y ejecutará:
Y es muy diferente de
porque los submódulos no apuntan a la ramificación sino a la confirmación.
En esos casos, cuando desprotege manualmente alguna rama para 1 o más submódulos, puede ejecutar
fuente
git reset --hard
. Esto agrega poco valor.Esto funcionó para mí: clean también mostró todos los archivos que eliminó. Si te dice que perderás los cambios, debes esconderte.
fuente
La forma fea pero más simple: elimine su carpeta local y clone el repositorio remoto nuevamente.
fuente