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 comorefs/remotes/<name>/HEAD
no cambia
HEAD
sí mismo (nuevamente, solorefs/remotes/<name>/HEAD
), de ahí la necesidad degit 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.