Se vuoi essere sicuro che la patch (commit singolo) verrà applicata su un commit specifico, puoi usare la nuova opzione git 2.9 (giugno 2016) git format-patch --base
git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE
Vedi commit bb52995 , commit 3de6651 , commit fa2ab86 , commit ded2c09 (26 aprile 2016) di Xiaolong Ye (``) .
(Unita da Junio C Hamano - gitster
- in commit 72ce3ff , 23 maggio 2016)
format-patch
: aggiungi l' --base
opzione ' ' per registrare le informazioni dell'albero di base
I manutentori o i tester di terze parti potrebbero voler conoscere l'albero di base esatto a cui si applica la serie di patch. Insegna a git format-patch --base
un'opzione ' ' per registrare le informazioni dell'albero di base e aggiungerle alla fine del primo messaggio (o la lettera di accompagnamento o la prima patch della serie).
Le informazioni sull'albero di base sono costituite dal "commit di base", che è un commit noto che fa parte della parte stabile della storia del progetto su cui tutti gli altri lavorano, e zero o più "patch prerequisiti", che sono ben note patch in volo che non fanno ancora parte del "commit di base" che devono essere applicate sopra "commit di base" in ordine topologico prima di poter applicare le patch.
Il "commit di base" viene mostrato come " base-commit:
" seguito dal 40-hex del nome dell'oggetto di commit.
Una "patch prerequisito" viene mostrata come " prerequisite-patch-id:
" seguita dal "id patch" 40-hex, che può essere ottenuto passando la patch attraverso il git patch-id --stable
comando " ".
Git 2.23 (3 ° trimestre 2019) lo migliorerà, poiché l '" --base
" opzione di " format-patch
" ha calcolato le patch-ids
patch dei prerequisiti in modo instabile, che è stato aggiornato per essere calcolato in modo compatibile con " git patch-id --stable
".
Vedi commit a8f6855 , commit 6f93d26 (26 aprile 2019) di Stephen Boyd ( akshayka
) .
(Unita da Junio C Hamano - gitster
- in commit 8202d12 , 13 giu 2019)
format-patch
: rendere --base patch-id
stabile l'output
Non stavamo cancellando il contesto ogni volta che elaboravamo un pezzo nel
patch-id
codice di generazione diff.c
, ma lo facevamo quando generavamo patch-id "stabili" con lo patch-id
strumento " ".
Portiamo quella logica simile da patch-id.c
dentro a diff.c
così possiamo ottenere lo stesso hash quando generiamo patch-id per format-patch --base=
"tipi di invocazioni di comandi.
Prima di Git 2.24 (Q4 2019), " git format-patch -o <outdir>
" ha fatto un equivalente di " mkdir <outdir>
" non " mkdir -p <outdir>
", che viene corretto.
Vedi commit edefc31 (11 ott 2019) di Bert Wesarg ( bertwesarg
) .
(Unito da Junio C Hamano - gitster
- in commit f1afbb0 , 18 ott 2019)
format-patch
: crea i componenti principali della directory di output
Approvato da: Bert Wesarg
'git format-patch -o' ha fatto un equivalente di 'mkdir' non 'mkdir -p', che viene corretto.
Evita l'uso di " adjust_shared_perm
" nelle directory principali che potrebbero avere implicazioni per la sicurezza. Ottenuto disabilitando temporaneamente ' config.sharedRepository
' mi piace ' git init
'.
Con Git 2.25 (Q1 2020), " git rebase
" non ha funzionato bene quando format.useAutoBase
è stata impostata la variabile di configurazione, che è stata corretta.
Vedi commit cae0bc0 , commit 945dc55 , commit 700e006 , commit a749d01 , commit 0c47e06 (04 dic 2019) di Denton Liu ( Denton-L
) .
(Unita da Junio C Hamano - gitster
- in commit 71a7de7 , 16 dic 2019)
rebase
: correzione del format.useAutoBase
guasto
Segnalato da: Christian Biesinger
Firmato da: Denton Liu
Con format.useAutoBase = true
, l'esecuzione di rebase ha provocato un errore:
fatal: failed to get upstream, if you want to record base commit automatically,
please use git branch --set-upstream-to to track a remote branch.
Or you could specify base commit by --base=<base-commit-id> manually
error:
git encountered an error while preparing the patches to replay
these revisions:
ede2467cdedc63784887b587a61c36b7850ebfac..d8f581194799ae29bf5fa72a98cbae98a1198b12
As a result, git cannot rebase them.
Risolvilo passando sempre --no-base
alla patch di formattazione da rebase in modo che l'effetto di format.useAutoBase
sia negato.
git apply --stat file.patch
# mostra le statistiche.git apply --check file.patch
# verifica la presenza di errori prima di applicare.git am < file.patch
# applica finalmente la patch.