Ссылка на ребенка фиксации в Мерзавце

Была книга, которая рекомендовалась..., заголовок был чем-то как Конкретная Математика. Это рекомендовалось в нескольких вопросах.

36
задан AttishOculus 19 November 2009 в 09:17
поделиться

4 ответа

Вероятно, не самое быстрое из возможных решений, но оно делает то, что мне нужно:

#!/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"

git rev-list - -all --parents делает именно то, что мне нужно: он выполняет итерацию по всем доступным коммитам и выводит для каждой следующую строку:

SHA1_commit SHA1_parent1 SHA1_parent2 и т. д.

Пробел в выражении grep обеспечивает что найдены только те строки, в которых рассматриваемый SHA1 является родительским. Затем мы получаем n-ю строку для n-го потомка и получаем SHA1 дочернего элемента.

#!/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"

git rev-list --all --parents делает именно то, что мне нужно: он перебирает все достижимые коммиты и выводит для каждой следующую строку:

SHA1_commit SHA1_parent1 SHA1_parent2 и т.д.

Пробел в выражении grep гарантирует, что будут найдены только те строки, в которых рассматриваемый SHA1 является родительским. Затем мы получаем n-ю строку для n-го потомка и получаем SHA1 потомка.

#!/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"

git rev-list --all --parents делает именно то, что мне нужно: он перебирает все достижимые коммиты и выводит для каждой следующую строку:

SHA1_commit SHA1_parent1 SHA1_parent2 и т.д.

Пробел в выражении grep гарантирует, что будут найдены только те строки, в которых рассматриваемый SHA1 является родительским. Затем мы получаем n-ю строку для n-го потомка и получаем SHA1 потомка.

16
ответ дан 27 November 2019 в 06:10
поделиться

Дать хороший ответ строго невозможно - поскольку git распространяется, большинство дочерних элементов коммита, о котором вы спрашиваете, могут находиться в репозиториях, которых у вас нет на вашем локальном компьютере. машина! Это, конечно, глупый ответ, но есть над чем подумать. Git редко реализует операции, которые он не может правильно реализовать.

0
ответ дан 27 November 2019 в 06:10
поделиться

Вы можете использовать gitk ... поскольку может быть более одного ребенка, вероятно, нет такого простого способа, как HEAD ^ .

Если вы хотите отменить всю операцию, вы также можете использовать журнал ссылок. Используйте git reflog , чтобы найти указатель вашего коммита, который вы можете использовать для команды reset . См. здесь .

3
ответ дан 27 November 2019 в 06:10
поделиться

Это зависит от того, о чем вы спрашиваете. Может существовать бесконечное количество дочерних элементов текущей главы в бесконечном количестве ветвей, некоторые из них локальные, некоторые удаленные и многие, которые были перемещены и находятся в вашем репозитории, но не являются частью истории, которую вы собираетесь опубликовать.

В простом случае, если вы только что сбросили HEAD ^ , вы можете вернуть ребенка, которого только что выбросили, как HEAD @ {1} .

2
ответ дан 27 November 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: