Comando para obtener el último hash de confirmación de Git de una rama [cerrado]

84

¿Cómo puedo verificar con la línea de comando el último hash de confirmación de una rama de Git en particular?

mbdvg
fuente
1
¿Ha intentado usar 'git log -n 1' cuando ha verificado esa rama específica?
Rick van Bodegraven
git log proporciona hash a los repositorios locales, pero el repositorio de git hub tiene un nuevo hash.
mbdvg
1
git log -n 1 [branch_name]branch_name (puede ser una sucursal remota o local) es opcional. Sin branch_name, mostrará la última confirmación de la rama actual.
Rahul Tapali
11
Con votos para cerrar así, SO se está convirtiendo en Wikipedia.
Eric Walker
Consulte también aquí .
Raphael

Respuestas:

60

Utilice git ls-remote git://github.com/<user>/<project>.git. Por ejemplo, mi proyecto trac-backlog da:

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git
5d6a3c973c254378738bdbc85d72f14aefa316a0    HEAD
4652257768acef90b9af560295b02d0ac6e7702c    refs/heads/0.1.x
35af07bc99c7527b84e11a8632bfb396823326f3    refs/heads/0.2.x
5d6a3c973c254378738bdbc85d72f14aefa316a0    refs/heads/master
520dcebff52506682d6822ade0188d4622eb41d1    refs/pull/11/head
6b2c1ed650a7ff693ecd8ab1cb5c124ba32866a2    refs/pull/11/merge
51088b60d66b68a565080eb56dbbc5f8c97c1400    refs/pull/12/head
127c468826c0c77e26a5da4d40ae3a61e00c0726    refs/pull/12/merge
2401b5537224fe4176f2a134ee93005a6263cf24    refs/pull/15/head
8aa9aedc0e3a0d43ddfeaf0b971d0ae3a23d57b3    refs/pull/15/merge
d96aed93c94f97d328fc57588e61a7ec52a05c69    refs/pull/7/head
f7c1e8dabdbeca9f9060de24da4560abc76e77cd    refs/pull/7/merge
aa8a935f084a6e1c66aa939b47b9a5567c4e25f5    refs/pull/8/head
cd258b82cc499d84165ea8d7a23faa46f0f2f125    refs/pull/8/merge
c10a73a8b0c1809fcb3a1f49bdc1a6487927483d    refs/tags/0.1.0
a39dad9a1268f7df256ba78f1166308563544af1    refs/tags/0.2.0
2d559cf785816afd69c3cb768413c4f6ca574708    refs/tags/0.2.1
434170523d5f8aad05dc5cf86c2a326908cf3f57    refs/tags/0.2.2
d2dfe40cb78ddc66e6865dcd2e76d6bc2291d44c    refs/tags/0.3.0
9db35263a15dcdfbc19ed0a1f7a9e29a40507070    refs/tags/0.3.0^{}

Solo busca el que necesitas y córtalo:

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git | \
   grep refs/heads/master | cut -f 1
5d6a3c973c254378738bdbc85d72f14aefa316a0

O puede especificar qué referencias desea en la línea de comando y evitar el grep con:

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git refs/heads/master | \
   cut -f 1
5d6a3c973c254378738bdbc85d72f14aefa316a0

Nota: no tiene que ser la git://URL. Podría serlo https://o [email protected]:también.

Originalmente, esto estaba orientado a descubrir la última confirmación de una rama remota (no solo de su última búsqueda, sino la última confirmación real en la rama en el repositorio remoto). Si necesita el hash de confirmación para algo localmente, la mejor respuesta es:

git rev-parse branch-name

Es rápido, fácil y con un solo comando. Si desea el hash de confirmación para la rama actual, puede mirar HEAD:

git rev-parse HEAD
John Szakmeister
fuente
4
Merece más amor. Esto funciona de maravilla.
SuperFamousGuy
git rev-parse my_branch_nameO git log -n 1 my_branch_name | grep commit | awk '{ print $2 }'respuesta más simple; generará solo el último hash de confirmación demy_branch_name
betoharres
@betoharres, el OP estaba originalmente tratando de determinar la confirmación en un repositorio remoto (no lo que tenemos refs/remotes, sino el repositorio remoto real). git rev-parse branch-namees definitivamente el camino a seguir para una sucursal local.
John Szakmeister
Esto solo funciona en el campo del git svnporque git svn fetchcambia la git logsalida y, por lo tanto, git logya no se puede usar para obtener el último hash de confirmación del repositorio git remoto .
Andry
@Andry No estoy seguro de lo que quieres decir ... Tengo problemas para seguir tu comentario. ¿Puedes explicarme mas?
John Szakmeister
139
git log -n 1 [branch_name]

