Preciso escrever um script que crie patches para uma lista de números de confirmação SHA1.
Eu tentei usar git format-patch <the SHA1>
, mas isso gerou um patch para cada confirmação desde o SHA1. Depois que algumas centenas de patches foram geradas, tive que interromper o processo.
Existe uma maneira de gerar um patch apenas para o SHA1 específico?
git apply --stat file.patch
# show stats.git apply --check file.patch
# verifique se há erros antes de aplicar.git am < file.patch
# aplique o patch finalmente.git am --keep-cr < mypatch.patch
git am -3 < file.patch
para aplicar usando uma mesclagem de três vias que permitirá resolver conflitos usandogit mergetool
posteriormente (ou editando manualmente) encontrados aqui .git format-patch -1 <sha> path/to/file.js
Isto irá criar um patch contendo apenas os diffs para os file.jsPara gerar os patches a partir dos commits superiores, a partir de um hash sha1 específico:
Os últimos 10 patches da cabeça em um único arquivo de patches:
fonte
git format-patch -1 HEAD
irá gerar patch para o mais recente comprometer-2
que geram manchas para a maioria dos últimos 2 commits é, e mais uma coisa para esclarecimentos é o comandogot format-patch -2 HEAD
é o mesmo que a linhagit format-patch HEAD~2
Digamos que você tenha cometido o id 2 após o commit 1, você seria capaz de executar:
onde 2 e 1 são hashes SHA.
fonte
git diff hash^ hash
. o "hash ^" fornece o commit precedido. (mas, é claro, a resposta de manojlds é melhor)git show HEAD > mypatch.diff
enquanto você estiver no commit, deve fazer o mesmo.git diff 1 2
Este comando (como já sugerido por @ Naftuli Tzvi Kay ):
Substitua
HEAD
por hash ou intervalo específico.irá gerar o arquivo de correção para a confirmação mais recente formatada para se parecer com o formato da caixa de correio UNIX.
Em seguida, você pode reaplicar o arquivo de patch em um formato de caixa de correio:
Veja:
man git-format-patch
.fonte
git
patch formatado, pelo menos se o usuário o aplicar da maneira correta.-k
flag (git am -3
) me corrigiu esse formulário (semPATCH[0/10]
enviar mensagens). Git versão 2.20.1.windows.1Solução rápida e simples.
fonte
git apply --check patch-file-name
antes de aplicar um patch. Isso ajudará a evitar problemas.Se você quiser ter certeza de que o patch (confirmação única) será aplicado sobre uma confirmação específica, use a nova opção git 2.9 (junho de 2016)
git format-patch --base
Consulte commit bb52995 , commit 3de6651 , commit fa2ab86 , commit ded2c09 (26 de abril de 2016) por Xiaolong Ye (``) .
(Mesclado por Junio C Hamano -
gitster
- na commit 72ce3ff , 23 de maio de 2016)O Git 2.23 (terceiro trimestre de 2019) melhorará isso, porque a
--base
opção " " de "format-patch
" calculou ospatch-ids
patches de pré-requisito de maneira instável, que foi atualizada para calcular de forma compatível com "git patch-id --stable
".Veja commit a8f6855 , commit 6f93d26 (26 abr 2019) por Stephen Boyd (
akshayka
) .(Incorporado por Junio C Hamano -
gitster
- in commit 8202d12 , 13 jun 2019)Antes do Git 2.24 (quarto trimestre de 2019), "
git format-patch -o <outdir>
" fazia o equivalente a "mkdir <outdir>
" não "mkdir -p <outdir>
", que estava sendo corrigido.Veja commit edefc31 (11 de out de 2019) de Bert Wesarg (
bertwesarg
) .(Incorporado por Junio C Hamano -
gitster
- in commit f1afbb0 , 18 out 2019)Com o Git 2.25 (primeiro trimestre de 2020), "
git rebase
" não funcionou bem quandoformat.useAutoBase
variável de configuração foi definida, o que foi corrigido.Consulte commit cae0bc0 , commit 945dc55 , commit 700e006 , commit a749d01 , commit 0c47e06 (04 dez 2019) por Denton Liu (
Denton-L
) .(Incorporado por Junio C Hamano -
gitster
- no commit 71a7de7 , 16 de dezembro de 2019)fonte
Para gerar o caminho de uma confirmação específica (não a última confirmação):
fonte
se você quiser apenas diferenciar o arquivo especificado, você pode:
fonte
Com minha formação mercurial, eu usaria:
Mas estou pensando em usar
git format-patch -1 $ID
agora.fonte
Qual é a maneira de gerar um patch apenas para o SHA1 específico?
É bem simples:
Opção 1.
git show commitID > myFile.patch
Opção 2.
git commitID~1..commitID > myFile.patch
Nota: Substitua
commitID
pelo ID de confirmação real (código de confirmação SHA1).fonte