Eu tenho dois ramos totalmente fundidos.
No entanto, depois que a mesclagem é concluída, percebo que um arquivo foi danificado pela mesclagem (alguém fez um formato automático, gah), e seria mais fácil mudar para a nova versão no outro ramo e reinsira minha alteração de uma linha depois de trazê-la para o meu ramo.
Então, qual é a maneira mais fácil no git de fazer isso?
git
git-branch
branching-and-merging
madlep
fonte
fonte
Respostas:
Execute isso a partir da ramificação em que você deseja que o arquivo termine:
Fórmulas gerais:
Algumas notas (dos comentários):
myfile.txt
emydir
uma alternativa:
fonte
''
para que não sejam interpretados pelo shell.Eu acabei com essa pergunta em uma pesquisa semelhante. No meu caso, eu estava procurando extrair um arquivo de outra ramificação para o diretório de trabalho atual diferente da localização original do arquivo. Resposta :
fonte
git diff <other branch> <path to file>
funciona bem.Que tal usar o comando checkout:
fonte
git diff
suporta um--stat
argumento que basicamente faz a mesma coisa que diffstat.1) Verifique se você está no ramo onde precisa de uma cópia do arquivo. por exemplo: eu quero o arquivo sub branch no master, então você precisa fazer o checkout ou deve estar no master
git checkout master
2) Agora faça o check-out do arquivo específico que você deseja da sub ramificação para a master,
aqui
sub_branch
significa onde você tem esse arquivo seguido pelo nome do arquivo que você precisa copiar.fonte
Após a resposta do madlep, você também pode copiar um diretório de outro ramo com o blob de diretório.
Quanto à pergunta do op, se você apenas alterou um arquivo, isso funcionará bem ^ _ ^
fonte
origin/other-branch
para se referir ao ramo de recompra. Noções básicas, mas me mordeu. (a resposta é grande - nenhuma edição obrigatório)Eu usaria
git restore
(disponível desde o git 2.23)git restore --source otherbranch path/to/myfile.txt
Por que é melhor do que outras opções?
git checkout otherbranch -- path/to/myfile.txt
- Copia o arquivo para o diretório de trabalho, mas também para a área intermediária (efeito semelhante como se você copiasse esse arquivo manualmente e o executassegit add
).git restore
não toca na área de armazenamento temporário (a menos que seja solicitado por--staged
opção).git show otherbranch:path/to/myfile.txt > path/to/myfile.txt
usa redirecionamento de shell padrão. Se você usa o Powershell, pode haver um problema com a entrada de texto ou você pode obter um arquivo quebrado, se for binário . Com agit restore
mudança de arquivos é feito tudo pelogit
executável.Outra vantagem é que você pode restaurar a pasta inteira com:
git restore --source otherbranch path/to
ou com
git restore --overlay --source otherbranch path/to
se você quiser evitar a exclusão de arquivos. Por exemplo, se houver menos arquivos dootherbranch
que no diretório de trabalho atual (e esses arquivos forem rastreados ) sem a--overlay
opçãogit restore
, eles serão excluídos. Mas esse é um bom comportamento padrão; é provável que você queira que o estado do diretório seja o mesmo deotherbranch
, não "o mesmo, mas com arquivos adicionais no meu ramo atual"fonte
git restore
maneira de copiar um arquivo da ramificação de origem para um novo arquivo na ramificação de destino? Com o git show, posso fazer isso com o redirecionamento de shell (git show otherbranch:path/to/file1.txt > path/to/file2.txt
), mas quero evitar o redirecionamento de shell pelos motivos mencionados.git restore
(mas quem sabe;)). Esses problemas de redirecionamento são basicamente um problema do PowerShell, não tenho certeza se existe algum outro shell com problema. Normalmente, volto ao "git bash" ou até ao "cmd", onde preciso usar osgit show
comandos " com redirecionamento". Ou use a GUI como GitExtensions, onde você pode procurar na árvore de arquivos de confirmação e clicar em "Salvar como" em qualquer arquivo.Observe que, na resposta aceita, a primeira opção monitora o arquivo inteiro da outra ramificação (como se
git add ...
tivesse sido executada) e que a segunda opção resulta apenas na cópia do arquivo, mas não nas alterações (como se você tivesse apenas editou o arquivo manualmente e teve diferenças notáveis).Git copiar arquivo de outra ramificação sem prepará-lo
Alterações efetuadas (por exemplo
git add filename)
:Alterações pendentes (não preparadas ou confirmadas):
fonte