2017-10-29 1747 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

是的,那更好! –