branch_name(puede ser una sucursal remota o local) es opcional. Sin branch_name, mostrará la última confirmación en la rama actual.

Por ejemplo:

git log -n 1
git log -n 1 origin/master
git log -n 1 some_local_branch

git log -n 1 --pretty=format:"%H"  #To get only hash value of commit
Rahul Tapali
fuente
20
git log -n 1 --pretty = format: "% H" funciona perfectamente para mí
Jaro
9
Obtenga hash corto: 'git rev-parse --short --verify my_branch' de una pregunta similar: stackoverflow.com/a/949391/134761
angularsen
Bien, agregué esto a mi .gitconfig para poder copiar la última confirmación con git hash | pbcopy clip `` [alias] hash = "! F () {\ git log -n 1 --pretty = format:"% H "; \}; f "` ``
Pantalones
2

Intente usar git log -n 1después de hacer un git checkout branchname. Esto muestra el hash de confirmación, el autor, la fecha y el mensaje de confirmación para la última confirmación.

Realice una git pull origin/branchnameprimera para asegurarse de que su repositorio local coincida con el flujo ascendente.

Si quizás solo desea ver una lista de las confirmaciones que su sucursal local está detrás en la sucursal remota, haga esto:

git fetch origin
git cherry localbranch remotebranch

Esto enumerará todos los hash de las confirmaciones que aún no ha combinado en su rama local.

Rick van Bodegraven
fuente
mi requisito es verificar que los repositorios locales y los repositorios de github commit hash sean iguales o no, ¿cómo podemos hacer esto?
mbdvg
Hasta donde yo sé, no hay forma de que los hashes de confirmación difieran entre su repositorio local y remoto para las mismas confirmaciones. ¿Quizás quiso decir una lista de las confirmaciones que falta en su repositorio local frente al repositorio remoto?
Rick van Bodegraven
Sí Rick van, hay una falta de coincidencia, entonces, quiero mostrar que hay una diferencia en el repositorio local y en github, así que necesito una forma de averiguarlo
mbdvg
2

tu puedes git fetch nameofremoterepo, entoncesgit log

y personalmente, alias gitloga git log --graph --oneline --pretty --decorate --all. Pruébalo y ve si te queda

nglinh
fuente
Y git fetch todavía no realiza los cambios
nglinh
--onlinees una abreviatura de --pretty=oneline --abbrev-commit. Pero también estás usando --pretty, lo que revierte --pretty=oneline... Yo lo recomendaría en su git log --graph --abbrev-commit --decorate --alllugar.
Felix Kling
Frio. No me di cuenta de eso. ¡Gracias!
nglinh
0

En un comentario que escribiste

quiero mostrar que hay una diferencia en el repositorio local y github

Como ya se mencionó en otra respuesta, debe hacer una git fetch originprimera. Luego, si el control remoto está por delante de su rama actual, puede enumerar todas las confirmaciones entre su rama local y la remota con

git log master..origin/master --stat

Si su sucursal local está por delante:

git log origin/master..master --stat

--stat también muestra una lista de archivos modificados.

Si desea enumerar explícitamente las adiciones y eliminaciones, use git diff:

git diff master origin/master
Felix Kling
fuente
0

Tenga en cuenta que cuando utilice la opción "git log -n 1 [branch_name]". -n devuelve solo una línea de registro, pero no se garantiza el orden en que se devuelve. A continuación se muestra un extracto de la página de manual de git-log

.....
.....
Commit Limiting

Besides specifying a range of commits that should be listed using the special notations explained in the     description, additional commit limiting may be applied.

Using more options generally further limits the output (e.g. --since=<date1> limits to commits newer than <date1>, and using it with --grep=<pattern> further limits to commits whose log message has a line that matches <pattern>), unless otherwise noted.

Note that these are applied before commit ordering and formatting options, such as --reverse.

-<number>
-n <number>
.....
.....
bhav22
fuente