Justo cuando pensaba que tenía el truco del git checkout -b newbranch-commit/commit/commit-commit-git checkout master-git merge newbranch - git rebase -i master - git push flujo de trabajo en git, algo explotó, y no veo ninguna razón para ello.git sucursal maestra local detuvo el seguimiento de controles remotos/origen/maestro, no puede presionar
Aquí está el flujo de trabajo general, que ha trabajado para mí en el pasado:
# make sure I'm up to date on master:
$ git checkout master
$ git pull # k, no conflicts
# start my new feature
$ git checkout -b FEATURE9 # master @ 2f93e34
Switched to a new branch 'FEATURE9'
... trabajo, comprometerse, trabajo, compromiso, trabajo, comprometerse ...
$ git commit -a
$ git checkout master
$ git merge FEATURE9
$ git rebase -i master # squash some of the FEATURE9 ugliness
Ok hasta el momento; Ahora lo que espero para ver - y normalmente ver - es la siguiente:
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Pero en cambio, solamente veo "nada que cometen (directorio limpio de trabajo)", no "su rama está por delante de 'origin/master' por 1 cometer", y git pull muestra esta rareza:.
$ git pull
From . # unexpected
* branch master -> FETCH_HEAD # unexpected
Already up-to-date. # expected
y git branch -a -v muestra esto:
$ git branch -a -v
FEATURE9 3eaf059 started feature 9
* master 3eaf059 started feature 9
remotes/origin/HEAD -> origin/master
remotes/origin/master 2f93e34 some boring previous commit # should=3eaf059
git branch muestra claramente que actualmente estoy * master y git log muestra claramente que master (local) está en 3eaf059, mientras que remotes/origin/HEAD -> remotes/origin/master está atascado en la bifurcación.
Idealmente me gustaría saber la semántica de cómo podría haber entrado en esto, pero me gustaría conformarme con una forma de obtener mi copia de trabajo rastreando el maestro remoto de nuevo & para que los dos vuelvan a sincronizarse sin perder el historial. ¡Gracias!
(Nota: Me volvieron a clonar el repositorio en un nuevo directorio y volver a aplicar manualmente los cambios, y todo funcionaba bien, pero no quiero que eso sea la solución estándar.)
Addendum: El título dice "no se puede presionar", pero no hay ningún mensaje de error. Acabo de recibir la respuesta "ya actualizada" aunque git branch -a -v muestra que el maestro local está adelantado/remotos/origen/maestro. Aquí está la salida de git pull y Git remoto -v, respectivamente:
$ git pull
From .
* branch master -> FETCH_HEAD
Already up-to-date.
$ git remote -v
origin [email protected]:proj.git (fetch)
origin [email protected]:proj.git (push)
Addendum 2: Parece como si mi maestro local está configurado para empuje a la distancia, pero no a sacar de eso. Después de hacer for remote in 'git branch -r | grep -v master '; do git checkout --track $remote ; done
, esto es lo que tengo. Parece que solo necesito obtener el maestro tirando desde controles remotos/origen/maestro nuevamente, ¿no?
$ git remote show origin
* remote origin
Fetch URL: [email protected]:proj.git
Push URL: [email protected]:proj.git
HEAD branch: master
Remote branches:
experiment_f tracked
master tracked
Local branches configured for 'git pull':
experiment_f merges with remote experiment_f
Local refs configured for 'git push':
experiment_f pushes to experiment_f (up to date)
master pushes to master (local out of date)
¿Podría agregar la salida de 'git remote -v' a su pregunta. –
Además, el título de la pregunta se refiere a problemas con 'push', pero no tienes información sobre mensajes de error con' push'. –
Debe tener cuidado con las ramas de rebase que rastrean remotos (es decir, su rama 'master') porque eso reescribirá el historial y es posible que se confunda a usted mismo o a su repositorio remoto. Si desea comprimir confirmaciones, puede aplastarlas en la rama de características * antes de * fusionarlas con el maestro hasta que esté más cómodo con lo que hace. – nickgrim