显示合并请求ID的Git日志

5

如何基于提交 ID 或上一个合并请求找到合并请求 ID?我想在 CURL 请求中包含合并请求 ID,但我无法使用 git log 命令找到该 ID。

http://10.10.10.10/api/v4/projects/9/merge_requests/67/notes 

请注意,“合并请求”是GitLab特有的功能:它们在Git本身中不存在。如果GitLab没有将它们放入较低级别的Git部分中,您将无法从Git本身获取它们,只能从GitLab获取。 - torek
这两个答案没有恰当地回答你的问题吗? - Guildenstern
2个回答

0

你可能需要首先列出合并请求,可能通过状态进行过滤,并获取第一个(使用{{link2:jq}}:| jq '.[0])。
请参见项目合并请求列表

GET /projects/:id/merge_requests?state=opened
curl --header "Private-Token: askljdhakjdlsa" "http://10.10.10.10/api/v4/projects/9/merge_requests?state=opened"

我能否使用提交ID找到它?因为我可以使用git log获取提交ID,同时可能会有多个合并请求,我可能会选择错误的合并请求。如果我可以使用提交ID搜索,则可以找到正确的合并请求。 - user630702
1
@anon 第一个“sha”是答案的一部分,这意味着您可以使用jq按sha进行过滤,查找特定的提交。 - VonC

0

Gitlab 存储了除分支和标签之外的额外 merge-requests/... 引用,这些引用指向合并请求提交。您可以通过运行 git ls-remote 查看这些引用:

$ git ls-remote origin
ed228a67a...    HEAD
7215f3432...    refs/heads/cache
4ed228a67...    refs/heads/master
...
d2cc93ae3...    refs/merge-requests/1023/head    # current commit for MR #1023
a888aabaf...    refs/merge-requests/1023/merge
...

您可以将这些引用拉到本地仓库,例如通过更新配置中的refspec(改编自this gist):

[remote "origin"]
    url = git@github.com:joyent/node.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/merge-requests/*/head:refs/remotes/origin/mr/*   # <- add this line

然后运行`git fetch`。
现在你应该在git log的输出中看到`origin/mr/{xxx}`的引用,可以在其他命令中使用这些名称。
例如,你可以检查一个commit是否是一个pull request:
git for-each-ref refs/remotes/origin/mr --points-at <commit-ish>

1
GitHub?不过这个问题是关于GitLab合并请求的。 - VonC
@VonC:是的,但OP标记了[tag:github]。我正准备删除那个标签... - torek
重新措辞我的答案以匹配Gitlab设置。 - LeGEC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接