/ / Come aggiungere un ID commit a una serie di scelte ciliegia? - git, gerrit

Come aggiungere un ID commit a una serie di cherry picks? - git, gerrit

Sto cercando di contribuire alla lineageOS gerrit.

Quindi essenzialmente ho scelto una serie di commit da un ramo del kernel upstream ...

Solo ora, nessuno dei commit selezionati dalla ciliegia ha un ID di modifica. So di poterne aggiungere uno manualmente con un hook di commit e:

git commit --amend

Tuttavia, ci sono circa 834 commit ... Sono anche consapevole che potrei eseguire un rebase interattivo per alleviare leggermente il mio dolore tramite:

git rebase -i $FIRST_CP
# Change every commit from pick to edit
git commit --amend
git rebase --continue

Tuttavia, questo è quasi altrettanto negativo della raccolta delle ciliegie da parte a parte di ogni singolo commit.

Nota: io non avere accesso come amministratore al server Gerrit, quindi non posso rimuovere temporaneamente il requisito degli ID di modifica.

Sono alla fine del mio ingegno e questo sta davvero mettendo un freno ai miei contributi ... Spero che qualcuno abbia un'idea migliore.

Addenum: Ho anche provato a fondere il ramo e sperando che fosse accettato ... Nessun dado però.

risposte:

0 per risposta № 1

Provare git filter-branch --msg-filter.

Diciamo che abbiamo l'hook per generare Change-Id in ~/commit-msge ora siamo attivi master.

#create an orphan branch "tmp" from "master".
git checkout --orphan tmp master
git commit -m "new root"

#cherry-pick all the commits from an upstream kernel branch.
git cherry-pick <all-the-commits>

#rewrite the commit message of every commit on "tmp"
git filter-branch --msg-filter "git log -1 --pretty=%B $GIT_COMMIT > msg.txt;~/commit-msg msg.txt;cat msg.txt"

#all the commits now have Change-Id
#cherry-pick all of them except the root to "master"
root=$(git log --pretty=%H --max-parents=0)
git checkout master
git cherry-pick $root..tmp

msg.txt è stato creato in .git-rewrite/ nel repository corrente e .git-rewrite/ viene eliminato automaticamente al termine del comando. Quindi ignoriamolo.

Il comando msg-filter simula il processo di generazione di Change-Id. Penso che potrebbe essere più elegante, ma funziona nel mio test.


0 per risposta № 2

-n, --no-commit ti consentirà di selezionare una o più commit esistenti senza alcun commit. Dopo averlo fatto, puoi eseguire il commit di tutti quelli selezionati con un solo ID di commit.