git no parece extraer todas las actualizaciones: HEAD y origin / HEAD en diferentes posiciones

Terminé con un repository git en un estado que no sé cómo manejar, y necesito ayuda para entender a) qué está pasando, cómo y por qué el repository está en este estado, yb) cómo debo reactjsr lo. Básicamente, cuando salgo del control remoto, termino por delante del control remoto, incluso si restablezco todos los cambios y vuelvo a intentarlo.

Esto es lo que hice:

He bifurcado un repository de git, he clonado la versión original (a la que no tengo acceso de escritura) y luego he añadido mi propio tenedor a la list de controles remotos, de modo que git remote -v muestra lo siguiente:

 $ git remote -v mine git@github.com:tlycken/julia.git (fetch) mine git@github.com:tlycken/julia.git (push) origin git://github.com/JuliaLang/julia.git (fetch) origin git://github.com/JuliaLang/julia.git (push) 

Ahora quiero asegurarme de que mi versión local esté actualizada con todo en el repository upstream, así que corro

 $ git pull origin master From git://github.com/JuliaLang/julia * branch master -> FETCH_HEAD Already up-to-date. tlycken$ git status # On branch master # Your branch is ahead of 'origin/master' by 4 commits. # (use "git push" to publish your local commits) # nothing to commit, working directory clean 

Esto me confunde. ¿Por qué mi twig está por delante del maestro de origen? No he cambiado nada.

Para ver si podía hacer algo al respecto, ejecuté git lg (un alias para git log --graph con alguna git log --graph bonita). La parte superior de la salida se ve así:

 * 6912a42 - (HEAD, mine/master, master) Merge pull request #3052 from daviddelaat/linalgnumber (2013-05-10 11:23:09 -0700) <Viral B. Shah> |\ | * 8116d51 - Use Number instead of Integer in some linalg operations (2013-05-10 19:12:45 +0200) <David de Laat> * | 6cc1532 - Update .travis.yml configuration in the manual. (2013-05-10 21:41:59 +0530) <Viral B. Shah> * | fa1e3fe - Update logdet. Close #3070. (2013-05-10 19:35:37 +0530) <Viral B. Shah> * | a182f7f - (origin/master, origin/HEAD, mine/contrib-base) Merge branch 'master' of github.com:JuliaLang/julia (2013-05-10 03:10:38 -0400) <Jeff Bezanson> 

Aparentemente, los HEAD están en diferentes posiciones. Para asegurarme de get el código correcto en mi repository local antes de comenzar la bifurcación, git reset --hard origin/HEAD para eliminar todo lo que estaba adelante, y luego git pull origin master para asegurarme de estar actualizado (es decir, no se reinició demasiado o algo así):

 $ git pull origin master From git://github.com/JuliaLang/julia * branch master -> FETCH_HEAD Updating a182f7f..6912a42 Fast-forward base/linalg/dense.jl | 2 +- base/linalg/factorization.jl | 44 ++++++++++++++++++++++---------------------- doc/manual/packages.rst | 3 +-- 3 files changed, 24 insertions(+), 25 deletions(-) $ git status # On branch master # Your branch is ahead of 'origin/master' by 4 commits. # (use "git push" to publish your local commits) # nothing to commit, working directory clean 

y estoy de vuelta donde comencé.

¿Que esta pasando aqui? ¿Qué debo hacer para llegar a un estado en el que mi maestro local tenga las últimas actualizaciones desde el inicio?

git pull no actualiza tus references de rastreo ( origin/ …) que hacen un seguimiento de dónde se encuentran varios controles remotos ' HEAD s.

Ejecuta el git fetch origin y actualizará todas las references de origin/ … y el git status ya no pensará que estás adelante.


git pull <remote> <branch> es el equivalente de:

  1. git fetch <remote> <branch>:FETCH_HEAD
  2. git merge FETCH_HEAD

Debido a que explícitamente especifica solo la twig a recuperar, y la trae a la ref local especial FETCH_HEAD , no actualiza nada más localmente, solo FETCH_HEAD y la twig a la que está FETCH_HEAD .

Al ejecutar git fetch <remote> se actualizarán todas las references asociadas a ese repository remoto.