2010-04-26 20 views

Respuesta

8

Justo:

git clone $url 

En serio! Esa es la mejor manera.

Puede hacer todo tipo de órdenes git reset y git branch para mover las referencias, pero el único propósito sería mantener sus confirmaciones en algún lugar de su repositorio local para referencia futura. Si ese es el objetivo, simplemente mantenga todo el repositorio tal como está, y vuelva a clonar el origen.

para aceptar todos los cambios en una sola rama, foo:

git checkout foo 
    git fetch origin +refs/heads/foo:refs/remotes/origin/foo 
    git reset refs/remotes/origin/foo 

foo ahora apuntará al mismo cometió como en fooorigin. Si desea eliminar los archivos en su directorio de trabajo, agregue --hard al git reset. Si desea fusionarse primero, reemplace fetch con pull.

Puede tener un montón de compromisos pendientes en su repositorio local, que GIT puede limpiar algún día, pero por un tiempo todavía puede acceder a ellos a través del reflog.

+0

Es bueno saberlo :-) –

+1

Hay un gran problema con esto: tengo muchas * adiciones * al árbol de trabajo. Solo quiero aceptar/aplicar todos los cambios que se han realizado en el control remoto. No quiero desechar todo el estado de mi trabajo actual. Entonces esto no funciona como una respuesta para mí. – rfay

+0

@Randy, esa es una pregunta diferente, pero una buena. – cdunn2001

0

Aquí está el enfoque que utilicé, que parece estar bien. Tengo una rama llamada "theirs" que contiene la nueva versión de todo en el control remoto. Una versión llamada "nuestra" es mi trabajo basado en una versión antigua de la suya, que incluye demasiados cambios irrelevantes pero muchas adiciones (nuevos subdirectorios de sitios/todos) que quiero mantener.

git checkout ours 
git checkout theirs -- *.php *.txt *.config modules themes includes scripts 
git commit -m "New version with all new key files from 'theirs'" 

Mientras me dio la lista de archivos y directorios en el segundo pago y envío correcta, esto debe estar bien.

Si quería que el historial se basara en la rama "suya", podría querer hacer esto al revés.

+0

Randy, puedes editar ese comentario, luego sangrar cada línea de código por 8 espacios (¿quizás 4?) Para mostrar mejor lo que quieres decir. '--ours' y '--theirs' son indicadores válidos, por lo que debe usar palabras diferentes para nombres de ramas ilustrativos. Pero sí, la especificación de rutas le permitirá obtener solo esos archivos. – cdunn2001

5

O:

git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git checkout --theirs 
git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git add 

lo que obliga a aceptar todos los archivos remotos en conflicto.

Cuestiones relacionadas