Welcome to our ultimate guide to the git merge
and git rebase
. Este tutorial irá ensinar-lhe tudo o que precisa de saber sobre a combinação de vários ramos com o Git.
git Merge
o comando git merge
irá juntar todas as alterações que foram feitas à base de código numa ramificação separada para a sua ramificação actual como uma nova persistência.,
A sintaxe do comando é a seguinte:
git merge BRANCH-NAME
Por exemplo, se você está trabalhando atualmente em um ramo chamado dev
e gostaria de mesclar quaisquer novas alterações que foram feitas em um ramo chamado new-features
, você deve emitir o seguinte comando:
git merge new-features
Nota: Se houver quaisquer alterações não confirmadas sobre o seu ramo, o Git não vai permitir que você mesclar até que todas as alterações no seu ramo de ter sido cometido., Para lidar com essas alterações, você pode:
Criar um novo ramo e confirmar as alterações
git checkout -b new-branch-namegit add .git commit -m "<your commit message>"
Stash-los
git stash # add them to the stashgit merge new-features # do your mergegit stash pop # get the changes back into your working tree
Abandonar todas as alterações
git reset --hard # removes all pending changes
Git Rebase
A alteração da base de um branch no Git é uma maneira de mover a totalidade de um ramo para outro ponto na árvore. O exemplo mais simples é mover um ramo mais acima na árvore., Dizer que nós temos uma filial que divergiu do branch master no ponto A:
/o-----o---o--o-----o--------- branch--o-o--A--o---o---o---o----o--o-o-o--- master
Quando você realocar você pode movê-lo assim:
/o-----o---o--o-----o------ branch--o-o--A--o---o---o---o----o--o-o-o master
Para alterar a base, certifique-se de que você tem todos os commits que você deseja no rebase no seu branch master. Confira o ramo em que deseja ajustar a base e digitar git rebase master
(onde o comando principal é o ramo em que deseja ajustar a base)., que, por exemplo, um ramo que foi baseado em outro ramo (vamos chamá-lo de recurso) é realocado no mestre:
/---o-o branch /---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master
Depois git rebase master branch
ou git rebase master
quando você tiver verificado fora do seu ramo, você terá:
/---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master \---o-o branch
Git rebase interativo para console
Para usar o git rebase
no console com uma lista de commits que você pode escolher, editar ou queda no rebase:
- Enter
git rebase -i HEAD~5
com o último número a ser qualquer número de compromete-se a partir do mais recente para trás você deseja revisar.,In vim, pressesc
, theni
to start editing the test. - no lado esquerdo você pode sobrepor o
pick
com um dos comandos abaixo. Se você quer esmagar um commit em um anterior e descartar a mensagem de commit, digitef
no lugar depick
de o cometer. - grava e sai do seu editor de texto.
- Quando o rebase é parado, faça os ajustes necessários, em seguida, use
git rebase --continue
até o rebase ser bem sucedido., - Se ele reiniciar com sucesso, então você precisa forçar as suas alterações com
git push -f
para adicionar a versão rebaseada ao seu repositório remoto. - Se houver um conflito de junção, há uma série de maneiras de corrigir isso, incluindo seguindo as sugestões neste guia. Uma maneira é abrir os arquivos em um editor de texto e excluir as partes do código que você não quer. Em seguida, use
git add <file name>
seguido porgit rebase --continue
., Você pode saltar sobre o commit em conflito, inserindogit rebase --skip
, parar de reajustar executandogit rebase --abort
na sua consola.
Merge Conflicts
merge conflict is when you make commits on separate branches that alter the same line in conflicting ways.,qual a versão do ficheiro para se manter em uma mensagem de erro semelhante à seguinte:
CONFLICT (content): Merge conflict in resumé.txt Automatic merge failed; fix conflicts and then commit the result.
Se você olhar para o resumé.txt
arquivo no seu editor de código, você pode ver onde o conflito ocorreu:
<<<<<<< HEADAddress: 808 South Street=======Address: 505 North Street>>>>>>> updated_address
Git adicionado algumas linhas adicionais para o arquivo:
<<<<<<< HEAD
=======
>>>>>>> updated_address
Git Merge vs Git Rebase
Os git merge
e git rebase
comandos são muito úteis, e só não é melhor que o outro., No entanto, existem algumas diferenças muito importantes entre os dois comandos que você e sua equipe devem levar em consideração.
sempre que git merge
é executado, é criado um commit de junção extra. Sempre que estiver a trabalhar no seu repositório local, ter demasiados commits de junção pode fazer com que o histórico de commit pareça confuso. Uma maneira de evitar o commit merge é usar git rebase
em vez disso.
git rebase
é uma característica muito poderosa. Dito isto, também é arriscado se não for utilizado da forma correcta., git rebase
altera o histórico de commit, por isso use-o com cuidado. Se o ajuste for feito no repositório remoto, então ele pode criar um monte de problemas quando outros desenvolvedores tentam puxar as últimas alterações de código do repositório remoto. Lembre-se de executar apenas git rebase
num repositório local.
é tudo o que você precisa saber para se fundir e refazer com o melhor deles.