我有一个场景,其中我的本地存储库中有多个远程跟踪分支,我必须同步到这些分支。我们的工作流程模型是:
我注意到“git status”不会显示我的本地分支基于哪个分支,除非发生了变化;即未提交的本地更改或最近的获取使我的本地分支落后于时代。 有没有什么方法可以知道我的本地分支基于哪个分支而无需进行更改? 类似“git status -showparentbranch”或其他一些可以显示这一点的命令。 有时候我会遇到这种需求,但还不知道如何满足它。
试试这个:
git log --graph --decorate
git branch -vv
将会:
列出
如果您在当地有很多分支机构,则列表可能会很长。使用
git branch -vv | grep SOMEWORD
将输出限制为仅包含 SOMEWORD 的分支。如果您能想到您的分支独有的单词,您将获得最佳过滤器(仅一个结果)。
您还将在输出中获得一些附加数据,即上次提交的编号(SHA1)和消息。 grep 过滤器将应用于这些。我找不到排除它的方法。
来自 Git
分支文档-v-vv
--详细
在列表模式下,显示每个头的 sha1 和提交主题行,以及与上游分支(如果有)的关系。如果给出两次,也打印上游分支的名称(另请参阅 git remote show )。
(根据您的评论,是的,似乎“正确”的问题会询问“远程”分支而不是“父”分支。但这也是我搜索的!:))
)。
git log --graph --decorate --oneline --all
git log--graph--装饰--oneline--all
查看日志,所有分支。 (解决这个问题很重要)
git show-branch -a | grep '\*' | grep -v `git rev-parse --abbrev-ref HEAD` | head -n1 | sed 's/.*\[\(.*\)\].*/\1/' | sed 's/[\^~].*//'
该命令链用于查找不是当前分支的最新分支。让我们一步步分解:
git show-branch -a
:显示所有分支和引用的提交祖先图。
grep '\*'
:过滤输出以仅显示包含星号 (
*
git show-branch
中,星号表示当前分支或包含提交的分支。
grep -v \
git rev-parse --abbrev-ref HEAD``
:排除与当前分支对应的行。
git rev-parse --abbrev-ref HEAD
grep -v
排除与该名称匹配的行。
head -n1
:从剩余行中取出第一行。这应该是不是当前分支的最新分支。
sed 's/.*\[\(.*\)\].*/\1/'
:使用
sed
[...]
) 之间的所有内容并捕获它。
sed 's/[\^~].*//'
:进一步处理分支名称以删除
^
~
之后的所有字符。这些字符在 Git 中用于引用提交的祖先(例如,branch^
是分支尖端的父级,branch~1
是第一个祖先,等等)。