【问题标题】:Get log of commits since split off parent branch including the parent branch's latest commit获取自分离父分支以来的提交日志,包括父分支的最新提交
【发布时间】:2021-06-09 18:26:27
【问题描述】:

我正在尝试创建一个快速 bash 函数,该函数返回自当前分支从其父分支分支以来的每个提交的 --oneline 日志,并且 包括 之前提交的行。这是我目前所拥有的。

# stolen from another Stack Overflow question
__git__get_parent_branch() {
  echo $(git show-branch 2>/dev/null |
    sed "s/].*//" |
    grep "\*" |
    grep -v "$(git rev-parse --abbrev-ref HEAD)" |
    head -n1 |
    sed "s/^.*\[//" |
    sed "s/[\^\~].*$//")
}

lp() {
  if [[ $(git rev-parse --abbrev-ref HEAD) = master ]]; then
    echo Already on master branch.
    return 1
  fi

  local commits="$(git log --oneline $(git merge-base $(__git__get_parent_branch) HEAD)..HEAD)"
  [[ -z $commits ]] && 1>&2 echo No commits since $(__git__get_parent_branch). || echo -e "$commits"
}

这会正确获取父提交之后的每个提交。我原以为我可以将^~1 附加到git merge-base 结果:

local commits="$(git log --oneline $(git merge-base $(__git__get_parent_branch) HEAD)^..HEAD)"

# or
local commits="$(git log --oneline $(git merge-base $(__git__get_parent_branch) HEAD)~1..HEAD)"

但是,如果分支 SHA 属于合并,这似乎不起作用。由于我的大部分分支机构都在master 之外,因此总是如此。它不显示合并 SHA,而是显示自该合并的第一次提交以来的每个条目。如果合并包含两个提交,我会看到我想看到的行,以及两个我不想要的额外行。

我认为这个问题的症结在于 ^~1 并没有完全按照我的意愿行事。

(我还发现,如果我实现了这一点,我的[[ -z $commits ]] 将无法工作,但这是我以后可以解决的问题。)

编辑:也许最简单的解决方案就是直接检索并附加该行。

local parent="$(__git__get_parent_branch)"
local commits="$(git log --oneline $(git merge-base $parent HEAD)..HEAD)
$(git log --oneline -1 $parent)"

【问题讨论】:

    标签: git


    【解决方案1】:

    你需要的是^@,这是gitrevisions“所有提交的父母”的语法。

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2023-01-11
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 2021-11-06
      • 2015-04-10
      相关资源
      最近更新 更多