Número de compromisos entre dos personas

¿Cómo puedo encontrar el número de commits entre dos commitishes en git ?

Además, ¿hay alguna manera de que yo pueda hacer lo mismo con cualquier proyecto en GitHub (usando la interfaz de usuario, no la API)?

Antes de darte una respuesta, considera este gráfico de confirmación:

  o ----------- / \ ... - A - o - o - o - B \ / o ----- o 

Cada o representa un compromiso, al igual que A y B (solo son letras para permitirnos hablar sobre confirmaciones específicas ). ¿Cuántas confirmaciones hay entre las confirmaciones A y B ?

Dicho esto, en casos más lineales, simplemente use git rev-list --count A..B y luego decida qué quiere decir con "between" (¿incluye B y excluye A? Así es como git rev-list --count comportarse). En casos ramosos como este, obtendrá todos los commits en todas las twigs; agregue --first-parent , por ejemplo, para seguir solo la "línea principal".

(También mencionó "commit", sugiriendo que podríamos haber anotado tags. Eso no afectará el resultado de git rev-list , que solo count las confirmaciones específicas).


Editar: Dado que git rev-list --count A..B incluye commit B (mientras se omite commit A ), y desea excluir ambos git rev-list --count A..B , necesita restar uno. En las conchas modernas puedes hacer esto con aritmética de conchas:

 count=$(($(git rev-list --count A..B) - 1)) 

Por ejemplo:

 $ x=$(($(git rev-list --count HEAD~3..HEAD) - 1)) $ echo $x 2 

(Este repository en particular tiene una estructura gráfica muy lineal, por lo que no hay twigs aquí y hay dos confirmaciones "entre" la punta y tres detrás de la punta). Sin embargo, tenga en count que esto producirá -1 si A y B identifican el mismo compromiso:

 $ x=$(($(git rev-list --count HEAD..HEAD) - 1)) $ echo $x -1 

por lo que es posible que desee comprobar eso primero:

 count=$(git rev-list --count $start..$end) if [ $count -eq 0 ]; then ... possible error: start and end are the same commit ... else count=$((count - 1)) fi 
 $ git log 375a1..58b20 --pretty=oneline | wc -l 

Especifique su compromiso de inicio seguido de su compromiso final, y luego cuente las líneas. Ese debería ser el recuento de confirmaciones entre esos dos intervalos de compromiso. Utilice el formatting --pretty=online para que cada confirmación ocupe una sola línea.

En cuanto a la GUI en GitHub, no sé de una manera de lograr esta misma tarea. Pero eso debería ser trivial, ya que lo anterior es la forma posible de hacerlo directamente en Git Bash.