Gere um patch git para um commit específico

Eu preciso escrever um script que crie patches para uma lista de números de confirmação SHA1.

Eu tentei usar git format-patch , mas isso gerou um patch para cada commit desde aquele SHA1. Depois de algumas centenas de patches foram gerados, eu tive que matar o processo.

Existe uma maneira de gerar um patch somente para o SHA1 específico?

Experimentar:

 git format-patch -1  

ou

 git format-patch -1 HEAD 

Aplique o patch com o comando:

 git am < file.patch 

Para gerar as correções dos commits mais altos de um hash sha1 específico:

 git format-patch -  

Os últimos 10 patches da cabeça em um único arquivo de patch:

 git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch 

Digamos que você tenha cometido id 2 após o commit 1 você seria capaz de executar:

 git diff 2 1 > mypatch.diff 

onde 2 e 1 são hashes SHA.

Este comando (como sugerido por @ Naftuli Tzvi Kay ):

 git format-patch -1 HEAD 

Substitua HEAD por hash ou intervalo específico.

irá gerar o arquivo de correção para o último commit formatado para se assemelhar ao formato de checkbox de correio do UNIX.

- – Prepara os patches dos commits mais altos.

Em seguida, você poderá aplicar novamente o arquivo de patch em um formato de checkbox de correio:

 git am -3k 001*.patch 

Veja: man git-format-patch .

 git format-patch commit_Id~1..commit_Id git apply patch-file-name 

Solução rápida e simples.

Para gerar o caminho de um commit específico (não o último commit):

 git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE 

Se você quiser ter certeza de que o patch (single commit) será aplicado em cima de um commit específico, você pode usar o novo git 2.9 (junho de 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 

Veja commit bb52995 , commit 3de6651 , commit fa2ab86 , commited ded2c09 (26 de abril de 2016) por Xiaolong Ye (“) .
(Mesclado por Junio ​​C Hamano – gitster – em commit 72ce3ff , 23 de maio de 2016)

format-patch : adicione a opção ‘ --base ‘ para registrar as informações da tree de base

Os mantenedores ou testadores de terceiros podem querer saber a tree base exata à qual a série de patches se aplica. Ensine git format-patch uma opção ‘ --base ‘ para registrar as informações da tree base e anexá-las no final da primeira mensagem (a carta de apresentação ou o primeiro patch da série).

As informações da tree base consistem no “commit base”, que é um commit bem conhecido que faz parte da parte estável do histórico do projeto do qual todo mundo trabalha, e zero ou mais “patches de pré-requisito”, que são bem conhecidos patches em vôo que ainda não fazem parte da “base commit” que precisa ser aplicada em cima de “base commit” em ordem topológica antes que os patches possam ser aplicados.

O “base commit” é mostrado como ” base-commit: ” seguido pelo 40-hex do nome do object commit.
Um “patch de pré-requisito” é mostrado como ” prerequisite-patch-id: ” seguido pelo “patch id” de 40 hexadecimais, que pode ser obtido passando o patch através do comando ” git patch-id --stable “.

Se você quer apenas diff o arquivo especificado, você pode:

git diff master 766eceb – conexões /> 000-mysql-connector.patch

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).