it-swarm.com.de

Wie bekomme ich ein Elternteil eines bestimmten Commits in Git?

Ich habe die Nummer festgelegt. Ich möchte die vorherige Festschreibungsnummer (übergeordnet) erhalten. Ich brauche Commits aus der aktuellen Branche.

16
MPAW
git log --pretty=%P -n 1 "$commit_from"
15
MPAW

Wenn $ {SHA} das Commit ist, das Sie kennen und dessen übergeordnetes Element gewünscht wird (vorausgesetzt, es ist kein Merge-Commit und nur ein übergeordnetes Element vorhanden):

git rev-parse ${SHA}^
8
William Pursell

Um Eltern-Commit zu erhalten

git cat-file -p commit_id

tree tree_id
parent parent_commit_id
author xxx <[email protected]> 1513768542 +0530
committer xxx <[email protected]> 1513768542 +0530 
7
Nayagam

Um das übergeordnete Element zu erhalten, fügen Sie nach dem Commit SHA des Commits, das Sie sehen möchten, ein ^ hinzu.

So sehen Sie ein Commit: git show <SHA> Beispiel: git show bb05425c504575145d005c0a887e0a80b885ced0

So sehen Sie das übergeordnete Element: git show <SHA>^
Beispiel: git show bb05425c504575145d005c0a887e0a80b885ced0^

5
Magne

Wenn Sie nur die IDs der übergeordneten Elemente eines Eingabe-Commits mit der ID <SHA> wünschen, führen Sie den folgenden Befehl aus:

git cat-file -p <SHA> | awk 'NR > 1 {if(/^parent/){print $2; next}{exit}}'

Dies funktioniert für normale und flache Klone.

1
mljrg

Sie können hierfür git rev-parse verwenden.

# Output hash of the first parent
git rev-parse $commit^

# Nth parent
git rev-parse $commit^N

# All parents
git rev-parse $commit^@

Diese Konstrukte werden in git help rev-parse erklärt:

 <rev>^, e.g. HEAD^, v1.5.1^0
     A suffix ^ to a revision parameter means the first
     parent of that commit object.  ^<n> means the <n>th
     parent (i.e.  <rev>^ is equivalent to <rev>^1). As a
     special rule, <rev>^0 means the commit itself and is
     used when <rev> is the object name of a tag object that
     refers to a commit object.

 ...

 <rev>^@, e.g. HEAD^@
     A suffix ^ followed by an at sign is the same as listing
     all parents of <rev> (meaning, include anything
     reachable from its parents, but not the commit itself).
1
matvore

Wenn Sie versuchen, alle übergeordneten Elemente zu erhalten und die Revisionsparametersyntax zu verwenden, können Sie den log-Unterbefehl mit der Option --no-walk verwenden.

Ein Beispiel, wenn wir Folgendes haben:

$ git --oneline --graph
*   A
|\
| * B
| * C
| * D
* |   E

In diesem Beispiel verwende ich ^@, um alle Eltern und die --no-walk-Option dazu zu bringen, dass nur die Eltern und nicht deren Vorfahren angezeigt werden.

$ git log --no-walk A^@
commit B
    ........

commit E
    ........

Check out git rev-parse für mehr Details zu Revisionsparametern.

0
nate