2010-08-18 20 views
25

Tengo una serie de confirmaciones de diferentes autores y me gustaría ver un resultado de git dff entre 2 commits, pero solo teniendo en cuenta las confirmaciones de uno de los autores, algo así como algo como --author in git Iniciar sesión.git diff con el filtro de autor

Estoy interesado en el resumen final diff y no en las diferencias de las confirmaciones individuales.

¿Hay un truco de git para eso?

+2

No es exactamente un duplicado, pero puede encontrar información útil aquí: [Extraiga los cambios relevantes para la revisión del código] (http://stackoverflow.com/questions/78339/extract-relevant-changes-for-code-review) –

Respuesta

19

El problema aquí es que no se puede hacer esto en el caso general. Supongamos que Alicia cambia un archivo en particular, luego Bob lo cambia, incluidas las partes que Alicia cambió, y finalmente Alicia lo cambia nuevamente. ¿Cómo combinas las dos diferencias de Alice en una única diferencia? Si los toma como dos parches, el segundo simplemente no se aplicará sin el parche de Bob que se aplica primero. Pero tampoco puedes simplemente diferir el estado final del original, porque eso incluirá los cambios de Bob.

Si prefiere un ejemplo con las operaciones de git, esto es como hacer una rebase interactiva y simplemente eliminar las confirmaciones aleatorias. Claro, a veces funcionará, pero a veces fallará por completo, porque uno de esos compromisos depende de uno de los que sacó.

lo tanto, sé que ha dicho que no quiere cometer individuo diferenciaciones, pero eso es todo lo que se puede esperar:

git log -p --author=Alice 

O si usted está realmente desesperada por una sola diff, esto hará que por usted, pero sólo en los casos en los que no hay interacción parche, como he mencionado anteriormente:

git checkout -b temp first_commit 
git log --pretty=%H --author=Alice first_commit..second_commit | 
while read commit; do 
    git cherry-pick $commit || exit 
done 
# or if you have a new version of git, cherry-pick works with multiple arguments: 
# git cherry-pick $(git log --pretty=%H --author=Alice first_commit..second_commit) 
git diff first_commit temp 

Esto requiere realmente las operaciones en el árbol de trabajo, porque no hay absolutamente ninguna garantía de que cualquiera de los parches se aplicará una vez al commit ha sido salteado. Solo tienes que intentar y ver.

0

Puede ser que usted podría utilizar las características de formato de diff-tree

format:<string> 

format:<string> El formato permite especificar la información que desea mostrar.
Funciona un poco como el formato printf, con la notable excepción de que se obtiene una nueva línea con %n en lugar de \n.

por ejemplo,

format:"The author of %h was %an, %ar%nThe title was >>%s<<%n" 

mostraría algo como esto:

The author of fe6e0ee was Junio C Hamano, 23 hours ago 
The title was >>t4119: test autocomputing -p<n> for traditional diff input.<< 

entonces usted puede grep en el autor correspondiente.