2016-11-10 152 views
0

我有一个名为release/X.X.X.X的发布分支,其中包含我要部署到生产的所有功能分支。发布分支位于当前生产状态的master之上。如何比较两个git分支并通过提交消息过滤差异?

在每个发布日,我确保我们的发布分支仅包含计划发布的更改。我使用这个命令来比较发行版和主分支:git log release/X.X.X.X ^master --no-merges。然后,我手动检查提交的关键字,如“SHR-1234”,它们代表票证管理系统中的票号。我需要将每个提交与一个票号列表进行比较,以确定不需要的更改。

如何过滤git log release/X.X.X.X ^master --no-merges不包含关键字(如“SHR-1234”)返回的提交?这样我可以识别不需要的更改的票数。

我尝试了grep和awk,但结果没有用,因为它们没有过滤掉整个提交。

+2

请参阅'git log --grep',然后查看'--invert-grep'选项。 – torek

+0

@torek通过gui间接使用1000次,但不知道tbh:D谢谢!你可以添加它作为答案,我可以接受它吗?我使用它像这样'git log release/XXXX^master --no-merges --invert-grep --grep ='SHR-1234'--grep ='SHR-4321'...' – clinical

+0

相关:https: //stackoverflow.com/q/1419623/1959808 –

回答

1

git log command这里提供了两个有趣的选项:

--grep=<pattern>
            Limi t提交输出到日志消息与指定模式(正则表达式)匹配的日志消息。与多于一个的 --grep=<pattern>,提交其消息匹配任何被选择给定 图案(但参阅--all-match)。

           当--show-notes生效时,从音符的信息是 匹配就好像它是日志信息的一部分。

因此--grep让你找到那个承诺做包含某些特定字符串或模式。你想提交该包含(任何或全部)字符串,所以我们进入到:在提交输出

--invert-grep
           限于与日志消息是那些不匹配 用--grep=<pattern>指定的图案。

(顺便说一句,注意release/X.X.X.X ^master也可以拼写master..release/X.X.X.X。没有机器级别的理由可以选择其中一种,因为它们都是在内部完全相同的东西 - 所以请使用您发现更具可读性的那个)。

+0

太棒了,正是我所需要的。谢谢! – clinical

0

您可以使用-G '正则表达式',以满足您的要求

git log release/X.X.X.X ^master--no-merges -G ‘regular expression’(包括或不包括指定的提交)

+0

'-G'搜索一个表达式,该表达式会在*补丁*中显示为添加或删除的行,即,它取决于在'git diff'输出上。还有一个'-S',用于搜索字符串*出现次数*的变化(不像'-G'这个搜索固定字符串,而不是正则表达式,除非添加更多标记)。但是,OP想要搜索* commit消息*文本。 – torek

-1

问题标题承认稍有不同的答案,这对于有些人。一个简单的方法来比较两个分支通过提交标题是转储从每个分支到一个单独的文本文件提交的标题,并打开这两个文件的差异阅读:

git --no-pager log --pretty=format:%s master > log_master.txt 
git --no-pager log --pretty=format:%s other > log_other.txt 
meld log_master.txt log_other.txt 

我们首先转储承诺从受试者分支master到文件log_master.txt,然后将分支other中的主体提交到文件log_other.txt,并在视觉差异查看器meld(一个替代方案是kdiff3)中打开它们。

+0

这根本不帮助OP;这不会有什么不同,然后他说'git log OTHER master'。他的问题是试图识别他不希望的消息的某些提交;这并没有减少或解决问题......具有讽刺意味的是,问题是你关注的是标题而不是问题的内容。 – UpAndAdam

+0

事实上,它会导致与'git log --pretty = format:%s other^master'相同的区别。这种方法的一个用途是比较两个分支中未包含的提交相对于其他提交的位置。 –

+0

你错过了......在这里,不会有'master'中的任何提交,这些提交不在OP中关心的'other'中。 'other'比'master'更早于他的版本'分支'。没有命令可以比较,只是在'other'上的提交列表,而OP想要在那里找到不应该存在的提交....当完成OP时将合并回'master' ..这也是为什么没有要订购的东西。你正在回答一个没有被问到的问题,为什么不问问题并回答你一直试图回答的问题;这可能对其他人有用:) – UpAndAdam

相关问题