Referencing the child of a commit in Git

后端 未结 10 1134
失恋的感觉
失恋的感觉 2020-11-28 08:37

If you want to move the HEAD to the parent of the current HEAD, that\'s easy:

git reset --hard HEAD^

But is there

10条回答
  •  误落风尘
    2020-11-28 09:10

    Very probably not the fastest possible solution, but it does what I need:

    #!/bin/bash
    
    REV=$1
    
    if [[ -z "$REV" ]]; then
        echo "Usage: git-get-child  []"
        exit
    fi
    
    HASH=$(git rev-parse $REV)
    
    NUM=$2
    
    if [[ -z "$NUM" ]]; then
        NUM=1
    fi
    
    git rev-list --all --parents | grep " $HASH" | sed -n "${NUM}s/\([^ ]*\) .*$/\\1/p"
    

    The git rev-list --all --parents does exactly what I need: it iterates over all reachable commits, and prints the following line for each:

    SHA1_commit SHA1_parent1 SHA1_parent2 etc.

    The space in the grep expression ensures that only those lines are found where the SHA1 in question is a parent. Then we get the nth line for the nth child and get the child's SHA1.

提交回复
热议问题