Como aplicar um patch gerado com o git format-patch?


221

Eu tenho 2 repositórios locais git, ambos apontando para o mesmo repositório remoto.

Em um repositório git, se eu fizer git format-patch 1, como posso aplicar esse patch ao outro repositório?

Respostas:


330

Nota: Você pode visualizar primeiro o que seu patch fará:

Primeiro as estatísticas:

git apply --stat a_file.patch

Em seguida, faça uma corrida a seco para detectar erros:

git apply --check a_file.patch

Por fim, você pode git amaplicar o seu patch como uma confirmação: permite assinar um patch aplicado.
Isso pode ser útil para referência posterior.

git am --signoff < a_file.patch 

Veja um exemplo neste artigo :

No seu log git, você encontrará que as mensagens de confirmação contêm uma tag "Assinada por". Essa tag será lida pelo Github e outros para fornecer informações úteis sobre como o commit terminou no código.

Exemplo


9
Nota para si mesmo: 200 ° Grande resposta Gold badge.
VonC 15/05/19

4
git am < somepatch.patchproduz "fatal: nome de identificação vazio (para <>) não permitido". Alguém pode me explicar por quê?
Gromit190 03/09/19

@ gromit190 que significa Authorcabeçalhos ruins no patch e / ou você não fez git config user.{name,email}.
ulidtko 18/06

ESTÁ BEM; git apply --checkdiz patch does not applye git apply -3diz repository lacks the necessary blob to fall back on 3-way merge.No git, rebasing commits é uma brisa; mas como as pessoas refazem seus patches sobre o código atualizado?
ulidtko 18/06


162
git apply name-of-file.patch

25
Isso pode não ter respondido à pergunta detalhada original, mas a pergunta no título, e é por isso que estou nesta página. obrigado!
Rock Lee

12
Entendo que essa é uma pergunta e resposta antiga ... mas achei que poderia ser útil para algumas pessoas entender a diferença entre git apply e git am .
mgarey

1
git apply "[... caminho completo para o arquivo ...] / nome-do-arquivo.patch"
Anton Lyhin 11/07/18

41

Ou, se você está chutando a velha escola:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

3
Só para você saber: isso não criará uma confirmação, pois perderá as informações da mensagem e do autor da confirmação.
César

22

Primeiro, você deve tomar nota da diferença entre git amegit apply

Quando você está usando, git amgeralmente deseja aplicar muitos patches. Assim deve usar:

git am *.patch

ou apenas:

git am

O Git encontrará patches automaticamente e os aplicará em ordem ;-)

UPD
Aqui você encontra como gerar esses patches


1
Esta explicação da diferença me ajudou a usar git apply.. e em --reverse:-) 👍
Jordan Gee


14

Se você estiver usando um JetBrains IDE (como IntelliJ IDEA, Android Studio, PyCharm), poderá arrastar o arquivo do patch e soltá-lo dentro do IDE, e uma caixa de diálogo será exibida, mostrando o conteúdo do patch. Tudo o que você precisa fazer agora é clicar em "Aplicar patch", e uma confirmação será criada.


1
Obrigado por isso. Isso é realmente útil para todos. Há uma resposta aceita. mas isso também é útil.
Lasitha Benaragama

1
@ambarox Mas esta resposta foi downvoted uma vez, eu não sei por quê
ice1000

1
pode ser que alguém pense que a única maneira de aplicar patches é através da linha de comando. : D eu te dei um voto positivo. Felicidades companheiro.
Lasitha Benaragama

1
@LasithaBenaragama - tipo de. O SO visa não apenas ajudar o OP, mas também todos que o seguem. Esta resposta (embora útil) não fornece uma solução geral. Isso daria uma excelente publicação no blog, mas não uma resposta "TÃO boa". Explicaria o voto negativo!
OldTinfoil 15/02

-2

Você pode usar o cmd mencionado abaixo

git apply fileName.patch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.