如何在 Git 中查找未包含在合并或拉取请求中的提交?

问题描述 投票:0回答:3

我正在使用由 GitLab 提供支持的 Git。

大多数代码更改都是通过合并请求(类似于 GitHub 中的拉取请求)完成的,其中另一个开发人员审查更改并接受将提交从其他分支合并到主分支的请求。

开发人员有时会直接推送到主分支,而不通过合并请求。我们想追溯审查这些提交。是否可以运行 git 命令来列出不属于合并请求一部分的任何直接推送提交?

git gitlab pull-request
3个回答
1
投票

在您自己的存储库本地副本上,您可以通过创建临时分支来记住

master
分支的位置:

git checkout -b master prev_master

然后从远程获取更新的主分支,例如

git fetch
git rebase origin/master master

然后您可以检查所有最近更改的日志:

git log --raw prev_master..master

(我喜欢使用“

--raw
”,因为它显示哪些文件已更改。)这听起来像你想要的吗?


1
投票

我不确定用例是否不同,但我使用

git cherry
来查找未合并的提交。

因此,例如,您可以运行

git cherry -v master staging
,这将列出所有正在暂存但不在 master 上的提交。

输出将如下所示

+ 30ad3d54a0e7b3b4127e5d6c214589e55c13951c Fix popup ui
+ d3ada650177eda21195e8694c83c9b6a03757a05 Fixed jenkins errors
+ 07f35ad04d9e9352b8693a9a59c5a369d17f2576 Fixed select box functionality
+ 60f9ae2d3ff9f7dbc5eda2cf57adcb86c7b16522 integrated API with frontend and replaced the dummy date used for temp purpose
+ 4a7309f5af06fffc1ba154c48fd9e5c60b9d3d8d Preview drop down added

您可以在文档中找到更多详细信息这里

不要将其与

git cherry-pick
混淆,这是一个非常不同的命令。


0
投票

我最近正在寻找这个问题的答案,但没有找到令人满意的答案,所以我想发布我的发现。从技术上讲,这对于纯 git 来说是不可能的,尤其是在使用快速提交或变基等功能时。因为 git 这两个看起来与直接推送到分支相同。然而,对于 gitlab,他们[有一个 API][1] 可以帮助您确定提交是否直接是合并请求的一部分还是合并请求的结果。

curl --header "PRIVATE-TOKEN: <your_access_token>" \

--url“https://gitlab.example.com/api/v4/projects/5/repository/commits/af5b13261899fb2c0db30abdd0af8b07cb44fdc5/merge_requests”

这将给出多种回应,但我发现这三种是最常见的:

  1. 空响应 - 这意味着特定提交被直接推送到分支
  2. 一个 json 对象,这将包含有关提交所属合并请求的详细信息
  3. 404 http 状态代码 - 如果提交不存在(即被覆盖或不在远程),则会返回此代码 [1]:https://docs.gitlab.com/ee/api/commits.html#list-merge-requests-linked-with-a-commit
© www.soinside.com 2019 - 2024. All rights reserved.