我如何知道我的分支基于哪个远程“父”分支?

问题描述 投票:0回答:6

我有一个场景,其中我的本地存储库中有多个远程跟踪分支,我必须同步到这些分支。我们的工作流程模型是:

  • 根据所需的远程跟踪分支在本地创建一个分支
  • 做出我们的改变
  • 构建/测试/修复
  • 承诺
  • 推回远程服务器

我注意到“git status”不会显示我的本地分支基于哪个分支,除非发生了变化;即未提交的本地更改或最近的获取使我的本地分支落后于时代。 有没有什么方法可以知道我的本地分支基于哪个分支而无需进行更改? 类似“git status -showparentbranch”或其他一些可以显示这一点的命令。 有时候我会遇到这种需求,但还不知道如何满足它。

git git-remote git-status
6个回答
63
投票

试试这个:

git log --graph --decorate

19
投票

Git 不跟踪提交通过了哪些分支。没有办法说清楚。如果提交发生在您的存储库上,那么您可以检查引用日志,仅此而已。看看《Pro Git 书》中对 DAG 的解释 - 还可以阅读其中的 reflog。 您还可以使用

gitk --all

git log --graph --decorate
 更好地可视化历史

希望这有帮助。


12
投票
git branch -vv

将会:


列出
    所有
  • 您当地的分支机构 在每个本地分支旁边显示远程分支的名称
  • 突出显示活动的本地分支
  • ...由此您将能够确定当前活动分支的远程分支,等等。

如果您在当地有很多分支机构,则列表可能会很长。使用

git branch -vv | grep SOMEWORD

将输出限制为仅包含 SOMEWORD 的分支。如果您能想到您的分支独有的单词,您将获得最佳过滤器(仅一个结果)。


您还将在输出中获得一些附加数据,即上次提交的编号(SHA1)和消息。 grep 过滤器将应用于这些。我找不到排除它的方法。

来自 Git

分支文档

-v

-vv

--详细

在列表模式下,显示每个头的 sha1 和提交主题行,以及与上游分支(如果有)的关系。如果给出两次,也打印上游分支的名称(另请参阅 git remote show )。

(根据您的评论,是的,似乎“正确”的问题会询问“远程”分支而不是“父”分支。但这也是我搜索的!:))


3
投票

    使用 gitkraken(付费私人存储库!),它为您提供了查看分支和提交树的绝佳方式。通过向下滚动,您将到达父分支的根部。
  1. 如果您使用 bitbucket,那么它们会在网络中提供视图以查看您对所有分支的所有提交(通过从下拉列表中选择
  2. allbranch

    )。

  3. 免费方式,通过 git commnad。
  4. git log --graph --decorate --oneline --all

    命令说明

    git log

    查看日志。

    --graph

    以图表形式查看日志。

    --装饰

    以炫彩模式查看日志。

    --oneline

    查看日志,仅行一行,未提交完整详细信息。

    --all

    查看日志,所有分支。 (解决这个问题很重要


3
投票

git show-branch -a | grep '\*' | grep -v `git rev-parse --abbrev-ref HEAD` | head -n1 | sed 's/.*\[\(.*\)\].*/\1/' | sed 's/[\^~].*//'



0
投票

该命令链用于查找不是当前分支的最新分支。让我们一步步分解:

  1. git show-branch -a

    显示所有分支和引用的提交祖先图。
  2. grep '\*'

    过滤输出以仅显示包含星号 (
      *
    • ) 的行。在
      git show-branch
      中,星号表示当前分支或包含提交的分支。
      
      
  3. grep -v \git rev-parse --abbrev-ref HEAD``

    排除与当前分支对应的行。
      git rev-parse --abbrev-ref HEAD
    • 返回当前分支的名称,
      grep -v
      排除与该名称匹配的行。
      
      
  4. head -n1

    从剩余行中取出第一行。这应该是不是当前分支的最新分支。
  5. sed 's/.*\[\(.*\)\].*/\1/'

    使用
      sed
    • (流编辑器)从行中提取分支名称。该模式匹配方括号 (
      [...]
      ) 之间的所有内容并捕获它。
      
      
  6. sed 's/[\^~].*//'

    进一步处理分支名称以删除
      ^
    • ~
      之后的所有字符。这些字符在 Git 中用于引用提交的祖先(例如,
      branch^
      是分支尖端的父级,
      branch~1
      是第一个祖先,等等)。
      
      
© www.soinside.com 2019 - 2024. All rights reserved.