如何确定rebase的分支父级

Joh*_*cha 5 git

是的,这似乎非常类似于" 查找git分支的父分支 ",但我没有找到我的答案.

我想知道如何找到我当前的分支父母,但我可能会问错误的问题.所以我会提供我的方案.

  1. 我们的组织有几个长期运行的发布分支,不会重命名(但最终在发布后不推荐)

  2. 有时我会从其中一个发布分支创建一个功能分支来处理问题.这是一个本地特色分支.

  3. 我被叫去处理其他一些项目,其他一些发布等.

  4. 我回到这个功能,现在我想将它重新绑定到它最初分支的最新提交.但是已经过了足够的时间,我不记得这是从版本x或发布y分支出来的

那我该怎么做?在我看来,我以为我会弄清楚我创建了哪个发布分支,然后重新绑定到该分支上的最后一次提交.

我知道还有其他组织技术可以避免这个问题,比如总是在我的功能分支中包含基本分支的名称.但那艘船已经开航了.

git我遇到的挑战是否有解决方案?

onl*_*one 6

这应该适合你:

git log --oneline \
  | cut -f 1 -d' ' \
  | (while read commit ; do
       other_branches="$(git branch --contains $commit | egrep -v '^\* ')"
       if [ -n "${other_branches}" ] ; then
         echo -e "${commit} is in:\n${other_branches}"
         break
       fi
     done)
Run Code Online (Sandbox Code Playgroud)

这将遍历该分支的提交日志,并且对于每个提交,检查哪些分支包含该提交(是该提交的后代)。一旦它发现一个提交的后代不是当前分支,它就会打印提交哈希、包含该提交的其他分支,并跳出循环。

  • 这是唯一对我有用的。其他所有内容都会引发此错误:警告:忽略release/2021.1;无法处理超过 27 个裁判 (2认同)

Mad*_*ist 2

我认为答案实际上可以在您引用的问题中找到,但不一定在接受的答案中找到。

  1. 第一个解决方案来自这个答案。在评论中找到了比发布的更好的答案,因为评论中的解决方案仅使用标准的 unix 命令:

    git show-branch | sed "s/].*//" | grep "\*" | \
        grep -v "$(git rev-parse --abbrev-ref HEAD)" | \
        head -n1 | sed "s/^.*\[//"
    
    Run Code Online (Sandbox Code Playgroud)

    该解决方案由@droidbot 开发,并由@gaal 改进。

  2. 第二个解决方案位于@ladiko的答案中,最初是在@mark-reed的答案中开发的:

    git show-branch -a | awk -F'[]^~[]' '/^\*/ && !/'"$(git rev-parse --abbrev-ref HEAD)"'/ {print $2;exit}'
    
    Run Code Online (Sandbox Code Playgroud)

这两种解决方案都会为您提供另一个分支的名称,其中包含当前分支上的最新提交,该分支属于除当前分支之外的分支。

  • 尝试了这两个命令,我得到了几行,例如:“警告:忽略主人;” 无法处理超过 25 个裁判` (4认同)