2012-04-24 17 views
12

Este es el escenario: doy repositorio de alguien de Github y lo clono en un directorio local. Hago un cambio, lo comprometo y lo empujo a mi repositorio bifurcado. A continuación, envío una solicitud de extracción al repositorio original, pero se rechaza por cualquier motivo. El repositorio original recibe algunos commits de otras personas, dejando mi versión bifurcada desactualizada. Ahora, ¿cómo obtengo la última versión del repositorio original (en mi repositorio bifurcado y localmente)? Y también, ¿cómo elimino mi historial de commit de Github para mi commit rechazado?¿Cómo vuelvo a tomar un repositorio Git bifurcado sin eliminar y volver a bifurcar?

+0

posible duplicado de [Abandonando confirmaciones Git en Github para solicitudes de extracción rechazadas] (http://stackoverflow.com/questions/9538320/abandoning-git-commits-on-github-for-rejected-pull-requests) – CharlesB

Respuesta

8

Nunca haga sus propios cambios en la rama principal, debe crear una nueva rama, hacer los cambios y presionarla. De todas formas, si desea hacer su rama igual a la distancia hacer:

Asumiendo que tiene el sentido ascendente como un control remoto git fetch upstreamgit checkout -f -B master upstream/master

El comando de checkout anterior sería que amo rama es no seguir adelante y sobrescribirlo con aguas arriba/maestro si no está allí crear desde el upstream/master.

Si usted no tiene añadido aguas arriba como un uso remoto git remote add upstream repositoryurl

EDIT: Debe ser -B

EDIT: git reset --hard upstream/master es más apropiado realidad

4

Mantener sincronizado su depósito bifurcado en GitHub es un proceso de dos pasos.

  1. Mantener tu repositorio local en sincronía con:

    git fetch aguas arriba; git merge aguas arriba/maestro

  2. Mantenga su tenedor en GitHub en sincronía con tu repositorio local de

    git push origin master

Ver GitHub Fork A Repo alguna explicación. Necesita configurar 'ascendente' como un control remoto al repositorio desde el que bifurcó.

Para sus 'commits rechazados', si los hizo en una sucursal local, entonces puede simplemente eliminar la rama. Si no se encuentra en una sucursal local, deberá restablecer el HEAD de la sucursal de nuevo a la confirmación de su elección. Me gusta:

# Assume you are on master and need to go back to commit BeadBabe 
git checkout -b temp 
git branch -f master BeadBabe 
git checkout master 
git branch -d temp 

Gone.

+1

Me pareció un poco más claro que la respuesta aceptada. ¡Gracias por la explicación! – Tim

Cuestiones relacionadas