Trouvez quel commit est actuellement extrait dans Git

158

Je suis au milieu d'une git bisectsession.

Quelle est la commande pour savoir sur quel commit (hachage SHA1) je suis actuellement? git statusne fournit pas cela.

Edit: Je suppose qu'appeler git loget regarder la première entrée fonctionne?

Steven Lu
la source

Réponses:

174

Vous avez au moins 5 façons différentes d'afficher le commit que vous avez actuellement extrait dans votre copie de travail pendant une git bisectsession ( notez que les options 1 à 4 fonctionneront également lorsque vous ne faites pas de bissectrice ):

  1. git show.
  2. git log -1.
  3. Invite Bash.
  4. git status.
  5. git bisect visualize.

J'expliquerai chaque option en détail ci-dessous.

Option 1: git show

Comme expliqué dans cette réponse à la question générale de savoir comment déterminer quel commit vous avez actuellement extrait (pas seulement pendant git bisect), vous pouvez utiliser git showavec l' -soption pour supprimer la sortie du patch:

$ git show --oneline -s
a9874fd Merge branch 'epic-feature'

Option 2: git log -1

Vous pouvez également simplement le faire git log -1pour savoir sur quel commit vous êtes actuellement.

$ git log -1 --oneline
c1abcde Add feature-003

Option 3: invite Bash

Dans Git version 1.8.3+ (ou était-ce une version antérieure?), Si votre invite Bash est configurée pour afficher la branche actuelle que vous avez extraite dans votre copie de travail, elle vous montrera également le commit actuel que vous avez vérifié pendant une session bissectrice ou lorsque vous êtes dans un état "HEAD détaché". Dans l'exemple ci-dessous, j'ai actuellement c1abcdevérifié:

# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $

# Prompt at detached HEAD state 
user ~ (c1abcde...) $

Option 4: état git

Toujours à partir de la version 1.8.3+ de Git (et peut-être plus tôt, encore une fois pas sûr), l'exécution git statusvous montrera également quel commit vous avez extrait pendant une bissectrice et lorsque vous êtes dans l'état HEAD détaché:

$ git status
# HEAD detached at c1abcde <== RIGHT HERE

Option 5: git bisect visualiser

Enfin, pendant que vous effectuez un git bisect, vous pouvez également simplement utiliser git bisect visualizeou son alias intégré git bisect viewpour lancer gitk, afin de pouvoir visualiser graphiquement le commit sur lequel vous vous trouvez, ainsi que les commits que vous avez marqués comme mauvais et bons jusqu'à présent. Je suis à peu près sûr que cela existait bien avant la version 1.8.3, je ne sais pas dans quelle version il a été introduit:

git bisect visualize 
git bisect view # shorter, means same thing

entrez la description de l'image ici

Communauté
la source
Soigné. Quand j'ai posé la question que je n'étais pas sur Git 1.8, et depuis lors, je me suis procuré une invite de droite zsh qui montre le hachage de validation, je pense qu'il pourrait même afficher un indicateur spécial spécifiquement pour si je divise en deux, mais je ne l'ai pas ' t fait plus de bissectrice depuis le moment où j'ai posé cette question, fait surtout git log -p -S <search>le travail.
Steven Lu
git statusne vous montre pas l'ID de validation sauf si vous êtes à l'état détaché. sinon, il dit "Sur la branche quel que soit ". git showfonctionne bien
Kip le
88

Vous pouvez simplement faire:

git rev-parse HEAD

Pour expliquer un peu plus loin: git rev-parseest la commande de base de git pour interpréter l' une des façons exotiques que vous pouvez spécifier le nom d'un commit et HEADest une référence à votre commit ou branche actuel. (Dans une git bisectsession, il pointe directement vers un commit ("détaché HEAD") plutôt qu'une branche.)

Une autre solution (et plus facile à retenir) serait de simplement faire:

git show

... qui affiche par défaut le commit vers lequel HEADpointe. Pour une version plus concise, vous pouvez faire:

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation
Mark Longair
la source
3
Si vous souhaitez simplement obtenir le hachage pour une utilisation ailleurs, git rev-parse HEADne nécessite aucun traitement par rapport à toutes les alternatives de récupération.
Nick T
17
$ git rev-parse HEAD
273cf91b4057366a560b9ddcee8fe58d4c21e6cb

Mettre à jour:

Alternativement (si vous avez des balises):

(Bon pour nommer une version, pas très bon pour renvoyer à git.)

$ git décrire
v0.1.49-localhost-ag-1-g273cf91

Ou (comme Mark l'a suggéré, énumérant ici pour l'exhaustivité):

$ git show --oneline -s
c0235b7 Rotation automatique des images téléchargées en fonction de l'orientation EXIF
Alexandre Gladysh
la source
7
Vous avez demandé un SHA1, pas quelque chose de facile à retenir. ;-)
Alexander Gladysh
Cette version est très utile si vous voulez faire une vérification dans un script
Daniele Licitra
13

Si vous voulez extraire juste une simple information, vous pouvez l'obtenir en utilisant git showl' --format=<string>option ... et lui demander de ne pas vous donner la différence avec --no-patch. Cela signifie que vous pouvez obtenir une sortie de style printf de tout ce que vous voulez, qui peut souvent être un seul champ.

Par exemple, pour obtenir uniquement le hachage raccourci ( %h), vous pouvez dire:

$ git show --format="%h" --no-patch
4b703eb

Si vous cherchez à enregistrer cela dans une variable d'environnement dans bash (ce que les gens voudront probablement faire), vous pouvez utiliser la $()syntaxe :

$ GIT_COMMIT="$(git show --format="%h" --no-patch)"

$ echo $GIT_COMMIT
4b703eb

La listegit show --help complète de ce que vous pouvez faire se trouve dans . Mais voici une liste abrégée de propriétés qui pourraient être utiles:

  • %H commettre le hachage
  • %h hachage de validation abrégé
  • %T hachage d'arbre
  • %t hachage d'arbre abrégé
  • %P hachages parent
  • %p hachages de parent abrégé
  • %an nom de l'auteur
  • %ae email de l'auteur
  • %at date de l'auteur, horodatage UNIX
  • %aI date de l'auteur, format ISO 8601 strict
  • %cn nom du commetteur
  • %ce email du committer
  • %ct date du committer, horodatage UNIX
  • %cI date du committer, format ISO 8601 strict
  • %s matière
  • %f ligne d'objet nettoyée, adaptée à un nom de fichier
  • %gD sélecteur reflog, par exemple, refs / stash @ {1}
  • %gd sélecteur de reflog raccourci, par exemple, stash @ {1}
HostileFork dit de ne pas faire confiance à SE
la source
Toutes ces options de formatage, mais shown'a rien pour la branche .
bvj
2

Utilisez git show, qui affiche également le message de validation, et prend par défaut la validation actuelle si aucun argument n'est donné.

asmeureur
la source