我该如何确定我的分支是基于哪个远程“父”分支?

48

我有一个场景,其中我的本地仓库中有几个远程跟踪分支需要同步。我们的工作流模型如下:

  • 在所需的远程跟踪分支的基础上,在本地创建一个分支
  • 进行更改
  • 构建/测试/修复
  • 提交
  • 推送回远程服务器

我注意到,"git status" 只有在有变化时才会显示我的本地分支基于哪个分支;即未提交的本地更改或最近的拉取使我的本地分支落后于时代。是否有一种方法可以知道我的本地分支基于哪个分支,而不必更改内容?类似于 "git status -showparentbranch" 或其他某些命令来显示这个信息。偶尔我会遇到这种需要,但还不知道怎样满足它。

5个回答

60

试试这个:

git log --graph --decorate

15
你还应该添加--oneline标志,以最大限度地利用屏幕空间。 - cmaster - reinstate monica
2
它提供了创建此分支的头、作者和名称,但我们如何知道它是从哪个分支创建的? - Shailendra Madda
这个单行代码看起来不错,但我还是不明白这个输出对我有什么帮助?真的吗?我没有看到父分支的名称。 我想要弄清楚的是,我的分支,也就是我正在使用的这个分支……是从develop还是master创建的?如果是从develop创建的,并且我拉取了更新,我应该能够将它们合并到我的分支中。但我没有看到它们。所以我认为我的分支不是从develop创建的,而是从其他地方创建的,也许是master?我想要验证/确认这一点。Git必须能够帮助我解决这个问题吧? - PHenry

19

Git无法跟踪提交所经过的分支,没有办法知道。如果提交发生在您的存储库中,那么您可以检查reflog,但仅此而已。请参阅Pro Git书中DAG的解释-也在其中阅读reflog的内容。

您还可以使用 gitk --all git log --graph --decorate 更好地可视化历史记录。

希望这能有所帮助。


1
没错。你还可以在日志命令后添加--oneline,以便在屏幕上显示更多的提交记录。 - Adam Dymitruk
1
非常抱歉。我忘记了评论这个回答是否解决了我的问题。我不确定它是否确实解决了。从你的回复中,我在想是否我正确地提出了问题。我并不是想知道哪些分支受到我的提交的影响。相反,我想知道是否有一种方法可以知道我的本地分支基于哪个远程分支。 - Andrew Falanga
注意:git show-branch可以完成任务,但会在屏幕上不断输出分支的变更信息。git log --graph --decorate --oneline是一个非常好的清晰选项。 - thehelix

12

git branch -vv会:

  • 列出所有本地分支
  • 显示每个本地分支旁边的远程分支名称
  • 突出显示当前活动的本地分支

从中,您将能够确定当前活动分支的远程分支,以及更多其他信息。

如果您有许多本地分支,则列表可能会非常长。使用 git branch -vv | grep SOMEWORD 将输出限制为仅包含SOMEWORD的分支。如果您可以想到一个唯一于您的分支的单词,您将获得最佳过滤器(仅一个结果)。

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

来自Git 分支文档

-v

-vv

--verbose

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

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


很抱歉,我和原始帖子的作者有同样的问题,但我仍然困惑这对解决问题有何帮助?当然,我可以看到远程分支名称,但是原始作者正在询问当前分支是基于哪个分支?在我的情况下,我想知道我是基于develop还是master(因为我搞砸了)。 请告诉我git能做到这点吗?我的担忧是,一个队友更新了develop,我执行拉取和合并操作,但我无法看到那个更新。为什么呢?我猜想这是因为我不是基于develop。Git一定能帮我解决这个问题吧! - PHenry

3

有多种方法可以检查这个。我最终选择了免费的方式来获取这个结果。

  1. use gitkraken(paid for private repository!), it provide you wonderfull way to see Tree of your branchs and commits. by scolling down you will reach root of your parent branch.

  2. if you use bitbucket, then they provide view in web to see all your commits for all branchs(By selecting all branch from dropdown).

  3. Free way, via git commnad.

    git log  --graph --decorate --oneline --all
    

    Commnad Expaination

    git log view log.

    --graph view log as graph.

    --decorate view log in colorfull mode.

    --oneline view log, row only one line not full detail in commits.

    --all view log, all branchs. (important to solve this thread)


1
这个命令看起来很厉害,但实际上并没有显示我当前所在分支的父分支名称。这是原帖作者的问题。或者我可能理解有误,但在我看到的分支名称中,我没有看到develop或master与我当前感兴趣的分支相关联。 - PHenry
我认为这是最好的答案。--decorate选项将显示每个提交来自的分支名称,这是一个非常好的父级指示。 - undefined

0
这是一个命令,用于查看当前分支的父分支。
git show-branch -a | grep '\*' | grep -v `git rev-parse --abbrev-ref HEAD` | head -n1 | sed 's/.*\[\(.*\)\].*/\1/' | sed 's/[\^~].*//'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接