2011-04-14 18 views
41

La sucursal local de master de mi amigo es aparentemente un desastre (por accidente merge sy commit s, supongo). Sin embargo, sus ramas de desarrollo están bien pero contienen cambios que no está listo para enviar a control remoto.¿Cómo obtener una copia nueva de una sucursal desde el repositorio remoto?

¿Cuál es la mejor manera de anular su rama local master con la rama master remota y obtener una copia nueva (sin anular sus otras ramas)?

Respuesta

58

Como se comentó Jefromi,

git checkout master 
git reset --hard origin/master 

hace lo correcto: establecer el maestro a su estado de origen. (Si ya se encuentra en la rama master, puede omitir el primer comando). También deja intacto el reflog de la rama.


vieja respuesta inferior:

git checkout dev 
git branch -D master 
git checkout master 

Esto cambia a la otra rama ("dev" en este caso - elegir cualquier otra rama que pueda tener), elimina el master rama local, y luego lo recrea desde remotes/origin/master (que podría no funcionar según su configuración y la versión de Git). El último comando es equivalente a menudo

git checkout -b master remotes/origin/master 

En comparación con la nueva respuesta por encima de esto tiene el inconveniente de que el reflog se destruye y vuelve a crear (es decir, puede no tan fácil de deshacer esto si es necesario), y es menos clara Qué pasa aquí. Además, debe tener otra rama a la que pueda cambiar durante la eliminación y la recreación (pero ese fue el caso en la pregunta original).

+6

¿Por qué no simplemente 'git reset --hard origin/master'? Además ... ¿ese último paso incluso funciona? No me parece. ('git checkout -b master origin/master' sin embargo.) – Cascabel

+0

@Jefromi: Tienes razón, no vi la solución obvia. El último parece funcionar para mí (el pago tiene un valor predeterminado si la rama no existe, pero sí una conexión remota). Esto puede depender de la versión, sin embargo. –

+1

Probé la primera solución y no funcionó. Sería bueno editarlo. – lulalala

Cuestiones relacionadas