2012-03-02 16 views
16

He bifurcado el proyecto de alguien y he hecho algunas confirmaciones. Completé una solicitud de extracción, y no fue aceptada (o el cambio no era deseable, o el autor reescribió la funcionalidad para estar en línea con "su estilo"). Ahora estoy atascado con mi bifurcación local teniendo algunos compromisos extra que nunca entrarán en la corriente ascendente. Puedo hacer una copia de seguridad de los conjuntos de cambios, pero luego tengo el doble de compromisos adicionales y tendré que cargarlos para siempre. ¡Es feo!Abandonar Git se compromete en Github por solicitudes de extracción rechazadas

¿Cuál es la mejor manera de abandonar estos commits que nadie quiere y recuperar mi fork para seguir el upstream? Sé que puedo eliminar el tenedor por completo y volver a tenedor, pero esto es muy duro y perdería cualquier otro trabajo que esté haciendo.

+0

¿Por casualidad hizo las modificaciones _proposed_ en una rama separada (bifurcada)? –

Respuesta

19

Puede restablecer el estado de su repositorio a una confirmación anterior. En primer lugar averiguar qué comprometerse desea restablecer tu repositorio a:

git log 

Para restablecer su cesión temporal a ese estado:

git reset --hard <commit_hash> 

Si usted tiene un acuerdo de recompra a distancia en forma de horquilla, que puede empujar a estos cambios de nuevo it:

git push -f <remote> <branch> 

Es posible que desee cambiar su flujo de trabajo para facilitar las cosas en el futuro.

Cuando cambio un repositorio y estoy haciendo mis propios cambios, primero configuré dos mandos a distancia. Un control remoto apuntará a mi repositorio bifurcado (por ejemplo, origin) y agregará otros puntos remotos al repositorio original del que se bifurcó (por ejemplo, original_repo). Por lo que podría tener algo como:

$ git remote 
    origin 
    original_repo 

puedo crear una rama para hacer todo mi trabajo en, por ejemplo: feature. Al hacer una solicitud de extracción, lo hago desde la rama feature a la rama original_repomaster. Si se rechaza la solicitud de extracción, como en el ejemplo, puede abandonar esta rama. Si desea trabajar en más modificaciones, simplemente cree otra rama desde master y úsela para trabajar en.

Tampoco confirmo ni fusiono ningún cambio local en la rama master. Solo uso la rama master para sincronizar con la rama original_repomaster. por ejemplo:

git checkout master 
    git fetch original_repo 
    git merge original_repo/master 

Esto asegura la rama master siempre se sincroniza con master rama de la cesión temporal originales. Por ejemplo, si la solicitud de extracción fue aceptada y fusionada, cuando se produzca la fusión y fusión, el master local también tendrá todo el código 'aprobado' utilizado en el repositorio original.

Básicamente use master para sincronizar con el repositorio original master y siempre bifurque desde el maestro cuando desee realizar ediciones. Use esas ramas para sus solicitudes de extracción al repositorio original.

2

Retrocede tu rama principal unos pocos pasos (asumiendo que quieres omitir tres confirmaciones) y reescribe tu repositorio de github presionando -f.

git reset --hard HEAD~3 
git push -f origin master 
Cuestiones relacionadas