找到"拉取请求的差异"来自Bitbucket / Stash

时间:2017-06-20 17:06:58

标签: git bitbucket

(Stash =本地托管的Bitbucket。)

我有一个典型的git工作流程:创建一个分支,对其进行处理,定期将其推送到Stash,定期关闭master,通过Stash合并到master

结果是Stash中的pull请求只包含正确的提交。

  • 有没有办法在命令行上使用git查找这些提交? git log确实包含它们,但git reflog <my-feature-branch>仅显示其中的一部分。
  • 找到这些提交后,如何制作PR的差异?最后一次提交是显而易见的,但我无法找到正确的初始点。

1 个答案:

答案 0 :(得分:1)

更新 - 来自评论,您说您在合并分支后以及经过一些重组后正在进行分析。我通常不认为这很重要,因为:

1)在合并之前你有my_feature_branch坐在提交上,或者你没有。您已经提到能够使用git log查看提交,因此我假设找到分支提示不是问题。

2)将事物重新置于主人身上通常不会改变master..my_feature_branchmaster...my_feature_branch(在他们各自的背景下)的含义。

但是,因为我认为你不是那种阅读答案的第一句话的人,然后在没有尝试答案给你的建议的情况下撰写防御性评论,这表明你可能已经做了一些反思> 会改变分支之间的关系 - 在这种情况下,应该在问题中详细说明该rebase的性质。

你说你明白git不知道拉请求的任何内容,但你根据git知道的事情解除比较并继续询问是否有办法让git告诉你有关拉取请求的信息...... ,没有。你想要的是my_feature_branch在创建PR时指向的提交历史,减去master同时指向的ocmmit的历史记录。您可能已经完成了使其复杂化的操作,或者您可能只认为自己有。

如果当时master指向的提交可以从master到达(通过父指针);如果你有任何ref指向当时指向的提交my_feature_branch(或SHA ID),那么我已经推荐的符号将起作用。

即使my_feature_branch被重新命名,只要它的新基数仍然在master的历史记录中并且rebase没有删除或编辑提交,相同的表示法仍然可以使用重写提交对应旧的my_feature_branch提示。

如果你以其他方式重写my_feature_branch(并且没有跟踪原始提交),那么你最好的选择是在reflog中找到tip提交然后使用regular {{ 1}}和git log(如下所述)使用该提交的SHA而不是分支引用名称。

请注意,pull请求不是“核心git”概念;它是托管回购服务的特殊之处。您正在检查的是一个分支,您已发出拉取请求。

我不明白你的第一个问题。正如您已正确识别的那样,git diff显示了分支的历史记录。 reflog是其他东西(ref在这个特定克隆中指向的本地历史记录)并不是你想要的。我想git log的麻烦是,如何让显示尚未掌握的提交?你可以通过

来做到这一点
git log

(注意:在这种情况下有两个点。)所以,如果你有

git log master..my_feature_branch

此日志输出将列出x --- x --- x --- x <--(master) \ A --- B --- C <--(my_feature_branch) AB

至于如何做差异,它是相似但有点不同:

C

(注意:这次是3点。)

这会自动查找git diff master...my_feature_branch master的“合并基础”,并在基础上找到my_feature_branch