- Git rebase
- Antes de realocação
- Regular rebase
- rebase Interativo
- Força-push
- conflitos de Mesclagem
Este guia ajuda você a começar com a alteração da base, força, empurrando, e fixingmerge conflitos localmente.antes de mergulhar neste documento, certifique-se de que está familiarizado com o usingGit através da linha de comandos.
git rebase
Rebasing é uma operação muito comum inGit., Existem as seguintes opções de ajuste de base:
- ajuste de base Regular.
- rebase interactiva.
Antes de rebocar
git rebase
reescreve o histórico de commit. Pode ser prejudicial fazê-lo em ramos abertos. Pode causar conflitos complexos e difíceis de resolver. Nestes casos,em vez de ajustar o seu ramo contra o ramo padrão, considere puxá-lo em vez disso (git pull origin master
). Tem um efeito semelhante sem comprometer o trabalho dos seus colaboradores.,é mais seguro apoiar o seu ramo antes de rebocar para se certificar de que não perde nenhuma mudança. Por exemplo, considere um recurso branchcalled my-feature-branch
:
-
Abra o seu ramo de funcionalidade no terminal:
git checkout my-feature-branch
-
Checkout um novo branch a partir do mesmo:
git checkout -b my-feature-branch-backup
-
voltar ao seu original ramo:
git checkout my-feature-branch
Agora você pode seguramente rebase-lo., Se alguma coisa der errado, você pode recuperar yourchanges redefinindo my-feature-branch
contra my-feature-branch-backup
:
Note que se você adicionou alterações my-feature-branch
depois de criar a cópia de segurança ramo,você perdê-los ao reajuste.
Ajuste regular
com um ajuste regular você pode atualizar seu ramo de recursos com o defaultbranch (ou qualquer outro ramo).Este é um passo importante para as estratégias de desenvolvimento baseadas no Git., Pode assegurar-se de que as alterações que está a adicionar à base de código não quebram quaisquer alterações existentes adicionadas ao ramo alvo depois de criar o seu featurebranch.,
For example, to update your branch my-feature-branch
with master
:
-
Fetch the latest changes from
master
:git fetch origin master
-
Checkout your feature branch:
git checkout my-feature-branch
-
Rebase it against
master
:git rebase origin/master
-
Force-push to your branch.,
Quando você refaz:
- Git importa todos os commits submetidos a
master
depois do evento você criou o seu ramo de recurso até o momento presente. - Git coloca a compromete-se você tem em seu ramo de funcionalidade em cima de tudoo compromete-se importada a partir de
master
:
Você pode substituir master
com qualquer outro ramo que você deseja realocar contra, forexample, release-10-3
., Você também pode substituir origin
por outras remoterepositorias, por exemplo, upstream
. Para verificar os comandos que tem ligados ao seu repositório local, pode executar git remote -v
.
Se existirem conflitos de junção, O Git pede-lhe que os corrija antes de continuar o ajuste.
para saber mais, verifique a documentação do Git sobre as estratégias de ajuste e ajuste de contas.
rebase interactiva
pode usar rebase interactiva para modificar commits. Por exemplo, emendarum commitmessage, squash (juntar vários commits em um), Editar ou deletecommits., Use um ajuste para alterar mensagens de commit passadas, e organizar o histórico de commit do seu branch para mantê-lo limpo.
quando você quiser alterar qualquer coisa em commits recentes, use a base interactiverebase passando a bandeira --interactive
(ou -i
) para o comando rebase.,
Por exemplo, se você deseja editar últimos três compromete-se em seu ramo(HEAD~3
), execute:
git rebase -i HEAD~3
Git abre últimos três compromete-se em seu terminal editor de texto e describesall o rebase interativo opções que você pode usar. A opção padrão é pick
,que mantém o commit inalterado. Substitua a palavra-chave pick
de acordo com a operação que deseja realizar em cada commit. Para isso, você precisa editar os commits no editor de texto do seu terminal.,
Por exemplo, se estiver a usar o Vim como editor de texto da INA macOS ZSH
shell, e quiser esmagar todos os três commits(junte-os a um):
- carregue no seu teclado para mudar para o modo de edição do Vim.
- Navegue com as suas setas de teclado para editar o segundo teclado de commit a partir de
pick
parasquash
(ous
). Faça o mesmo com o terceiro commit.O primeiro commit deve ser deixado inalterado (pick
) pois queremos esmagar o segundo e o terceiro no primeiro., - Carregue em escapar para sair do modo de edição.
- Type to “write” (save) and “quit”.
- git retorna a mensagem de commit para que você tenha a chance de editá-la:
- Todas as linhas que começam com
#
são ignoradas e não incluídas na mensagem de commitmessage. Tudo o resto está incluído. - para deixá-lo como está, Tipo . Para editar a mensagem de commit: mude para o modo de edição, edite a mensagem de commit e grave-a como acabou de fazer.,
- Todas as linhas que começam com
- Se não tiver pressionado os seus commits para o ramo remoto antes de reiniciar,empurre as suas alterações normalmente. Se você já tivesse pressionado estes commits, force-push em vez disso.
Note que os passos para a edição através da linha de comandos podem ser ligeiramente diferentes, dependendo do seu sistema operativo e da linha de comandos que está a usar.
veja inúmeras possibilidades de desfazer no Git para uma análise mais profunda na rebase interativa.,
Force-push
quando você executa operações mais complexas, por exemplo, commits squash, reinicie ou reformule o seu ramo, você deve forçar uma atualização para o ramo remoto.Estas operações implicam a reconfiguração de confirmar a história do ramo.Para forçar uma atualização, passar o sinalizador --force
ou -f
push
comando. Forexample:
git push --force origin my-feature-branch
Forçar uma atualização não é recomendado quando você está trabalhando em sharedbranches.
Alternativamente, você pode passar a bandeira em vez disso., É mais seguro, pois não substituir qualquer trabalho no remotebranch se mais comete foram adicionados para o ramo remoto por alguém:
git push --force-with-lease origin my-feature-branch
Se a agência que você deseja forçar-push estiver protegida,você não pode forçá-empurre para ela, a menos que você desprotegê-lo primeiro. Depois podes forçar e voltar a protegê-lo.,
conflitos de Mesclagem
Como o Git é baseada na comparação de versões de um fileline-por-linha, sempre que uma linha alterada no seu ramo coincide com o sameline mudou no ramo de destino (após o momento em que você criou o seu ramo de funcionalidade a partir dele), Gitidentifies essas mudanças como um conflito de mesclagem. Para corrigi-lo, você precisa escolher qual versão da linha que você quer manter.
A maioria dos conflitos podem ser resolvidos através do GitLab UI.
para casos mais complexos, existem vários métodos para resolvê-los. Existem também aplicativos Git GUI que podem ajudar visualizando as diferenças.,
Para corrigir conflitos localmente, você pode usar o seguinte método:
-
Abra o terminal e check-out o seu ramo de funcionalidade, por exemplo,
my-feature-branch
:git checkout my-feature-branch
-
alterar a base de seu ramo contra o destino ramo para Gitprompts você com os conflitos:
git rebase origin/master
- Abra o conflito de arquivo em um editor de código de sua preferência.
- procure o bloco de conflito:
- ele começa com o marcador:
<<<<<<< HEAD
., - abaixo, há o conteúdo com suas alterações.
- o marcador:
=======
indica o fim das suas alterações. - abaixo, há o conteúdo das últimas alterações no ramo alvo.
- o marcador
>>>>>>>
indica o fim do conflito.
- ele começa com o marcador:
- edite o ficheiro: escolha qual a versão (antes ou depois de
=======
) que deseja para o tokeep e depois remova a parte do conteúdo que não deseja no ficheiro. - remove os marcadores.
- grava o ficheiro.,
- repita o processo se houver outros arquivos conflitantes.
-
Fase suas alterações:
git add .
-
Commit de suas mudanças:
git commit -m "Fix merge conflicts"
-
Continuar a realocação de:
git rebase --continue
cautionUp a este ponto, você pode executar ogit rebase --abort
para parar o processo.Git aborta o rebase e rola de volta o ramo para o estado em que você tinha forerunninggit rebase
.,Depois de executargit rebase --continue
o ajuste não pode ser interrompido.força a empurrar para o seu ramo remoto.
Leave a Reply