Как сказать HEAD ~ 20, если существует, иначе первый коммит - PullRequest
0 голосов
/ 10 октября 2018

У меня есть псевдоним:

git rebase --interactive --autostash --autosquash HEAD~20

Это прекрасно работает, кроме случаев, когда я работаю над новым репозиторием с менее чем 20 коммитами, и в этом случае я получаю сообщение:

fatal: Needed a single revision
invalid upstream 'HEAD~20'

Как я могу сказать: HEAD~20 or else the earliest commit?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Основываясь на ответе eftshift0 , я придумал следующие псевдонимы:

# Print the $1-th first-parent of commit $2
# or the earliest existing commit if the beginning of history is reached
parent = !"[ \"${1:-1}\" -eq \"${1:-1}\" ] && c=$(git rev-parse \"${2:-@}\") && git log -n\"$(expr \"${1:-1}\" + 1)\" --first-parent --pretty=\"%H\" --reverse \"$c\" | head -n1 #"

Требуется два необязательных аргумента:

  • $1 -Сколько родителей, чтобы вернуться.По умолчанию 1 или ближайший родительский элемент
  • $2 - Принятый для выполнения коммит, по умолчанию HEAD

Если запрошен 0-й родительский элемент,Сам коммит (или HEAD) возвращается.

Используется внутри моего rebase --interactive псевдонима:

rbi = !"git rebase --interactive --autostash --autosquash --root \"$(git rev-parse \"${1:-$(git parent 50)}\")\" #"
0 голосов
/ 10 октября 2018

Я бы, наверное, сделал (в bash) $( git log -n 20 --pretty="%h" --first-parent | tail -n 1 ).Так, например ....

git checkout $( git log -n 20 --pretty="%h" --first-parent | tail -n 1 )

Отрегулируйте по своему рецепту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...