2009-05-11 17 views
21

Trabajo 100% con una rama que hice de la rama principal. Ahora que un colega ha retrocedido al origen/maestro, traté de introducir esos cambios en mi rama personal. Cuando hago un 'master git checkout' seguido de un 'git status' me sale el siguiente:Git: cómo es una rama a la que no me comprometo antes del origen/maestro

# Your branch is ahead of 'origin/master' by 2 commits. 

¿Cómo es una rama que nunca se comprometen a una ventaja de 2 compromete? ¿Cuál es la mejor manera de descubrir qué compromisos son y esencialmente deshacerlos? No deseo enviar nada a Origin/Master, ya que eso podría causar conflictos desconocidos.

+0

Para que Git sea una herramienta tan simple, esta es la parte más confusa al respecto. Tengo el mismo problema que tu.Nunca me he comprometido con mi rama maestra. Siempre me ramifico y hago mis cambios. Cuando hago un 'Git Pull Origin Master', entiendo que hay 200 commits detrás. ¿Por qué? Nunca lo toqué. Desearía que aclarasen esto. – Jeff

Respuesta

35

Para ver las confirmaciones que tiene en la cabeza de que no están en el origen/maestra:

git log origin/master.. 

Para soplar a la basura y crea tu cabeza lo mismo que origin/master:

git reset --hard origin/master 

Cómo ¿Impulsó los cambios a su propio repositorio? Noté que mencionaste "push" ... ¿Es el origen un repositorio central? Repo de su colega Sospecho que lo que realmente quería hacer era sacar los cambios de su colega, ya sea directamente o desde un punto central de preparación, en lugar de presionar. Podría ser simplemente que los 2 cambios que tiene delante del origen/maestro son en realidad los cambios de su colega, pero la rama de seguimiento de origen/maestro está obsoleta.

+0

Gracias araqnid. Solo curiosidad, ¿qué hace git log origen/master ... hacer en este caso? –

+3

Con los comandos de git que tienen un * rango * de revisiones, A..B es una abreviación para "B^A" o "B - no A". "A .." es en sí mismo una abreviación para "CABEZA --no A". git carga la revisión B, luego regresa al gráfico de revisión y se detiene cuando encuentra confirmaciones que se pueden alcanzar desde A (a menudo, A sí mismo). En el caso de un historial de revisión simple donde el gráfico es solo una línea, esto simplifica mostrar las confirmaciones después de A hasta B. – araqnid

+0

+1 Gracias. <3 –

0

¿Ha hecho alguna git rebase 'en la rama en la que está trabajando?

Si no puede intentar copiar su rama (git checkout -b testrebase) y emitir un git rebase master para ver si eso funciona. Esto desenmarañará todas las confirmaciones que hizo en relación con el maestro y luego tratará de aplicarlas de nuevo (hace que la historia tenga sentido, básicamente). Si no funciona, simplemente elimine testrebase.

4

Estás trabajando en una rama de master, y has realizado dos commits que no están en origin/master.

El mensaje # Your branch is ahead of 'origin/master' by 2 commits. está diciendo:

# Your branch 'mybranch' has two commits not in 'origin/master' 

Imaginando usuarios git números de revisión SVN-como, eres rama se compromete 1, 2, 3, 4, 5 - origin/master pero solamente tiene 1, 2, 3. Por lo tanto el historial de revisión se ve algo como lo siguiente diagrama ASCII mierda ..

your branch         -- [commit 4]--[commit 5] 
              /     /\ HEAD 
master --[commit 1]--[commit 2]--[commit 3]-/ 
             /\ origin/master 

Para mostrar los dos últimos comete en el registro, se puede hacer ..

git log HEAD..HEAD~2 
0

Es posible que deba asegurarse de que su origen/maestro esté actualizado con su versión repo de maestro. Pruebe a ejecutar:

git fetch origin master 

por lo que su origen/maestro local es el mismo que el capitán del repo. A continuación, cuando se ejecuta

git pull origin master 

usted debe conseguir una visualización precisa de cuántos se compromete por delante de su maestro local es. Después de eso, puede ejecutar araqnid's command para ver qué confirmaciones son realmente diferentes.

Cuestiones relacionadas