2009-08-25 13 views
139

Duplicar posible:
Using Git how do I find modified files between local and remote¿Cómo puedo ver las confirmaciones entrantes en git?

Como puedo ver confirmaciones entrantes en git? O mejor aún, ¿ves lo que acabo de decir git fetch/git pull ed?

Editar: Para aclarar la pregunta: alguien me dice que, para obtener algunas correcciones, debo sacar de su repositorio. Mi objetivo es ver cuáles son sus cambios antes de los acepto. git pull se fusiona automáticamente, que no es lo que quiero. git fetch los agarraré sin fusionarlos, pero no estoy seguro de cómo ver exactamente qué acabo de extraer. La razón para el fraseo original es que normalmente uso Mercurial, donde el comando sería hg incoming <repo name here> — un comando por el cual parece que falta git un análogo.

Respuesta

149

incoming ISN No es un mapeo directo en git porque puede (y a menudo lo hago) tener varios repositorios desde los que está extrayendo, y cada repositorio tiene múltiples ramas.

Si hubiera un equivalente de comando de entrada de Hg, probablemente sería la siguiente:

git fetch && git log ..origin/master 

Es decir, "ir a tomar todas las cosas desde el río arriba, y luego comparar mi rama actual en contra de la rama principal aguas arriba ".

Del mismo modo, saliente sería la siguiente:

git fetch && git log origin/master.. 

En la práctica, sólo escriba los manualmente (a pesar de que he creado un alias para una de ellas), ya que es fácil tener un montón de ramas locales de seguimiento y siendo rastreado por muchas ramas remotas y no tiene problemas para mantenerlo unido.

+6

También es posible que desee utilizar 'git diff --stat origin/master' para ver el diffstat que' git pull' muestra después de la fusión exitosa. –

+1

¡Gracias por esta respuesta @Dustin! ¿Podría preguntar, no entiendo muy bien la magia detrás de 'log ..origin/master' ¿qué significan los puntos? – gideon

+0

No es tanto magia, se muestra en la sinopsis de 'git log' y se describe como la segunda opción en la sección de opciones de [la página man] (http://schacon.github.com/git/git-log. html) que luego conduce al [gitrevisions] (http://schacon.github.com/git/gitrevisions.html) doc que entra en mucho más detalle. – Dustin

1

No existe tal cosa como los "commits entrantes" cometen localmente los usuarios y los presionan. Abriría gitx o gitk (que viene con git) y vería cómo se ve el repositorio ... Creo que eso le dará una visión clara.

utilizar: gitk --all para ver.

+0

Consulte mi pregunta aclarada. –

+0

Ahh, veo lo que quieres decir ahora, la respuesta de Dustin está muerta. gracias por más detalles. –

10

Es posible que desee examinar la diferencia entre dos repositorios. Asumido que tiene una rama local de 'maestro' y una rama de seguimiento a distancia 'origin/master', donde otras personas comprometen su código, puede obtener diferentes estadísticas sobre las diferencias de las dos ramas:

git diff --summary master origin/master 

git diff --stat master origin/master 

git diff --numstat master origin/master 

git diff --dirstat master origin/master 

git diff --shortstat master origin/master 

git diff --name-only master origin/master 

git diff master origin/master 
+1

pregunta no se trata de ver el diff, se trata de visualizar los commits y pull que ha realizado el usuario. –

+1

Cierto, pero siento como si Netzpirat estuviera cerca; si esto me mostrara registros en lugar de diffs, sería perfecto. –

80

También le puede interesar git whatchanged que ofrece una buena visión general de los cambios que se han realizado en algún rango de confirmaciones.

Si desea revisar lo que está a punto de tirar, hacer un git fetch primera, que sólo actualiza las ramas locales de seguimiento para el repositorio remoto (y no cualquiera de sus ramas), y luego usar cualquier comando que muestra usted se compromete con lo nuevo que está por tirar.Por ejemplo:

git whatchanged ..origin 

Esta es la abreviatura para mostrar las confirmaciones entre "el antepasado común de donde estoy ahora y origen" a través de "origen".

+0

ahh, me gusta más que usar git log –

6

Cuando alguien le dice que tire, le darán la URL del repositorio y una bifurcación (el valor predeterminado es master).

que acababa de hacer

git fetch URL branch 

seguido por uno (en orden decreciente de preferencia):

# note 3 dots in next 3 commands 
gitk HEAD...FETCH_HEAD 
    # shows all commits on both sides since the "fork" point 
gitk --cherry-pick HEAD...FETCH_HEAD 
    # as above but skips identical patches so you really see the differences 
git log --graph --boundary --left-right --cherry-pick --decorate HEAD...FETCH_HEAD 
    # I have a nice alias for this; it's the text mode eqvt of the above 

también uso "tig" a veces, pero este caso de uso específico (ver tanto lados) no está bien servido por tig.

Sin embargo, si bajarla a dos puntos (que puede coincidir con su verdadera cuestión más de cerca, aunque yo prefiero las versiones 3 puntos), que puede hacer

tig HEAD..FETCH_HEAD 

Aquí está la alias para mayor comodidad:

incoming = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate HEAD..FETCH_HEAD' 
outgoing = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate FETCH_HEAD..HEAD' 
Cuestiones relacionadas