From: Thadeu Lima de Souza Cascardo Date: Sat, 28 Jun 2014 04:36:26 +0000 (-0300) Subject: Sobre branches, commit IDs, histórico. X-Git-Url: http://git.cascardo.info/?p=cursogit.git;a=commitdiff_plain;h=2976a54316e08f901e7b483defe03b02ebdb4803 Sobre branches, commit IDs, histórico. Um pouco mais sobre branches, os grafos criados pelas relações entre commits, e amend. --- diff --git a/Merge.mdwn b/Merge.mdwn new file mode 100644 index 0000000..033aec8 --- /dev/null +++ b/Merge.mdwn @@ -0,0 +1,83 @@ +# Merge + +Branches permitem experimentar com o repositório, e separar o +desenvolvimento de novas funcionalidades e correções. Também permite que +várias pessoas trabalhem no mesmo projeto, através de branches remotos. + +Em algum momento, os vários branches devem ser reunidos em uma nova +versão. Há várias formas de fazê-lo. Uma das ferramentas que o permite é +o merge. Mas antes, revisaremos e veremos alguns conceitos. + +## Branches + +Discutimos como criar branches na seção [[Branches]] e como obter +branches remotos na seção [[Remotes]]. Vejamos, no entanto, porque levam +esse nome. + +A imagem abaixo mostra um repositório com poucos commits. Com exceção do +primeiro commit, todos os commits em Git possuem um ou mais genitores. +Isso faz com que a relação entre os commits constitua um grafo acíclico +dirigido, uma estrutura similar àquela associada a uma árvore +genealógica. + +O exemplo abaixo mostra commits com apenas um genitor. Note, no entanto, +que há um ramo, representado pelo branch devel. Isto é o que chamamos de +histórico não-linear. Há formas de linearizar históricos e veremos mais +adiante as razões para fazê-lo, quando não fazê-lo, e como fazê-lo. + +[[!img branches.png]] + +## Commit IDs + +Vimos em [[Git_log]] que um commit é identificado por um ID. Este ID é +um hash SHA-1 do objeto do commit. O objeto é composto pelo log, autor, +data, a árvore de arquivos, outros metadados, e a lista de genitores. +Dada a natureza de um hash criptográfico como SHA-1, pequenas mudanças +no commit, seja no sumário, em algum arquivo, genitor, ou outros, causa +uma mudança no commit ID. + +Vejamos como alterar um commit usando a opção --amend do comando git +commit. Para tanto, criaremos um novo branch a partir do master e +alteraremos nosso novo HEAD. + + ~/project$ git checkout -b amend master + Switched to a new branch 'amend' + ~/project$ + +Veja como fica o nosso grafo após o novo branch ser criado na imagem +abaixo. Note que o grafo continua o mesmo e o branch amend é apenas uma +referência ao mesmo commit ao qual o branch master se refere. + +[[!img branch.png]] + +Neste exemplo, alteramos apenas a mensagem de log, usando a opção +--amend. + + ~/project$ git commit --amend + [amend 571a638] Acrescenta lista de arquivos a serem ignorados. + 1 file changed, 2 insertions(+) + create mode 100644 .gitignore + ~/project$ + +Note o resultado na figura abaixo. O commit foi alterado, mudando seu +ID. Ele ainda aponta para o mesmo genitor, mas é um commit diferente +daquele referenciado pelo branch master. + +[[!img amend.png]] + +## Histórico + +## Fast-foward + +## Merge + +Integração de código e histórico. + + ~/project$ git merge devel + Faz o merge de testes. + Merge made by the 'recursive' strategy. + Makefile | 3 +++ + 1 file changed, 3 insertions(+) + ~/project$ + +[[!img merge.png]]