2017-10-29 1752 views
0

Gerrit会自动在提交消息中为每个新提交添加一条Change-Id: I....行。当一个提交被挑选到多个分支时,这一行被保存在它的消息中。Git:如何使用给定的Change-Id查找提交?

有没有什么办法:

  1. 找到所有提交给定更改-ID
  2. 找到一个特定的分支提交给定更改-ID
  3. 指定给定更改-ID提交(在特定的分支)的修正参数(如git cherry-pick {[dev-branch::]Change-Id: Ixxxx}..master
+1

'git log --grep ='应该处理2.如果你在3中有相同的更改ID有多个提交,你会怎么做? – HuStmpHrrr

+0

即使您更新了3,它也会使问题变得复杂,需要更复杂的决策程序。我不认为你可以做到这一点,没有包装在脚本内。 – HuStmpHrrr

+1

'ssh -p @ gerrit查询更改:'。该端口默认为29418。您可以添加其他'',例如'branch:master'。 – ElpieKay

回答

2

编辑:我张贴了这个答案后,@ lz96建议是:

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

这绝对是最干净的方式!


这里是我原来的答复:

我想不出如何做到这一步干净的方式,所以这里的二:

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: $1" | head -n 1 | cut -d ' ' -f 2) 
} 

这也给你的好处不必在一条线的中途插入Change-Id

+0

'git - 否 - pager log --format = format:%H -1 --grep“Change-Id:$ 1”'可能会更好? – lz96

+0

是的,那更好! –