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?

Foi útil?

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 e mydir
  • 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")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top