2017-08-03 49 views
0

在我的团队中,我们正在试验这个“功能分支”的概念。它与子功能有关,有些功能可以进一步分解为相互依赖的子任务。是否有可能在git中显示多个不必要的连续提交的差异? (git diff A..B,但省略了一些提交)

我想要的是在分支上看到来自多个提交的压缩差异。

某种git的日志输出的示例:

提交哈希,作者,注释

1234, John, TASK-123 made the button red 
4121, Susan, TASK-321 made the bar green 
3322, John, TASK-123 made the button work 
4412, Susan, TASK-321 made the bar work 

我愿意看到的diff只为那些提交其注释中包含“TASK-123” ,以便我可以准确地看到有关这一项任务的变化。 (当然,这个任务的承诺与作者约翰的承诺是一致的)。所以过滤工作的确切方式有点不相关,我只想看看那些提交的变化 - 假设他们没有改变相同的行。

这是可能以某种方式?我知道我可以查看差异的连续提交git diff commit1..commit2 ....但我想要的是基本上过滤掉一些提交范围。

声明:我们可能会做这件事情的错误,并可能有一个更好的方式做到这一点 - 如果有,并且你可以解释/提供文件,请做。我们之所以这样做是因为我们可以在我们的测试环境中更轻松地发布 - 再一次,如果您对如何做到这一点有更好的想法,我完全公开。

+0

'git show '? – ElpieKay

+0

@ElpieKay我需要看到来自多个提交组合的差异。你所写的只显示1次提交的差异。如果我编写'git show commit1 commit2 commit3',那么我会看到连接的输出3'git show'命令。不是我想要的 - 我想在一个文件中使用3种不同的差异,而不是在3个文件中使用一种差异(假设我在同一个文件中做了3次更改) –

+0

为什么每个任务都没有功能分支?在你的例子中,我看不出为什么来自不同任务的提交会被推入另一个任务。如果我在TASK-123上工作,在完成任务之前我不应该推动我的提交,对于开发TASK-321的开发人员也是如此。除此之外,我建议不要在一项任务中推送多个提交,而应使用本地功能分支,并在推送之前压缩提交。 – sp1nakr

回答

1

如果你正在讨论GitHubFlow中的功能分支,我不会看到你最终得到的是你提交的提交顺序,因为John在完成他的任务之前不应该推他的提交,对于Susan也是如此,得到以下顺序:

1234,约翰,TASK-123进行的按钮红色

3322,约翰,TASK-123取得了按钮的工作

4121,苏珊,TASK-321取得了吧绿

4412,Susan,TASK-321制造酒吧工作

然后,您可以随时部署和测试功能分支,因为远程分支只包含完成的工作。

欲了解更多信息的分支策略请参见:

+0

就是这样,我们的流程与gitflow不同。 gitflow并没有真正帮助开箱即用的部署,我们在部署之前花费了太多的时间合并和重新合并分支......这就是为什么我们决定在同一分支上工作......Thx的答案虽然:) –

2

不解决任何的工作流程问题,即只有在这个问题看:

我知道我可以查看差异对于连续提交git diff commit1..commit2 ...但我想要的是过滤掉一些提交范围[并得到的效果:如果我创建一个新分支会发生什么,樱桃挑选一些提交到该分支,然后比较该分支的提示与该分支的基础]?

答案是你不能从git diff得到这个。语法:

git diff c1..c2 

字面意思完全一样的东西为

git diff c1 c2 

..符号这里基本上扔掉完全。 (该方式git diff这是否是有点俗气和哈克如果你喂c1..c2符号来git rev-parse你会看到它转换为c2 ^c1内部,git diff调用相同的代码,git rev-parse用途,然后将其检查结果:。如果有一个否定提交^<hash>和一个积极提交<hash>,它提取否定提交的内容,提取肯定提交的评论,并区分这两个内容。)

我添加的方括号内的文本提示了您可以生成的方式你的意图是:而不是尝试差异提交c1 vs提交c2“好像”某些中间提交已被删除,您可以:

$ git checkout -b tempbranch c1 
$ git cherry-pick <insert list of commits in the c1..c2 range you want> 
... resolve any conflicts here if necessary ... 
$ git diff c1 HEAD 

换句话说,要找出如果你樱桃选择了一些提交列表会发生什么,你必须选择提交列表。

+0

感谢您的答案,我认为我的后备计划将樱桃选择我关心他们自己的分支(同时希望没有冲突)的所有提交,并以这种方式看差异。 –

+0

如果只有几个提交需要跳过,那么执行交互式重新分配并删除不需要的提交而不是挑选樱桃可能不那么麻烦。 – hlovdal

+0

@hlovdal好点 - 检查一个重复的分支,然后重新绑定,放弃我不想要的提交。我认为那是我想要的最接近的东西,将对此进行试验。 –