repositorio remota rama example cambiar git

remota - git pull example



Git: ¿La forma correcta de cambiar la Rama activa en un repositorio simple? (5)

Tengo un repositorio vacío que se utiliza como la tienda central para mi proyecto. Todos los desarrolladores hacen git clone <repo> para compartirlo. Cuando hacen el clon, obtienen un checkout de la rama master (a menos que lo hagan git clone -n ) porque repo.git/HEAD contiene ref: refs/heads/master , haciendo esto la rama activa .

La pregunta es, ¿cómo cambio adecuadamente la Rama activa ? Podría simplemente piratear el archivo repo.git/HEAD directamente, pero parece desagradable y, bueno, hacky.

Intenté hacer git checkout <otherbranch> en el directorio repo .git , pero eso falló porque no estaba en un árbol de trabajo.

git update-ref HEAD refs/heads/otherbranch pero eso acaba de actualizar refs / heads / master para que sea lo mismo que refs / heads / otherbranch (bien, lo hice en un repositorio ficticio, ¡no en uno de producción!)

git update-ref --no-deref HEAD refs/heads/otherbranch y eso casi funcionó. Se actualizó el archivo HEAD , pero lo estableció en el SHA1 de la confirmación señalada por refs/heads/otherbranch .

Estoy probando con la versión de 1.7.0.2.msysgit.0 .

Supongo que no hay forma de hacer esto a través de git push , ya que permitir que todo el mundo cambie su rama predeterminada parece un poco inseguro (!), Pero seguramente hay una mejor manera de hacerlo en el directorio .git del repositorio que directamente piratear el archivo HEAD .


Además, si no tiene acceso al repositorio desnudo, al hacer un git remote set-head y listo

Ver esta response anterior


Comparé dos directorios antes y después de aplicar

git symbolic-ref HEAD refs/heads/mybranch

y parece que solo se cambió el archivo repo.git / HEAD, por lo que probablemente sea bastante seguro solo "piratear" el archivo.


Para cambiar la rama, necesita cambiar la referencia HEAD a la rama que desea usar.

Primero enumere todas las referencias en el repositorio simple haciendo

$find ref

A continuación, busque la referencia para su sucursal, el formato será el siguiente refs/heads/<my_branch> . El próximo paso es verificar la referencia actual, simplemente escriba:

$git symbolic-ref HEAD

para saber cuál es la rama actual y luego actualizarla según sea necesario.

$git sumbolic-ref HEAD ref/heads/<my_branch>

Thant es eso. Disfrutar.


Si tiene acceso al repositorio remoto remoto, este artículo sugiere :

git symbolic-ref HEAD refs/heads/mybranch

Lo cual actualizará el archivo HEAD en su repositorio para que contenga:

ref: refs/heads/mybranch

como se documenta en el git-symbolic-ref

Si no tiene acceso al repositorio remoto, vea mi respuesta anterior .

Recuerde que un comando como git remote set-head :

  • no cambia la rama predeterminada del repositorio remoto .
    Solo cambia una rama de seguimiento remoto almacenada en su repositorio local como refs/remotes/<name>/HEAD

  • no cambia HEAD sí mismo (nuevamente, solo refs/remotes/<name>/HEAD ), de ahí la necesidad de git symbolic-ref .

Así que git remote set-head no es la respuesta aquí.
git symbolic-ref HEAD es, si tiene acceso directo al repositorio remoto.


También tengo un repositorio simple en nuestro servidor y pude recuperar archivos con éxito

git clone //server/repo/directory -b branch_name

en un nuevo repositorio local aunque la página de manual dice que esto es solo para repositorios no descargados.