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 № 1Provare git filter-branch --msg-filter
.
Diciamo che abbiamo l'hook per generare Change-Id in ~/commit-msg
e 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.