Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 识别';上游';合并提交,而不是从fork中提交_Git_Github - Fatal编程技术网

Git 识别';上游';合并提交,而不是从fork中提交

Git 识别';上游';合并提交,而不是从fork中提交,git,github,Git,Github,我试图在git历史记录中识别pull请求合并提交 我们通常可以使用以下内容: git log --merges |grep 'Merge pull request'` 然而,我是一个具有多个存储库分叉的分布式项目的一部分,并且发现作为分叉开发流一部分的拉请求合并提交正在污染这个输出。这甚至可以在Github的UI中观察到 例如: 18b389... Merge pull request #2222 from Fork/master <-- Fork/master to Upstream

我试图在git历史记录中识别pull请求合并提交

我们通常可以使用以下内容:

git log --merges |grep 'Merge pull request'`
然而,我是一个具有多个存储库分叉的分布式项目的一部分,并且发现作为分叉开发流一部分的拉请求合并提交正在污染这个输出。这甚至可以在Github的UI中观察到

例如:

18b389... Merge pull request #2222 from Fork/master  <-- Fork/master to Upstream/master for feature X -  Want.
ea3e5b... Merge pull request #12 from Fork/feature-x  <-- Fork/feature-x to Fork/master - Dont want.

18b389。。。来自Fork/master的合并拉取请求#2222这不可能100%可靠地完成。但这里有一些接近的方法:

  • 您能否在提交消息的其他部分执行
    grep
  • 你能在Upstream的GitHub页面上浏览pull请求列表吗
  • 尝试将
    --first parent
    开关添加到对
    git log
    的调用中。这可能不会为您提供所有相关的拉取请求,但不应该为您提供任何您不想要的请求
--第一个父项
告诉
git log
只跟随合并提交的第一个父项,而不是跟随所有父项。合并到的分支始终是第一个父级,因此这是一种有效的方法,可以直接查看您正在查看的分支上发生的历史


可悲的是,有一件事可能会搞乱第一个父历史记录,即当有人拉动时发生的合并。如果人员A直接在主服务器上工作,并且同时将其他内容推送到服务器,则在拉取时将发生合并(除非另有配置)。在本例中,A的本地提交将是第一个父级,同时推送的内容将是第二个父级,这意味着它不会显示在
git log--first parent

我不清楚您真正想做什么,但“fork”实际上只是存储库的另一个克隆。如果您的存储库中有一个合并,您可以自己进行合并,也可以从其他人(可能有)处获得合并,但就Git而言,这并不重要。一般来说,提交的来源是不可追踪的;你只能说“是的,我有”或“不,我没有”。是的,事实上这就是我想做的。我们的项目在fork中完成了开发,代码审查/最终集成测试/发布在对上游/父级的pull请求中进行管理。我希望能够仅对这些上游拉取产生的合并提交进行一些分析,但git cli似乎不适合于此。谢谢非常感谢。最后,我使用Github的API获得了实际的合并SHA,然后验证了所有这些都存在于
git日志中。谢谢你的帮助。