Git:如何查找具有给定 Change-Id 的提交?

Git: How to find commits with given Change-Id?

Gerrit 会自动在每个新提交的提交消息中添加一个 Change-Id: I.... 行。当一个提交被挑选到多个分支中时,该行将保留在其消息中。

有什么办法可以:

  1. 查找具有给定 Change-Id 的所有提交
  2. 找到具有给定 Change-Id 的特定分支上的提交
  3. 指定具有给定 Change-Id(在特定分支上)的提交作为修订参数(例如 git cherry-pick {[dev-branch::]Change-Id: Ixxxx}..master

编辑:在我发布这个答案后,@lz96 建议:

git --no-pager log --format=format:%H -1 --grep "Change-Id: "

这绝对是最干净的方式!


这是我原来的回答:

我想不出一个简单的方法来一步完成,所以这里有两个:

git log --grep "Change-Id: <id>"

这将向您显示所有具有此 Change-Id 参数的提交。第 1b 步:祈祷只有一个。

第 2 步:git cherry-pick <sha>.


这是我丑陋的一步法:

git cherry-pick $(git log --grep "Change-Id: <id>" | head -n 1 | cut -d ' ' -f 2)

你可以把它变成一个函数来隐藏所有的复杂性:

function changepick() {
  git cherry-pick $(git log --grep "Change-Id: " | head -n 1 | cut -d ' ' -f 2)
}

这也让您不必在一行中途插入 Change-Id