如何确定rebase的分支父级

时间:2016-10-26 15:07:02

标签: git

是的,这似乎非常类似于" Find the parent branch of a git branch"但我在那里找不到答案。

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

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

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

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

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

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

    我知道可以采取其他组织技术来避免此问题,例如始终在我的功能分支中包含基本分支的名称。但那艘船已经航行了。

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

2 个答案:

答案 0 :(得分:3)

这应该适合你:

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)

这将通过此分支的提交日志,并且对于每个提交,检查哪些分支包含(是其后代)。一旦找到具有不是当前分支的后代的提交,它就会打印提交哈希,包含该提交的其他分支,并突破循环。

答案 1 :(得分:2)

我认为答案实际上可以在the question you cited中找到,但不一定在接受的答案中。

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

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

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

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

    git show-branch -a | awk -F'[]^~[]' '/^\*/ && !/'"$(git rev-parse --abbrev-ref HEAD)"'/ {print $2;exit}'
    
  3. 这两个解决方案都会为您提供包含当前分支上最新提交的另一个分支的名称,该分支属于当前分支以外的分支。