Eu tenho 2 ramos git branch1 e branch2 e quero mesclar file.py no branch2 em file.py no branch1 e apenas esse arquivo.
Em essência, eu só quero trabalhar no file.py no branch1, mas quero aproveitar o comando de mesclagem. Qual é a melhor maneira de fazer isso?
Respostas:
Quando o conteúdo é
file.py
da filial2 que não se aplica mais à filial1 , é necessário escolher algumas alterações e deixar outras. Para controle total, faça uma mesclagem interativa usando o--patch
switch:A seção do modo interativo na página de manual
git-add(1)
explica as chaves que devem ser usadas:O comando split é particularmente útil.
fonte
git init <dir>
) e finalmente jogá-lo fora (rm -r <dir>
).Embora não seja uma mesclagem em si, às vezes é necessário todo o conteúdo de outro arquivo em outra ramificação. A postagem no blog de Jason Rudolph fornece uma maneira simples de copiar arquivos de um ramo para outro. Aplique a técnica da seguinte maneira:
Agora
file.py
está agora no ramo1 .fonte
file.py
com o que está no ramo 2.Nenhuma das outras respostas atuais realmente "mesclará" os arquivos, como se você estivesse usando o comando mesclar. (Na melhor das hipóteses, eles exigirão que você escolha manualmente as diferenças.) Se você realmente deseja tirar vantagem da fusão usando as informações de um ancestral comum, pode seguir um procedimento baseado no encontrado na seção "Mesclagem avançada" do git Manual de referencia.
Para este protocolo, suponho que você queira mesclar o arquivo 'caminho / para / arquivo.txt' da origem / mestre no HEAD - modifique conforme apropriado. (Você não precisa estar no diretório superior do seu repositório, mas ajuda.)
O arquivo de mesclagem git deve usar todas as suas configurações de mesclagem padrão para formatação e similares.
Observe também que se o "nosso" é a versão da cópia de trabalho e você não deseja ser excessivamente cauteloso, pode operar diretamente no arquivo:
fonte
São todas as modificações
file.py
embranch2
em suas próprias commits, separado de modificações para outros arquivos? Nesse caso, você pode simplesmente fazercherry-pick
as alterações:Caso contrário,
merge
não funciona caminhos ao longo individuais ... você pode muito bem criar umgit diff
pedaço defile.py
alterações debranch2
egit apply
-lhesbranch1
:fonte
Você pode
stash
estash pop
o arquivo:fonte
Para mesclar apenas as alterações dos branch2
file.py
, faça as outras alterações desaparecerem.A mesclagem nunca examinará nenhum outro arquivo. Pode ser necessário '-f' os checkout se as árvores forem diferentes o suficiente.
Observe que isso deixará o branch1 parecendo que tudo no histórico do branch2 até esse ponto foi mesclado, o que pode não ser o que você deseja. Uma versão melhor do primeiro checkout acima provavelmente é
Nesse caso, a mensagem de confirmação provavelmente também deve ser
fonte
Estou na mesma situação, quero mesclar um arquivo de um ramo que tenha muitos commits nele no 2 ramo. Eu tentei várias maneiras acima e outras que encontrei na internet e todas falharam (porque o histórico de commit é complexo), por isso decido fazer o meu caminho (do jeito louco).
fonte
O que eu fiz é um pouco manual, mas eu:
revert
;HEAD~1
, ou seja, seu estado no commit de mesclagem;Feio? Sim. Fácil de lembrar? Também sim.
fonte