Como você pega um arquivo diff do git e o aplica a uma ramificação local que é uma cópia do mesmo repositório?

492

Eu tenho um arquivo .diff criado por um colega de trabalho e gostaria de aplicar as alterações listadas nesse arquivo diff na minha filial local do mesmo repositório. Não tenho acesso ao PC ou ramo desse trabalhador que foi usado para gerar esse arquivo diff.

Obviamente, eu poderia ir linha por linha e redigitar tudo, mas prefiro não sujeitar o sistema a erros humanos. Qual é a maneira mais fácil de fazer isso?

Mike_K
fonte

Respostas:

747

Copie o arquivo diff para a raiz do seu repositório e faça:

git apply yourcoworkers.diff

Mais informações sobre o applycomando estão disponíveis em sua página de manual .

A propósito: Uma maneira melhor de trocar confirmações inteiras por arquivo é a combinação dos comandos git format-patchno remetente e git amno destinatário, porque também transfere as informações de autoria e a mensagem de confirmação.

Se o aplicativo de correção falhar e se as confirmações pelas quais o diff foi gerado estão realmente no seu repositório, você pode usar a -3opção applyque tenta mesclar as alterações.

Também funciona com o tubo Unix da seguinte maneira:

git diff d892531 815a3b5 | git apply
Philipp
fonte
3
Obrigado pela resposta, mas que causou um erro ao dizer que o patch falhou: filename.php: 202 erro: filename.php: o patch não se aplica. A boa notícia é que esse não é o primeiro nome do arquivo no arquivo, pelo menos teria sido capaz de processar parte do arquivo. Alguma ideia?
Mike_K
4
Você também parece ter alterações nesse arquivo que impedem o trabalho do patch. Para resolver isso, você pode confirmar suas alterações, criar uma nova ramificação, redefini-la para a consolidação onde você e seu colega de trabalho divergiram, aplicar o patch, confirmar e depois mesclar os dois ramos.
Philipp
3
@orlybg Quando você ainda não o confirmou, faça git reset --hardpara retornar sua árvore de trabalho para o último commit. Quando você já o confirmou, anexe a revisão à qual deseja retornar.
Philipp
5
@orlybg Desculpe, mas você está ferrado. O Git cria apenas um ponto de verificação ao qual você pode retornar quando faz um commit. É por isso que muitos guias git recomendam se comprometer cedo e com frequência .
Philipp
4
@orlybg, no mínimo, execute git stashantes de executar alguma ação que você queira reverter depois. De qualquer forma, você pode recuperar seu estoque e se comprometer em algum momento posterior.
Maurice