Hospedagem Profissional

Hospedagem Profissional
Clique aqui e ganhe US$ 10,00 para testar durante 1 mês a melhor hospedagem: Digital Ocean!

quarta-feira, 23 de outubro de 2013

Como visualizar as diferenças entre um branch local e um remoto do Git

Geralmente, antes de atualizarmos nosso branch local com as alterações realizadas no repositório remoto, é necessário e prudente que vejamos quais alterações foram realizadas e qual será o impacto dessa atualização.

Quando usamos o git pull diretamente, é o equivalente a utilizar o git fetch e depois o git merge.

Sendo assim, entre o git fetch e o git merge podemos utilizar o git diff, git cherry ou git log para visualizarmos as alterações realizadas no brach remoto que não foram atualizadas no branch local.

Vejamos um exemplo:

 git fetch origin
 
 remote: Counting objects: 37, done.  
 remote: Compressing objects: 100% (15/15), done.  
 remote: Total 20 (delta 9), reused 0 (delta 0)  
 Unpacking objects: 100% (20/20), done.  
 From ssh://mygitserver.com/myrepo  
   d10975d..de50252 master   -> origin/master  

Feito isso, agora podemos inspecionar as diferenças.

Por exemplo, para visualizarmos a lista de commits que foram feitos no branch remoto e que não estão no brach local:

  git cherry master origin/master
  
 + de50252fa7bbefd7326a514c0e5f46b2b98a197e  

Na saída acima, identificamos que existe um commit realizado a ser mesclado com nosso branch local, porém somente com o "hash" fica difícil extrair informações sobre esse commit, sendo assim, podemos usar o próximo comando para obter mais detalhes.

 git log origin/master ^master
  
 commit de50252fa7bbefd7326a514c0e5f46b2b98a197e  
 Author: Fulano de Tal   
 Date:  Thu Oct 10 11:36:09 2013 -0400  
   Atualização do Menu e lista de clientes  

Agora melhorou, já podemos saber quem foi o autor, qual o dia e hora que o código foi submetido e também conseguimos visualizar a mensagem que o autor informou ao realizar esse commit.

Porém, se ainda assim você precisar saber quais foram os arquivos alterados e quais as alterações realizadas, podemos utilizar o próximo comando:

 git diff master origin/master
  
 diff --git a/myrepo/src/main/java/br/com/mycompany/myproject/action/ClienteList.java
 new file mode 100644  
 index 0000000..a758bf7  
 --- /dev/null  
 +++ b/myrepo/src/main/java/br/com/mycompany/myproject/action/ClienteList.java  
 @@ -0,0 +1,30 @@  
 +package br.com.mycompany.myproject.action;  
 +  
 +import java.util.List;  
 +  
 +import javax.persistence.EntityManager;  
 +import javax.persistence.Query;  
 +  
 +import org.jboss.seam.annotations.In;  
 +import org.jboss.seam.annotations.Name;  
 +  
 +import br.com.mycompany.myproject.entity.Usuario;  
 +  
 +  
 +@Name("clienteList")  
 +public class ClienteList {  
 +  
 +    @In  
 +    EntityManager entityManager;  
 +      
 +    public List findClientes() {  
 +  
 +            Query q = entityManager.createQuery("select object(o) from Usuario as o Order by o.nome");  
 +            q.setParameter("setor", 2);  
 +            q.setParameter("situacao", 1);  
 +            return q.getResultList();  
 +    }  
 +      
 +      
 +      
 +}  

Tendo visto agora todos os commits a serem mesclados no branch local detalhadamente, e estando de acordo com essas alterações, podemos finalmente aplicar as alterações.

 git merge origin/master
  
 Updating d10975d..de50252  
 Fast-forward  
  .../br/com/mycompany/myproject/action/ClienteList.java   |  30 ++++++++++++  
  1 file changed, 30 insertions(+), 0 deletions(-)  
  create mode 100644 myrepo/src/main/java/br/com/mycompany/myproject/action/ClienteList.java  

Pronto, nosso branch local está sincronizado com o branch remoto.