No soy un maestro de git, pero he estado trabajando con él durante algún tiempo, con varios proyectos diferentes. En cada proyecto, siempre git clone [repository]
y desde ese punto, siempre puedo git pull
, siempre que no tenga cambios sobresalientes, por supuesto.
Recientemente, tuve que volver a una rama anterior, y lo hice con git checkout 4f82a29
. Cuando volví a estar listo para tirar, descubrí que tenía que volver a establecer mi rama en master. Ahora, no puedo tirar usando una escalera, git pull
sino que tengo que especificar git pull origin master
, lo que es molesto, y me indica que no entiendo completamente lo que está sucediendo.
¿Qué ha cambiado que no me permite hacer una escalera git pull
sin especificar el origen maestro y cómo puedo volver a cambiarlo?
ACTUALIZAR:
-bash-3.1$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[branch "master"]
[remote "origin"]
url = [email protected]:user/project.git
fetch = refs/heads/*:refs/remotes/origin/*
ACTUALIZACIÓN 2: Para ser claros, entiendo que mi método original puede haber sido incorrecto, pero necesito arreglar este repositorio para que pueda simplemente usarlo git pull
nuevamente. Actualmente, git pull da como resultado:
-bash-3.1$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull ').
See git-pull(1) for details on the refspec.
If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:
branch.master.remote =
branch.master.merge =
remote..url =
remote..fetch =
See git-config(1) for details.
Puedo decir git pull
qué rama fusionar, y funciona correctamente, pero git pull
no funciona como lo hizo originalmente antes de mi git checkout
.
fuente
Respuestas:
A continuación
[branch "master"]
, intente agregar lo siguiente al archivo de configuración de Git del repositorio (.git/config
):Esto le dice a Git 2 cosas:
git pull
en la rama maestra, sin control remoto ni rama especificada, use el control remoto predeterminado (origen) y combine los cambios desde la rama maestra remota.Sin embargo, no estoy seguro de por qué esta configuración se habría eliminado de su configuración. Es posible que tenga que seguir las sugerencias que otras personas también han publicado, pero esto puede funcionar (o al menos ayudar).
Si no desea editar el archivo de configuración a mano, puede usar la herramienta de línea de comandos en su lugar:
fuente
.git/config
).$ git config branch.master.remote origin ; git config branch.master.merge refs/heads/master
lugar.Si lo prefiere, puede configurar estas opciones a través de la línea de comando (en lugar de editar el archivo de configuración) de la siguiente manera:
O, si eres como yo y quieres que este sea el valor predeterminado en todos tus proyectos, incluidos aquellos en los que podrías trabajar en el futuro, agrégalo como una configuración global:
fuente
.git
en la que git parece mantener el código hash demaster
s commit actual.Esto agregará la siguiente información a su
config
archivo:Si es
branch.autosetuprebase = always
así, también agregará:fuente
fatal: Not a valid object name: 'origin/master'.
a pesar de queorigin
es un control remoto válido ymaster
existe, como de costumbre, en ambos repositorios.git branch --set-upstream-to=origin/master master
.Me resulta difícil recordar el exacto
git config
o losgit branch
argumentos como en las respuestas de mipadi y Casey, así que uso estos 2 comandos para agregar la referencia ascendente:Esto agregará la misma información a su .git / config, pero me resulta más fácil de recordar.
fuente
Git pull combina dos acciones: obtener nuevas confirmaciones del repositorio remoto en las ramas rastreadas y luego fusionarlas en su rama actual .
Cuando revisó una confirmación particular, no tiene una rama actual, solo tiene HEAD apuntando a la última confirmación que realizó. Entonces
git pull
no tiene todos sus parámetros especificados. Por eso no funcionó.Según su información actualizada, lo que intenta hacer es revertir su repositorio remoto. Si conoce la confirmación que introdujo el error, la forma más fácil de manejar esto es con la
git revert
que registra una nueva confirmación que deshace la confirmación de error especificada:Dado que es su servidor lo que desea cambiar, supondré que no necesita reescribir el historial para ocultar la confirmación de errores.
Si el error se introdujo en una confirmación de fusión, este procedimiento no funcionará. Consulte Cómo revertir una fusión defectuosa .
fuente
También hay una manera de configurar Git para que siempre extraiga y empuje la rama remota equivalente a la rama actualmente desprotegida en la copia de trabajo. Se llama una rama de seguimiento que git ready recomienda configurar de forma predeterminada .
Para el siguiente repositorio sobre el directorio de trabajo actual:
Para todos los repositorios de Git, que no están configurados de otra manera:
Tipo de magia, en mi humilde opinión, pero esto podría ayudar en los casos en que la rama específica es siempre la rama actual .
Cuando haya
branch.autosetupmerge
establecidotrue
y finalizado la compra de una sucursal por primera vez, Git le informará sobre el seguimiento de la sucursal remota correspondiente:Git empujará a esa rama correspondiente automáticamente:
fuente
Como no quería editar mi archivo de configuración de git, seguí la información en la publicación de @ mipadi y usé:
fuente
Su pregunta inmediata sobre cómo hacer que sea un maestro, debe hacer lo que dice. Especifique la refspec para extraer en su configuración de sucursal.
fuente
Solo quería agregar alguna información que, podemos verificar esta información si
git pull
se refiere automáticamente a cualquier rama o no.Si ejecuta el comando,
git remote show origin
(asumiendo el origen como el nombre corto para remoto), git muestra esta información, ya sea que existagit pull
o no una referencia predeterminada .A continuación se muestra un resultado de muestra (tomado de la documentación de git).
Tenga en cuenta la parte donde se muestra, rama local configurada para git pull.
En este caso,
git pull
se referirá agit pull origin master
Inicialmente, si ha clonado el repositorio, utilizando git clone, estas cosas se resuelven automáticamente. Pero si ha agregado un control remoto manualmente usando git remote add, estos faltan en la configuración de git. Si ese es el caso, la parte donde muestra "Rama local configurada para 'git pull':", faltaría en la salida de
git remote show origin
.Los siguientes pasos a seguir si no existe una configuración para
git pull
, ya han sido explicados por otras respuestas.fuente