How to say HEAD〜20,如果存在,否则首先提交

时间:2018-10-10 13:02:00

标签: git git-rebase

我有别名:

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 :(得分:2)

我可能会(以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 )

调整您的食谱。

答案 1 :(得分:0)

基于eftshift0's answer,我想到了以下别名:

# 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)}\")\" #"