Uma substituição para git merge
isso substituirá arquivos não rastreados
Os comentários abaixo usam 'FOI' para os 'arquivos de interesse', os arquivos que
- existe no ramo doador,
- não existem no ramo receptor,
- e estão bloqueando a mesclagem porque eles estão presentes e não são rastreados no seu diretório de trabalho.
git checkout -f donor-branch # replace FOI with tracked `donor` versions
git checkout receiving-branch # FOI are not in `receiving`, so they disapppear
git merge donor-branch # now the merge works
Uma substituição para git pull
isso substituirá arquivos não rastreados
pull = fetch + merge
, git fetch
seguimos o git checkout -f, git checkout, git merge
truque acima.
git fetch origin # fetch remote commits
git checkout -f origin/mybranch # replace FOI with tracked upstream versions
git checkout mybranch # FOI are not in mybranch, so they disapppear
git merge origin/mybranch # Now the merge works. fetch + merge completes the pull.
Explicação detalhada
git merge -f
não existe, mas existe git checkout -f
.
Usaremos git checkout -f
+ git checkout
para remover os arquivos de interesse (veja acima) e, em seguida, sua mesclagem poderá prosseguir normalmente.
Etapa 1. Esta etapa substitui forçosamente o FOI não rastreado pelas versões rastreadas do ramo doador (também faz check-out do ramo doador e atualiza o restante do diretório de trabalho).
git checkout -f donor-branch
Etapa 2. Esta etapa remove os FOI porque eles são rastreados em nossa filial atual (doadora) e ausentes na receiving-branch
opção para a qual alternamos.
git checkout receiving-branch
Etapa 3. Agora que o FOI está ausente, a mesclagem no ramo doador não substituirá nenhum arquivo não rastreado, para que não ocorram erros.
git merge donor-branch