Wenn Sie sicherstellen möchten, dass der Patch (Single Commit) zusätzlich zu einem bestimmten Commit angewendet wird, können Sie die neue Option git 2.9 (Juni 2016) verwenden 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
Siehe Commit bb52995 , Commit 3de6651 , Commit fa2ab86 , Commit ded2c09 (26. April 2016) von Xiaolong Ye (``) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 72ce3ff , 23. Mai 2016)
format-patch
: --base
Option ' ' hinzufügen, um Basisbauminformationen aufzuzeichnen
Maintainer oder Tester von Drittanbietern möchten möglicherweise den genauen Basisbaum kennen, für den die Patch-Serie gilt. Bringen Sie git format-patch eine ' --base
' Option bei, um die Basisbauminformationen aufzuzeichnen und am Ende der ersten Nachricht anzuhängen (entweder das Anschreiben oder den ersten Patch in der Serie).
Die Basisbauminformationen bestehen aus dem "Basis-Commit", einem bekannten Commit, das Teil des stabilen Teils der Projekthistorie ist, an dem alle anderen arbeiten, und null oder mehr "vorausgesetzten Patches", die bekannt sind Patches im Flug, die noch nicht Teil des "Basis-Commits" sind und in topologischer Reihenfolge auf "Basis-Commit" angewendet werden müssen, bevor die Patches angewendet werden können.
Das "Basis-Commit" wird als " base-commit:
" gefolgt vom 40-Hex des Commit-Objektnamens angezeigt .
Ein "vorausgesetzter Patch" wird als " prerequisite-patch-id:
" angezeigt, gefolgt von der 40-hexadezimalen "Patch-ID", die Sie erhalten, indem Sie den Patch über den git patch-id --stable
Befehl " " übergeben.
Git 2.23 (Q3 2019) wird dies verbessern, da die --base
Option " " von " format-patch
" die patch-ids
erforderlichen Patches auf instabile Weise berechnet hat, die aktualisiert wurde, um auf eine Weise zu berechnen, die mit " git patch-id --stable
" kompatibel ist .
Siehe Commit a8f6855 , Commit 6f93d26 (26. April 2019) von Stephen Boyd ( akshayka
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 8202d12 , 13. Juni 2019)
format-patch
: --base patch-id
Ausgabe stabil machen
Wir haben den Kontext nicht jedes Mal geleert , wenn wir einen Teil des
patch-id
Generierungscodes in verarbeitet haben diff.c
, aber wir haben dies getan, als wir mit dem patch-id
Tool ' ' "stabile" Patch-IDs generiert haben .
Lassen Sie uns diese ähnliche Logik von patch-id.c
in nach portieren, diff.c
damit wir den gleichen Hash erhalten, wenn wir Patch-IDs für ' format-patch --base=
' Arten von Befehlsaufrufen generieren .
Vor Git 2.24 (Q4 2019) hat " git format-patch -o <outdir>
" ein Äquivalent von " mkdir <outdir>
" nicht " mkdir -p <outdir>
" gemacht, was korrigiert wird.
Siehe Commit edefc31 (11. Oktober 2019) von Bert Wesarg ( bertwesarg
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit f1afbb0 , 18. Oktober 2019)
format-patch
: Erstellen Sie führende Komponenten des Ausgabeverzeichnisses
Unterzeichnet von: Bert Wesarg
'git format-patch -o' hat ein Äquivalent von 'mkdir' und nicht 'mkdir -p' gemacht, was korrigiert wird.
Vermeiden Sie die Verwendung von ' adjust_shared_perm
' in den führenden Verzeichnissen, was Auswirkungen auf die Sicherheit haben kann. Erreicht durch vorübergehendes Abschalten von ‚ config.sharedRepository
‘ wie ‚ git init
‘ der Fall ist.
Mit Git 2.25 (Q1 2020) git rebase
funktionierte " " nicht gut, wenn die format.useAutoBase
Konfigurationsvariable gesetzt wurde, die korrigiert wurde.
Siehe Festschreiben cae0bc0 , Festschreiben 945dc55 , Festschreiben 700e006 , Festschreiben a749d01 , Festschreiben 0c47e06 (04. Dezember 2019) von Denton Liu ( Denton-L
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 71a7de7 , 16. Dezember 2019)
rebase
: format.useAutoBase
Bruch beheben
Berichtet von: Christian Biesinger
Unterzeichnet von: Denton Liu
Das format.useAutoBase = true
Ausführen von rebase führte zu einem Fehler:
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.
--no-base
Beheben Sie dies, indem Sie von Rebase immer an Format-Patch übergeben, damit der Effekt von format.useAutoBase
negiert wird.
git apply --stat file.patch
# show stats.git apply --check file.patch
# Vor der Bewerbung auf Fehler prüfen.git am < file.patch
# wende den Patch endlich an.