Como faço para copiar uma versão de um único arquivo de um ramo git para outro?
-
08-07-2019 - |
Pergunta
Eu tenho dois ramos que são totalmente unidas.
No entanto, após a fusão é feita, eu percebo que um arquivo foi confuso pela fusão (alguém fez um formato auto, gah), e que seria apenas mais fácil a mudança para a nova versão na outra ramo, e, em seguida, re-inserir a minha mudança de linha depois de trazê-lo sobre em meu ramo.
Então, qual é a maneira mais fácil de git para fazer isso?
Solução
Executar este do ramo onde deseja que o arquivo para acabar:
git checkout otherbranch myfile.txt
fórmulas gerais:
git checkout <commit_hash> <relative_path_to_file_or_dir>
git checkout <remote_name>/<branch_name> <file_or_dir>
Algumas notas (de comentários):
- Usando o hash cometer você pode puxar arquivos de qualquer commit
- Isso funciona para arquivos e diretórios
- substitui o
myfile.txt
arquivo emydir
- Os curingas não funcionam, mas os caminhos relativos faça
- Vários caminhos podem ser especificados
uma alternativa:
git show commit_id:path/to/file > path/to/file
Outras dicas
I terminou no essa pergunta em uma pesquisa similar. No meu caso eu estava olhando para extrair um arquivo de outro ramo no diretório de trabalho atual que era diferente do local original do arquivo. Resposta :
git show TREEISH:path/to/file >path/to/local/file
Que tal usar comando checkout:
git diff --stat "$branch"
git checkout --merge "$branch" "$file"
git diff --stat "$branch"
Após a resposta de madlep você também pode simplesmente copiar um diretório de outro ramo com o blob diretório.
git checkout other-branch app/**
Como a questão da op se você mudou apenas um arquivo lá isso vai funcionar muito bem ^ _ ^
1) Certifique-se de que você está no ramo em que você precisa de uma cópia do arquivo.
por exemplo: eu quero arquivo ramo sub no mestre de modo que você precisa para check-out ou deveria ser no mestre git checkout master
2) arquivo específico Agora check-out sozinho você quer de sub ramo em mestre,
git checkout sub_branch file_path/my_file.ext
meios aqui sub_branch
onde você tem esse arquivo seguidos por nome de arquivo que você precisa para copiar.
Por favor note que na resposta aceita, a primeira opção etapas todo o arquivo do outro ramo (como git add ...
tinha sido realizado), e que a segunda opção apenas resulta em copiar o arquivo, mas não encenar as alterações (como se você tivesse acabado de editar o arquivo manualmente e tinha diferenças pendentes).
arquivo cópia Git de outro ramo, sem encenação it
Alterações encenado (por exemplo git add filename)
:
$ git checkout directory/somefile.php feature-B
$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: directory/somefile.php
Altera excelente (não encenado ou comprometido):
$ git show feature-B:directory/somefile.php > directory/somefile.php
$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: directory/somefile.php
no changes added to commit (use "git add" and/or "git commit -a")