Git - Funcionamento e Workflow

Transcrição

Git - Funcionamento e Workflow
Git – Funcionamento e
Workflow
Pesquisa e
Desenvolvimento
Tecnológico
2
Git - Funcionamento e Workflow
Essa página foi deixada em branco intencionalmente.
Git - Funcionamento e Workflow - Git
PUBLICADO POR
Atual Sistemas – Departamento de Desenvolvimento
A informação contida neste documento representa a visão então sustentada pela Atual Sistemas sobre os assuntos
abordados na data de publicação do mesmo. Uma vez que a Atual Sistemas reagirá à mudanças nas condições do
mercado, este documento não deve ser interpretado como sob compromisso por parte da Atual Sistemas, e a Atual
Sistemas não garante exatidão de qualquer informação apresentada após a data dessa publicação.
As informações aqui contidas são apenas para propósito informativo. A Atual Sistemas NÃO FORNECE NENHUMA
GARANTIA OU RESPONSABILIDADE QUANTO A INFORMAÇÃO NESSE DOCUMENTO.
Esse documento é uma obra intelectual de uso restrito ao departamento de desenvolvimento da Atual Sistemas não
podendo ser reproduzido, armazenado, alterado, distribuído em quaisquer que sejam os meios (eletrônico, mecânico,
fotocopiado, gravado ou qualquer que seja), quer completo, quer parcial, para qualquer propósito, sem uma expressa
autorização escrita da Atual Sistemas.
A violação desse acordo por posse ou uso não autorizado em quaisquer das situações citadas acima representa um ato
direto contra os direitos de cópia e direitos de intelectualidade e será respondida conforme o rigor da lei.
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
3
4
Git - Funcionamento e Workflow
Conteúdos
PUBLICADO POR ................................................................................................................................................................................... 3
GIT – USO PRÁTICO.......................................................................................................................................... 5
Workflow padrão da Atual ................................................................................................................................................................. 5
Instalando o git....................................................................................................................................................................................... 7
Clonando repositórios do servidor ................................................................................................................................................. 7
Guia de Estilo de Mensagem de Commit ....................................................................................................................................... 8
Desenvolvedores ................................................................................................................................................................................... 8
Cumprindo Tarefas ............................................................................................................................................................... 8
Usando Branches que Dependem de outros Branches ...................................................................................................... 10
Trabalhando em uma Tarefa Reprovada (SEM dependência de outro Branch)................................................................. 13
Trabalhando em uma Tarefa Reprovada (COM dependência de outro Branch)................................................................ 14
Programação em Par na Mesma Tarefa ............................................................................................................................. 16
Comando Avulsos ............................................................................................................................................................................... 18
Analista .................................................................................................................................................................................................. 19
Criando Repositórios .......................................................................................................................................................... 20
Gerando Versão para o QA Tester...................................................................................................................................... 20
Aprovando Branches para o Develop ................................................................................................................................. 21
Aprovando Versão oficial e marcando com Tag ................................................................................................................. 21
Criando Branches de Hotfix para a Ultima Versão Oficial .................................................................................................. 22
Resolução de Problemas em Commits com resets errados ............................................................................................... 22
Aproveite ............................................................................................................................................................................................... 23
Git - Funcionamento e Workflow - Git
Git – Uso Prático
A Atual Sistemas utiliza como sistema para gerenciamento de versão de conteúdo o aplicativo Git. Esse aplicativo
não se trata de uma ferramenta de backup, mas deve ser usado no ambiente de desenvolvimento como um apoio
para melhor organização e segurança ao lidar com alterações em arquivos.
Assim, é de interesse de todos os membros da equipe de desenvolvimento tenham um bom entendimento do que o
git se trata e como ele pode auxiliá-lo a resolver problemas comuns como:




Fazer experimentos no fonte.
Verificar o histórico de mudança de algum arquivo.
Enviar tarefas concluídas.
Detectar bugs.
Workflow padrão da Atual
O git favorece vários tipos de workflow para lidar com o código fonte. Nós, no entanto, temos escolhido por um tipo
de workflow que favorece as condições e prioridades de nossa equipe de trabalho. No git, o repositório é feito de um
composto de modificações ao conteúdo do repositório. Essas alterações são representadas pelos commits feito pelos
usuários do repositório.
A medida que novas alterações vão sendo acrescidas ao repositório, novo conteúdo é gerado no repositório. Assim,
dependendo da alteração que você se concentrar, um diferente tipo de conteúdo você pode ter.
No git as alterações geralmente possuem uma outra alterações de origem. Porém, embora uma alteração geralmente
só possua uma alteração de origem, ela pode servir de origem para um número indeterminado de outras alterações.
41a12
a44fb
dd286
778ae
cd2b5
5a786
Como pode ser visto no fluxo acima, o commit 778ae está sendo usado como origem para três alterações diferentes
que não consegue manter relação entre si. Se eu selecionar o conteúdo da alteração 41a12, eu vou enxergar o
resultado dessa alteração somada com todas as outras alterações ancestrais a esta, o que significa que as outras
duas alterações paralelas a ela não estarão presente.
No entanto, se eu selecione o conteúdo do commit dd286, eu só enxergaria o conteúdo, desse commit para traz, o
que significa que os commits a frente seriam ignorados como se nunca tivessem existido no meu contéudo.
Como pode notar, a habilidade de navegar de uma alteração para outra é algo muito poderoso que lhe permite
enxergar estados diferentes que o conteúdo estava em determinado ponto. No entanto, navegar por alterações
usando números de commits seria um pouco confuso. Para reselver esse problema de praticidade, o git trabalha com
branches, que são como marcações que nós colocamos em um determinado commit para poder fazer alterações em
um repositório a partir de um commit.
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
5
6
Git - Funcionamento e Workflow
41a12 (ID1533)
a44fb (Master)
dd286
778ae (Develop)
cd2b5 (ID2012)
5a786 (ID2225)
Como pode ser visto de maneira mais clara, o acesso a determinados pontos do fonte se tornou mais claro com a
criação de branches para marcar determinados commits. Por exemplo, as três tarefas no final do fluxo estão
claramente saindo do commit marcado pelo branch Develop. Também, fica claro que o master, está dois commits
atrás do develop.
A vantagem de se trabalhar com branches, é que eles são como apelidos para os commits, mas eles também avançam
a medida que novos commits são inseridos a frente de nossos commits. Assim A arvores anterior, poderia acabar
ficando da seguinte maneira.
ID2012
a44fb (Master)
dd286
778ae
41a12 (ID1533 Develop)
ID2225
Como se pode ver, com simples modificações nós podemos atualiza um branch, nesse caso o Develop, para um novo
ponto, e ao mesmo tempo podemos reajustar com facilidade os dois outros commits que ainda não estão no Develop
para uma nova origem, a fim de manter os ancestrais desses commits atualizados.
Esse recursos nos permite montar uma infinidade de possibilidades de fluxo de trabalho para organização de
contúdo. Assim, nós padronizamos um modelo bem simples:






O branch master sempre aponta para o ultimo commit que represente a ultima versão liberada para o
consumidor final.
O Develop se origina do master e acrescenta commits analisados e aprovados pelo analista e o QA tester
para a base de código, entando sempre apontado para o ultimo commit aprovado.
Os branches da tarefa são branches criados pelo desenvolvedor baseado no Develop que possuem os
commits que o desenvolvedor faz a medida que ele cumpre a tarefa dele e altera a base de código.
Branches experimentais são branches criados pelos desenvolvedores baseados em commits de sua própria
tarefa com o propósito de realizar alterações em caráter experimental que podem ou não integrar a base de
código da tarefa.
O branch QA é gerado pelo analista de tempos em tempo a partir do Develop com uma junção dos branches
de tarefas que ele deseja que o QA Tester verifique.
Os branches HD são branches criados em caráter emergencial que geralmente se originarão da ultima
versão distribuída ao cliente, que se encontra no master. Esses branches são criados para se fazer pequenas
alterações no código oficial para correção de bugs emergiais.
Assim, a parte mais crítica e de maior interesse nesse workflow é a forma que programadores que cumprem tarefas
terão que intergir com o repositório por meio da criação e envio de alterações por meio do uso de branches. Assim,
Git - Funcionamento e Workflow - Git
nós podemos ilustrar a relação entre as alterações feitas pelos programadores e as alterações relevantes no
repositório da seguinte forma:
Develop
v5.00b
IDxxxx
ID1533
Experimentos
Botão
Alinhamento
ID2012
Nova Cor
Sem os dois
ultimo
commits
O Develop em grande parte dos casos servirá como base para as demais alterações a serem geradas e ele será
mantido atualizado pelo analista a medida que novas alterações forem testadas e aprovadas.
Instalando o git
O download do git pode ser feito a partir do endereço http://git-scm.com/. A versão do Windows do git instalará
junto um console para podermos usá-lo de maneira mais prática.
O console de uso do git é um console Unix, mesmo no Windows. Isso significa que algumas tarefas são levemente
diferentes do que já estamos acostumados. Por exemplo, para acessar as unidades de disco como o C:, é preciso
escrever cd /c/. Portanto, para entrar na pasta c:\VDF7\Integra\, é necessário que nós digitemos cd /c/VDF7/Integra.
Ao executar o git pela primeira vez, faça algumas configuração necessárias.
$
$
$
$
git
git
git
git
config
config
config
config
--global
--global
--global
--global
user.name "Meu Nome"
user.email "[email protected]"
core.autocrlf false
core.filemode false
Clonando repositórios do servidor
No git, o gerenciamento do conteúdo é feito de modo descentralizado. Assim, para podermos usar um repositório, é
necessário fazer a clonagem do repositório inteiro. Isso significa que após clonado, um repositório não tem mais um
servidor. No entanto, repositórios clonados guardam uma referencia para o repositório do qual eles foram clonados.
Assim, os dois repositórios podem trabalhar juntos, um sendo local e outro sendo o remoto.
Por padrão, agente só usa um remote, e o nome dele sempre será origin. A fazer uma clonagem, essa relação é criada
automaticamente.
O seguinte comando poderia ser usado para clonar o Integra por exemplo.
cd /c/VDF7/
$ git clone ssh://atual@servergit:22/opt/git/integra.git Integra
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
7
8
Git - Funcionamento e Workflow
Guia de Estilo de Mensagem de Commit
A primeira linha da mensagem de commit não deve ter mais de 50 caracteres, tendo uma descrição resumida de que
alteração esse commit se trata. No entanto, se esse for um commit para squash, a primeira linha só pode ter a
identificação da tarefa no formato IDXXXX (ex. ID2225).
As demais linhas devem ser usadas para fazer anotações em geral que tenha alguma relevância. Assim, siga as
seguintes instruções.



Descreva que efeito a alteração terá e não como ela foi implementada.
Inclua quais razões motivaram a alteração, e contraste com o comportamento anterior.
Não use mais de 70 caracteres por linha.
Desenvolvedores
Iremos agora delinear os passos mais corriqueiros que serão seguidos pelos desenvolvedores.
Cumprindo Tarefas
O git deve servir ao programador como uma ferramenta utilizada não somente para gerenciamento de versões do
fonte em que o programador está trabalhando, mas como uma ferramenta de auxílio que permite ao desenvolvedor
fazer back-ups, experimentação, e registro de check-points.
Roteiro
#
$
$
$
Criando o Branch e fazendo commits
git fetch
git checkout -b IDxxxx origin/Develop
git gui
# Para fazer commits
####################################################################
# Fazendo Backups no origin
$ git push origin :IDxxxx
$ git push origin IDxxxx
####################################################################
# Fazendo experimentos
$ git checkout -b IDxxxxExp
# Sem alterações pendentes.
$ git gui
# Para fazer commits
####################################################################
# Trazendo experimento para o branch da tarefa após os commits
$ git checkout IDxxxx
$ git merge IDxxxxExp
####################################################################
# Descartando o branch experimental (quer ele seja util ou não)
$ git branch -D IDxxxxExp
####################################################################
# Criando branchs experimentais a partir de um commit específico.
$ git checkout -b IDxxxxExp 24f52
# O numero do commit no final.
####################################################################
# Verificando se há atualizações disponíveis no repositório.
$ git fetch
$ git cherry HEAD origin/Develop
# Será exibido um hash se
# houver atulizações.
####################################################################
# Caso haja atualizações, aplicando atualizações no branch.
$ git rebase origin/Develop
Git - Funcionamento e Workflow - Git
####################################################################
#Finalizando Tarefa.
$ git fetch
$ git cherry HEAD origin/Develop
$ git rebase origin/Develop
# Somente se hover atulizações
# Fazendo o squash.
$ git reset --soft origin/Develop
$ git commit
# Remova o branch do remote se você já tinha uma cópia no remote.
$ git push origin :IDxxxx
#Envie para o remote.
$ git push origin IDxxxx
Definição
Ao receber uma tarefa, prepare o seu repositório obtendo as últimas atualizações feitas no remote origin pela
inteira equipe. Para isso, use o comando fetch.
$ git fetch
Uma vez atualizado, crie um branch de tarefa com o nome IDxxxx onde xxxx representa o número da tarefa em que
você trabalhará. Esse branch será criado usando o branch origin/Develop como branch base.
$ git checkout -b IDxxxx origin/Develop
Com uma boa regularidade, faça commits para esse branch a fim de manter pontos de segurança no seu fonte que
você possa recorrer em casos de dificuldades. Para fazer commits, use a ferramenta gráfica do git que lhe exigirá que
você revise suas alterações.
$ git gui
# Para fazer commits
Para fazer backup do seu fonte no origin, você precisa simplesmente fazer uma cópia do seu branch para o origin.
Caso você tente fazer um push e algum erro aconteça, delete o branch que já existe no servidor e então faça o push.
$ git push origin :IDxxxx
$ git push origin IDxxxx
Caso você queira fazer algum experimento com a sua tarefa, crie um outro branch a partir do branch da sua tarefa.
Para isso, não tenha nenhuma alteração pendente no seu branch aguaradando commit.
$ git checkout -b IDxxxxExp
# Sem alterações pendentes.
No branch de experimento, faça commits para suas alterações. Após fazer o seu experimento, se você realmente
quiser usar esse experimento na sua tarefa, faça um merge entre o experimento e a sua tarefa.
$ git checkout IDxxxx
$ git merge IDxxxxExp
No entanto, se você não tiver interesse no código feito no branch de experimento, então descarte o branch de
experimento.
$ git checkout IDxxxx
$ git branch -D IDxxxxExp
Do mesmo modo, caso você queira verificar o código da sua tarefa em um commit específico para testar algum erro
ou algum padrão que se desenvolveu, bastar criar branchs baseados no número do commit que você deseja
retroceder o fonte. A semântica é a mesma aplicada para branches experimentais, requerendo que você delete esses
branchs.
$ git checkout -b IDxxxxExp 24f52
# O numero do commit no final.
Atenção: Não faça commits para branches que foram criados com base em um commit específico porque o merge
não sairá fast-forward, o que nós não permitimos. Caso você realmente precise criar um branch experimental
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
9
10
Git - Funcionamento e Workflow
baseado em um commit específico, nesse caso, antes de fazer o merge, você terá de fazer rebase nesse branch
experimental usando como base o branch da tarefa.
Ao se trabalhar em uma tarefa, provavelmente o branch Develop sofrerá atualizações que talvez lhe sejam úteis. Por
isso, é sempre bom que você verifique se há novas atualizações. Para verificar se há novos commits no developer,
use os seguintes comandos.
# Verificando se há atualizações disponíveis no repositório.
$ git fetch
$ git cherry HEAD origin/Develop
# Será exibido um hash se houver atulizações
O fetch buscará por atualizações no remote enquanto o cherry comparará o branch da tarefa com o Develop para ver
se novos commits foram adicionados ao Develop. Caso tenham sido, faça um rebase como está abaixo.
# Caso haja atualizações, aplicando atualizações no branch.
$ git rebase origin/Develop
O rebase com o develop, assim como o back-up e os commits devem ser feitos corriqueiramente. De preferência pelo
menos duas vezes por dia.
Por fim, ao conclui a tarefa, atualize novamente seu branch com o Develop, faça um squash e salve no servidor da
mesma forma que você faz o back-up.
#Finalizando Tarefa.
$ git fetch
$ git cherry HEAD origin/Develop
$ git rebase origin/Develop
# Somente se hover atulizações
# Fazendo o squash.
$ git reset --soft origin/Develop
$ git commit
# Remova o branch do remote se você já tinha uma cópia no remote.
$ git push origin :IDxxxx
#Envie para o remote.
$ git push origin IDxxxx
Usando Branches que Dependem de outros Branches
Em alguns casos o desenvolvedor talvez precisará, quer por conveniência ou por praticidade, do conteúdo de outras
tarefas que estão em branches que ainda não foram aprovados no Develop. Em casos como esse, o programador
trabalhará na tarefa com leves mudanças.
A principal mudança é que você criará um branch base que terá a junção dos conteúdos que você precisar. Com base
nesse branch, você criará um segundo branch onde todo o trabalho da tarefa será feito. O branch base sempre sera
IDxxxxbase e o branch de uso será o IDXXXXwork. Ao concluir a tarefa, um terceiro branch será criado com a
convenção normal IDxxxx onde você fará um rebase diferente para eliminar a dependência da sua tarefa com outras
tarefas.
Aténção. Ao fazer tarefas reprovadas, talvez você não dependa desses mecanismos. Porém, se você ainda precisar
das dependências, crie o branch base, faça rebase do seu branch em cima do branch base, e trabalhe normalmente
como sugere nessa seção.
Atenção. Caso esse requerimento esteja sendo utilizado com programação em par, tanto administrador da tarefa
como os demais desenvolvedores devem usar o modelo de branch base e branch work como sugere aqui em lugar
de um único branch. Também, o envio da tarefa deve seguir o modelo aqui sugerido.
Roteiro
####################################################################
# Criando branch base com o conteúdo desejado.
$ git checkout -b IDxxxxbase origin/Develop
# Faça quantos merge você precisar para trazer suas dependências.
$ git merge origin/IDyyyy
Git - Funcionamento e Workflow - Git
####################################################################
# Criando o branch de trabalho.
$ git checkout -b IDxxxxwork IDxxxxbase
####################################################################
# Trabalhe normalmente.
$ git gui
####################################################################
# Faça back-up.
$ git push --force origin IDxxxxbase
$ git push --force origin IDxxxxwork
####################################################################
# Rebase com o master.
$ git checkout IDxxxxbase
$ git rebase origin/Develop
$ git checkout IDxxxxwork
$ git rebase IDxxxxbase
####################################################################
# Finalizando a tarefa.
# Crie o branch final - Nao precisa fazer o rebase dos branchs para isso.
$ git fetch
$ git checkout -b IDxxxx IDxxxxwork
# Quebrando relacionamento desse id com outras tarefas.
# Esse tipo de rebase só pode ser feito uma vez.
$ git rebase --onto origin/Develop IDxxxxbase IDxxxx
# Pode acontecer conflitos.
# Fazendo squash.
$ git reset --soft origin/Develop
$ git commit
# Envie para o remote.
$ git push origin IDxxxx
####################################################################
# Apagando os branches base e work locais e remotos.
$ git fetch
$ git branch -D IDxxxxbase
$ git branch -D IDxxxxwork
# Se houver branches remotos
$ git push origin :IDxxxxbase
$ git push origin :IDxxxxwork
Definição
Como explicado, nós usamos o modelo de branch base e branch work. O branch base funciona como um branch
normal, sendo criado a partir do origin/Develop.
# Criando branch base com o conteúdo desejado.
$ git checkout -b IDxxxxbase origin/Develop
No branch base, você deve fazer merge do conteúdo das tarefas que você deseja. Portanto, para cada branch que
você depende, use um comando merge.
# Faça quantos merge você precisar para trazer suas dependências.
$ git merge origin/IDyyyy
Após ter feito os merges necessários, crie o branch work. Caso uma nova dependência tenha de ser inserida após a
criação do branch base, basta fazer novos merges e depois fazer um rebase no branch de trabalho.
# Criando o branch de trabalho.
$ git checkout -b IDxxxxwork IDxxxxbase
Nesse ponto, você pode trabalhar normalmente, como por exemplo, fazendo experimentos e outras tarefas
corriqueiras.
# Trabalhe normalmente.
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
11
12
Git - Funcionamento e Workflow
$ git gui
Faça backup dos dois branches. Usaremos push force para não precisar remover manualmente possíveis backups
anterios.
# Faça back-up.
$ git push --force origin IDxxxxbase
$ git push --force origin IDxxxxwork
Caso haja novos commits no Develop que lhe interessam, faça o rebase do branch base e depois do branch work
para alinhar o seu histórico.
#
$
$
$
$
Rebase com o master.
git checkout IDxxxxbase
git rebase origin/Develop
git checkout IDxxxxwork
git rebase IDxxxxbase
Na finalização da tarefa você criará o branch oficial que será arquivado como branch da tarefa. Nesse momento, nós
rompemos a associação que há entre a nossa tarefa e as outras tarefas que nós precisávamos. Então atualize os seus
metadados e crie o branch final baseado no seu branch work.
#
#
$
$
Finalizando a tarefa.
Crie o branch final - Nao precisa fazer o rebase dos branchs para isso.
git fetch
git checkout -b IDxxxx IDxxxxwork
O comando rebase --onto deve ser usado para verificar a relação que há entre o seu branch oficial, o branch base e o
Develop, e com base nisso, as tarefas serão desvinculadas. Porntanto, para que tudo funcione como esperado, siga a
ordem sugerida abaixo para a listagem dos branches.
Durante o rebase, alguns conflitos podem acontecer, principalmente as alterações presentes no seu branch depende
de algum conteúdo criado em outro branch que sofreu merge no branch base. Caso ocorram conflitos, resolva os
conflitos, abra o git gui e coloque o arquivo na área verde (stage), mas não faça um commit. Apenas feche o git
gui e digite git rebase --continue.
# Quebrando relacionamento desse id com outras tarefas.
# Esse tipo de rebase só pode ser feito uma vez.
$ git rebase --onto origin/Develop IDxxxxbase IDxxxx
# Pode acontecer conflitos.
A partir desse ponto, não use mais git rebase --onto nesse branch. Ele passou a ser um branch normal. Caso você
precise de fazer um novo rebase seja lá qual for a razão, use um rebase normal.
Agora, fazemos o squash para transformar todos os commits em apenas um.
# Fazendo squash.
$ git reset --soft origin/Develop
$ git commit
Envie o seu código para o remote. Como você acabou de criar esse branch, não é necessário que você tente o
remover.
# Envie para o remote.
$ git push origin IDxxxx
Por fim, apague os branchs do seu repositório e do remote.
#
$
$
$
#
$
$
Apagando os branches base e work locais e remotos.
git fetch
git branch -D IDxxxxbase
git branch -D IDxxxxwork
Se houver branches remotos
git push origin :IDxxxxbase
git push origin :IDxxxxwork
Git - Funcionamento e Workflow - Git
Trabalhando em uma Tarefa Reprovada (SEM dependência de outro Branch)
Trabalhar em tarefas reprovadas é praticamente idêntico ao trabalho em novas tarefas, com a única diferença que,
na maior parte das vezes, você terá de dar continuidade em uma tarefa que já está em um branch existente. Nós
delinearemos agora, como reagir nesse caso.
Roteiro
####################################################################
# Buscando atualizações do servidor
$ git fetch
$ git gui # Vá no Menu “Remoto” e use a opção “Limpar de -> origin”
# Caso haja um branch no servidor, será impresso origin/IDxxxx
$ git branch --list -r | grep IDxxxx
####################################################################
# Caso exista um branch remoto
$ git branch -D IDxxxx
# Removendo branch local
$ git checkout -b IDxxxx origin/IDxxxx # Criando Cópia
####################################################################
# Selecionando um branch já existente (Somente se não existir um remote)
$ git checkout IDxxxx
# Crie uma tag para indicar onde houve a reprovação.
####################################################################
Desse ponto em diante NÃO FAÇA MAIS REBASE, nem mesmo para concluir
a tarefa.
####################################################################
$ git tag -a fix#
# Coloque o número de reprovações no #.
####################################################################
# Siga como em uma tarefa normal, exceto no caso do SQUASH
# Faça o squash como se segue.
####################################################################
$ git reset --soft fix#
$ git commit
# A descrição do commit sera IDxxxx FIX#
$ git push origin :IDxxxx
$ git push origin IDxxxx
####################################################################
# No final de tudo, remova a tag.
$ git tag --delete fix#
Definição
Ao trabalhar em uma tarefa reprovada, você deverá usar o branch que está no remote, ao invés do branch local.
Portanto, a única diferença é que você terá de deletar o branch local e fazer uma cópia do que você havia enviado
para o remote.
Antes de excluir o branch local, verifique se existe mesmo uma cópia do branch no remote.
#
$
$
#
$
Verificando se existe o branch no servidor
git fetch
git gui # Vá no Menu “Remoto” e use a opção “Limpar de -> origin”
Caso haja um branch no servidor, será impresso origin/IDxxxx
git branch --list -r | grep IDxxxx
Caso exista uma cópia no remote, remova a cópia local, e faça uma nova cópia local, como demonstrado a seguir.
# Removendo branch local na existência de um remoto.
$ git branch -D IDxxxx
# Removendo branch local
$ git checkout -b IDxxxx origin/IDxxxx # Criando Cópia
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
13
14
Git - Funcionamento e Workflow
No entanto, caso só exista um branch local, sem nenhuma cópia remota, apenas faça um checkout para o branch.
# Selecionando um branch já existente
$ git checkout IDxxxx
Uma vez no branch, crie uma tag indicando o ponto em que você começará a fazer alterações da reprovação. Essa tag
deve ter o nome “fix” seguido pelo quantidade de reprovações que a tarefa já sofreu. Por exemplo, essa você já esta
corrigindo a tarefa pela terceira vez, crie uma tag com o nome “fix3”.
# Crie uma tag para indicar onde houve a reprovação.
$ git tag -a fix#
# Coloque o número de reprovações no #.
A partir desse ponto, você pode começar fazer alterações e commits, seguindo desse ponto em diante o que foi
delineado no tópico anterior “Cumprindo Tarefas“. A única alteração aqui, será o modo como você fará o squash, e
isso vale para qualquer caso que você estiver lidando. O squash deverá ser feito como segue abaixo, e a mensagem
de commit que será inserida dever ter a identificação da tarefa com a identificação da reprovação (ex. ID2225 FIX3).
$ git reset --soft fix#
$ git commit
# A descrição do commit sera IDxxxx FIX#
Porém no final de tudo, ao ter terminado a tarefa e feito push, é necessário fazer a remoção da tag.
# No final de tudo, remova a tag.
$ git tag --delete fix#
Trabalhando em uma Tarefa Reprovada (COM dependência de outro Branch)
Este processo é praticamente idêntico ao trabalho de Tarefas Comuns COM dependência de outros Branchs, com a
única diferença que, na maior parte das vezes você vai se referir ao próprio Branch ao invés do origin/Develop, além
de ter que usar uma Tag para ajudar na hora de fazer o Reset. Nós delinearemos agora, como reagir nesse caso:
Roteiro
####################################################################
# Criando branch base com o conteúdo desejado.
$ git checkout -b IDxxxxbase origin/IDxxxx
####################################################################
# Crie a Tag e depois faça quantos merge você precisar para trazer suas dependências.
$ git tag -a fix#
# Coloque o número de reprovações no #.
$ git merge origin/IDyyyy
####################################################################
# Criando o branch de trabalho.
$ git checkout -b IDxxxxwork
####################################################################
Desse ponto em diante NÃO FAÇA MAIS REBASE, somente o “—onto” para
concluir a tarefa.
####################################################################
# Trabalhe normalmente.
$ git gui
####################################################################
# Faça back-up.
$ git push --force origin IDxxxxbase
$ git push --force origin IDxxxxwork
####################################################################
# Finalizando a tarefa.
# Crie o branch final - Nao precisa fazer o rebase dos branchs para isso.
Git - Funcionamento e Workflow - Git
$
$
#
#
$
#
$
$
#
$
git fetch
git checkout -b IDxxxx IDxxxxwork
Quebrando relacionamento desse id com outras tarefas.
Esse tipo de rebase só pode ser feito uma vez.
git rebase --onto origin/IDxxxx IDxxxxbase IDxxxx
# Pode acontecer conflitos.
Fazendo squash.
git reset --soft fix#
git commit
Envie para o remote.
git push origin IDxxxx
####################################################################
# Apagando os branches base e work locais e remotos.
$ git fetch
$ git branch -D IDxxxxbase
$ git branch -D IDxxxxwork
# Se houver branches remotos
$ git push origin :IDxxxxbase
$ git push origin :IDxxxxwork
####################################################################
# No final de tudo, remova a tag.
$ git tag --delete fix#
Interropendo uma tarefa de reprovação para trabalhar em outra reprovação
Há casos onde o desenvolvedor precisará parar o desenvolvimento de uma reprovação para trabalhar em outra que
requer mais atenção. Nesses casos, um pequeno procedimento pode ser feito. Tudo que é necessário é apagar a tag,
anotar o commit que ela estava referenciando e após ter cumprindo a outra tarefa, restabelecer a tag no commit
anotado.
Segue um roteiro demonstrando isso.
Roteiro
####################################################################
# Salve as alterações pendentes da reprovação que você está trabalhando
$ git gui
####################################################################
# Remova a tag de fix e anote o número SHA1 que será exibido pelo comando
# ao ser executado.
$ git tag --delete fix#
####################################################################
# Selecione o branch que você deseja trabalhar e siga o reteiro normal
# para tarefas excluidas criando tag e todos os outros procedimentos, e
# cumpra a tarefa reprovada desejada.
#...
#...
####################################################################
# Ao concluir a segunda tarefa reprovada, retorne a primeira tarefa
# reprovada que você estava trabalhando e crie a tag de volta onde ela
# estava anteriormente, usando o número exibido na exclusão
$ git tag -a fix# 14af5d8
# Coloque o número de reprovações no #.
#...
#...
# Continue a tarefa normalmente.
#
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
15
16
Git - Funcionamento e Workflow
Programação em Par na Mesma Tarefa
Ao se trabalhar com programação em par, o git será usado para garantir que os programadores estão trabalhado
com os mesmo arquivos e de modo consistente e colaborativo.
Para isso, nós iremos fazer o rebase durante o pull, o que exige que algumas considerações de segurança sejam
seguidas. Por exemplo, ao fazer branches experimentais, nunca os reutilize após ter feito um merge em seu
conteúdo.
Programação em par exige que um dos desenvolvedores assuma controle como Administrador do Branch. O
administrador do branch precisa executar algumas tarefas em mono usuário, como criar o branch e fazer rebase no
branch. Em casos como esse, os outros desenvolvedores não podem ter cópias do branch no computador local.
Roteiro
####################################################################
# Administrador do branch cria o branch e o publica no remote.
$ git checkout -b IDxxxx origin/Develop # Criando branch
$ git push origin IDxxxx
# Publicando o branch.
####################################################################
# Desenvolvedores acessam e trabalham normalmente no branch.
$ git checkout -b IDxxxx origin/IDxxxx # Criando branch
$ git gui
# Faça commits normalmente.
####################################################################
# Ao buscar atualizações no branch, usa-se um pull rebase.
$ git pull --rebase origin IDxxxx
# Buscando alterações.
####################################################################
# Envie alterações para o origin. (Sempre faça um pull antes de enviar)
$ git push origin IDxxxx
####################################################################
# Criando Branches Experimentais.
$ git checkout -b IDxxxxExp
# Crie o branch
$ git gui
# Faça commits para o branch
$ git rebase IDxxxx
# Atualize o seu branch experimental.
# Caso você queira confirmar o experimento no branch original da tarefa
$ git checkout IDxxxx
$ git merge IDxxxx
$ git pull --rebase origin IDxxxx
# Buscando alterações.
$ git push origin IDxxxx
# Enviando experimento.
# Remova o branch - Esse passo deve ser feito se você vai usar o branch
# ou não.
$ git branch -D IDxxxxExp
# NUNCA deixa de excluir o branch
# o MERGE!
####################################################################
# Para atualizar o branch com rebase, é necessário que todos os colaboradors
# façam push de suas alterações e apagem o branch local, com excessão do
# administrador do branch
$ git checkout master
$ git branch -D IDxxxx
# Aguarde o administrador do branch fazer o rebase
$ git checkout -b IDxxxx origin/IDxxxx
####################################################################
# Adminisrtrador do branch fazendo rebase do branch em mono usuário.
$ git pull --rebase origin Develop
$ git rebase origin/Develop
$ git push origin :IDxxxx
$ git push origin IDxxxx
####################################################################
#Finalizando Tarefa - Todos os usuário já deverão ter feito seus
Git - Funcionamento e Workflow - Git
# pushs e pulls nesse ponto.
$ git fetch
$ git cherry HEAD origin/Develop
$ git rebase origin/Develop
# Somente se hover atulizações
# Quando houver mais de um commit, faça squash.
$ git reset --soft origin/Develop
$ git commit –m
# Remova o branch do remote se você já tinha uma cópia no remote.
$ git push origin :IDxxxx
#Envie para o remote.
$ git push origin IDxxxx
Definição
Quando mais de um programador precisa trabalhar em uma tarefa, um deles terá de assumir a reponsabilidade de
administrador do branch. A primeiro passo que o administrador precisa tomar, é criar o branch e disponibilizá-lo
para os outros desenvolvedores por enviá-lo para o remote.
Atenção: Caso esse seja um branch reprovado, ou um branch que precisa de outras dependências, siga as regras de
criação de branch desses roteiros antes de fazer o push do branch para os outros desenvolvedores. Também, siga as
regras que fazem sentido, como por exemplo, usar o esquema de branches base e work no caso de um branch que
depende de outros.
####################################################################
# Administrador do branch cria o branch e o publica no remote.
$ git checkout -b IDxxxx origin/Develop # Criando branch
$ git push origin IDxxxx
# Publicando o branch.
Os outros desenvolvedores irão criar um branch local para eles após esse passo usando o nome dado ao branch pelo
administrador do branch.
# Desenvolvedores acessam e trabalham normalmente no branch.
$ git checkout -b IDxxxx origin/IDxxxx # Criando branch
$ git gui
# Faça commits normalmente.
Quando se deseja baixar commits que outros desenvolvedores já fizeram e já enviaram para o remote, use um pull -rebase. Isso servirá para baixar os commits e fazer rebase dos seus commits a fim de manter o histórico do branch
linear. Faça pulls constantemente, de preferencia após cada commit e antes de cada push.
# Ao buscar atualizações no branch, usa-se um pull rebase.
$ git pull --rebase origin IDxxxx
# Buscando alterações.
Use o comando push para enviar alterações para o origin, mas não se esqueça de usar um pull antes.
# Envie alterações para o origin. (Sempre faça um pull antes de enviar)
$ git push origin IDxxxx
Branches experimentais funcionam de modo similar quando se trabalha com programação em par. A única diferença
fundamental ao trabalhar em par é que após o merge, você deve descartar os branches experimentais
imediatamente.
#
$
$
$
#
$
$
$
$
#
#
$
Criando Branches Experimentais.
git checkout -b IDxxxxExp
# Crie o branch
git gui
# Faça commits para o branch
git rebase IDxxxx
# Atualize o seu branch experimental.
Caso você queira confirmar o experimento no branch original da tarefa
git checkout IDxxxx
git merge IDxxxx
git pull --rebase origin IDxxxx
# Buscando alterações.
git push origin IDxxxx
# Enviando experimento.
Remova o branch - Esse passo deve ser feito se você vai usar o branch
ou não.
git branch -D IDxxxxExp
# NUNCA deixa de excluir o branch
# o MERGE!
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
17
18
Git - Funcionamento e Workflow
Para fazer rebases que reflitam o que está no develop, é necessário que todos os programadores faça push das suas
alterações, e em seguida removam o branche local da tarefa, aguardando até que o administrador do branche faça
rebase no branche.
#
#
#
$
$
Para atualizar o branch com rebase, é necessário que todos os colaboradors
façam push de suas alterações e apagem o branch local, com excessão do
administrador do branch
git checkout master
git branch -D IDxxxx
Após o administrador do branch indicar que o rebase já foi feito, os outros programadores podem retornar a
trabalhar nos seus branches, criando novamente um branch local.
# Aguarde o administrador do branch fazer o rebase
$ git checkout -b IDxxxx origin/IDxxxx
Antes de fazer rebase, o administrador do branch tem que ter certeza que todos os outros usuários já fizeram push
de suas alterações. Em seguida, ele buscará essas alterações, fará rebase, removerá o branch remoto no origin e
colocará um novo lá. Como base nesse novo branch os desenvolvedores trabalharão.
#
$
$
$
$
Adminisrtrador do branch fazendo rebase do branch em mono usuário.
git pull --rebase origin Develop
git rebase origin/Develop
git push origin :IDxxxx
git push origin IDxxxx
Quando todos os desenvolvedores já tiverem feito push de seus commits, o administrador do branch pode encerrar
a tarefa. Ele verificará a necessidade de fazer rebase, e fará um squash para um melhor histórico. Após isso ele deve
remover o branch que está no servidor e deve subir um novo.
#Finalizando Tarefa - Todos os usuário já deverão ter feito seus
# pushs e pulls nesse ponto.
$ git fetch
$ git cherry HEAD origin/Develop
$ git rebase origin/Develop
# Somente se hover atulizações
# Quando houver mais de um commit, faça squash.
$ git reset --soft origin/Develop
$ git commit –m
# Remova o branch do remote se você já tinha uma cópia no remote.
$ git push origin :IDxxxx
#Envie para o remote.
$ git push origin IDxxxx
Comando Avulsos
Nessa seção segue uma lista de comandos que podem ser usados para algumas tarefas específicas no git.
Exibir divergências que há entre os seus branches e os branches do servidor.
$ git log --branches --not --remotes=origin
Marcar um arquivo para ser removido do seu branch no próximo commit.
$ git rm NomeDoArquivo
Criar uma Tag baseado no commit corrente.
$ git tag –a NomeTag –m “Mensagem Tag“
Revertendo um arquivo alterado ao estado que ele estava com o ultimo commit.
$ git checkout – MeuArquivo
Git - Funcionamento e Workflow - Git
Reverter todos os arquivos alterados para o ultimo commit.
$ git checkout -- .
Copiando um arquivo de um commit ou branch específico para o seu branch atual.
$ git checkout origin/OutroBranch Codigo/MeuArquivo.inf
Alterando a mensagem ou as alterações do ultimo commit.
$ git add Codigo/OutrosArquivos.inf # Esse comando é para confirmar alterações.
$ git commit --amend –m “Minha nova mensagem de commit“
Reverter todos os arquivos alterados para o ultimo commit.
$ git checkout -- .
Vendo os branchs locais com o branch ativo marcado.
$ git branch
Vendo todos os branchs
$ git branch –list
Copiando um commit individual para o seu histórico.
$ git cherry-pick 454F45
Renomeando arquivos rastreados
$ git mv Fontes/foo.vw Fontes/bar.vw
Removendo arquivos rastreados
$ git rm AppSrc/foobar.vw
Consultando logs locais em caso de problemas
$ git reflog
Eliminando conflito de chaves SSL em conexões SSH
$ rm –fr ~/.ssh
Restaurando origin quando excluído acidentalmente
$ git remote add origin ssh://usuario@servidor:922/opt/git/nome_do_projeto.git
$ git fetch
Analista
O trabalho do analista ao usar o git está muito relacianado ao workflow adotado pela atual para lidar com o
conteúdo do repositório. O analista, semelhante aos desenvolvedores, executará as tarefas citadas para os
desenvolvedores de maneira similar. Porém, há algumas tarefas que somente o analista faz. Essas são:





Criar repositórios
Gerar versões para o QA Tester
Aprovar branches para o Develop
Aprovando versão oficial e marcando com Tag
Criar branches de hotfix que unificam conteúdo de uma versão oficial com branches de tarefas feitas para
versões mais recentes por algum desenvolvedor.
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
19
20
Git - Funcionamento e Workflow
Criando Repositórios
Para criarmos um repositório é necessário se conectar ao remote que desejamos armezanar uma cópia de nosso
repositório.
$
$
$
$
$
$
ssh –p 22 atual@gitserver
cd /opt/git/
mkdir meurepositorio.git # Cria o diretório do repositório – use .git no final.
cd meurepositorio.git
git init --bare --shared # Inicia o repositório no remote
logout
Após ter criado o repositório no servidor, faça um clone desse repositório vazio para o seu computador.
cd /c/VDF7/
$ git clone ssh://atual@servergit:22/opt/git/meurepositorio.git MeuRepositorio
Após isso, configure o arquivo .gitignore e crie ou copie o conteúdo do projeto para dentro do diretório usado no seu
computador para o repositório.
Caso você apenas queira criar um repositório local sem se preocupar com o uso de um remote para armazenamento,
apenas use um simples git init dentro da pasta raiz do seu projeto.
Gerando Versão para o QA Tester
De tempos em tempos é necessário gerar uma versão que será usada pelo QA Tester. Essa versão basicamente deve
corresponder ao que já foi testado e aprovado (Develop) somado as novas tarefas que se deseja testar. O branch que
será usada para testes deve ser criado em um ciclo.
Criar
QA
Inserir
Tarefas
Destruir
QA
QA
Tester
O primeiro passo, criar o QA, deve ser executado apenas uma vez.
$ git fetch
$ git checkout –b QA origin/Develop
O segundo passo, inserir tarefas, deve ser feito uma vez para cada tarefa que se deseja inserir no QA.
# Tarefas locais exigem apenas um simples checkout.
Git - Funcionamento e Workflow - Git
$
$
#
$
$
$
$
#
$
git checkout –b IDxxxx origin/IDxxxx
git rebase origin/Develop
Não é necessário deletar o branch do remote se a tarefa é apenas local.
git push origin :IDxxxx
git push origin IDxxxx
git checkout QA
git merge IDxxxx
Delete a cópia do branch local se houver uma cópia remota.
git branch –D IDxxxx
O terceiro passso, requer que o analiste compile o programa e envie para o setor de QA. O ultimo passo, destruir
QA, envolve simplesmente destruir o branch criado.
$ git checkout master
$ git branch –D QA
Aprovando Branches para o Develop
O Develop possue os commits que foram aprovados pela a analise e pelo QA Tester. Quando ambos os passos
indicam que a alteração está saudável, é necessário que o analista portanto envie essas alterações para o Develop.
Atenção: Tome cuidado ao fazer rebases pois eles serão feitos a partir do develop local. O Develop remote só será
atualizado quando todos os branches já tiverem feito merge.
$
$
$
$
#
$
#
#
$
$
$
$
$
$
$
#
$
git fetch
git gui # Vá no Menu “Remoto” e use a opção “Limpar de -> origin”
git checkout Develop
git pull origin Develop
-- Inicio da parte repetitiva a cada tarefa a ser aprovado
git branch --list –r | grep IDxxxx
ATENÇÃO – Apenas delete o branch local se o commando anterior indicar que existe um
remote.
git branch –D IDxxxx
git checkout –b IDxxxx origin/IDxxxx
git rebase Develop
git checkout Develop
git merge IDxxxx
git branch –D IDxxxx
git push origin :IDxxxx
-- Fim da parte repetitiva da inclusão de tarefas no Develop
git push origin Develop
Aprovando Versão oficial e marcando com Tag
Conforme já bem explicado, a versão oficial que será distribuída sempre está no master. Assim, quando o conteúdo
de Develop possuem os recursos requeridos para uma nova versão, o branch master deve ser atualizado para o
ponto onde Develop aponta. Assim, aprove todos os branches que você precisa aprovar para Develop primeiro.
Então, comece atualizar o branch master.
Uma leve diferença nesse caso é o uso de tags. Tags, de maneira similar a branches, servem para marcar
determinado commit como tendo certa relevância no histórico do conteúdo do repositório. A diferença de tags para
branches é que elas não devem ser usadas como branches, que mudam de posição, são atualizados para commits
mais a frente no histórico e podem ser usados como ambiente para desenvolvimento.
Atenção: Ao executar esse passo, se conclui que o Develop já está exatamente como você deseja a nova versão.
$
$
$
$
$
$
git
git
git
git
git
git
fetch
checkout Develop
pull origin Develop
push origin Develop
checkout master
pull origin master
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
21
22
Git - Funcionamento e Workflow
$
$
$
$
$
git
git
git
git
git
rebase Develop
merge Develop
push origin master
tag –a v5.00b –m “Versao 5.00b“
push origin refs/tags/v5.00b
Criando Branches de Hotfix para a Ultima Versão Oficial
Quando se deseja criar um hotfix, geralmente você se deparará com dois casos.


Você deseja usar o código da ultima versão mais algumas alterações que você pretende gerar.
Você deseja usar o código da ultima versão mais algum commit que foi feito recentemente para alguma
tarefa baseada no Develop.
O primeiro caso é mais simples, uma vez que o conteúdo que você deseja acrescentar a versão oficial ainda não
existe. Nesse caso, você apenas terá de criar um branch que se baseie na versão oficial e nesse branch você fará os
commits que desejar para resolver o problema. Segue exemplo abaixo.
$ git checkout –b HDxxxxx v5.00a
$ git gui
Após ter feito todas as alterações, basta compilar o código e salvar o branch no remote.
O segundo caso porém é mais interessante porque ele envolve pegar o conteúdo de uma tarefa que pode estar vários
commits a frente da ultima versão oficial, em um caso como esse, tentar fazer um merge simples, como algumas
vezes se faz para unificar conteúdos existentes, acabaria trazendo parte conteúdo de outros commits no histórico
que você não deseja.
Para resolver esse problema, você precisa fazer uma cópia do commit que você deseja usar para o hotfix. Quando se
faz uma cópia do commit apenas aquele commit é copiado para o novo branch, deixando os ancestrais sem
nenhuma influência sobre a copia. Assim, é como se nós tivéssemos um novo commit nesse branch.
$ git checkout –b HDxxxxx v5.00a
$ git cherry-pick origin/IDxxxx
Resolução de Problemas em Commits com resets errados
Em alguns casos durante a execução de reprovações, o commit final entregado pelo desenvolvedor incluía um grupo
de alteraçãos que não faziam parte das mudanças realizadas pelo desenvolvedor. Muitos desses problemas eram
causados devido a resets da tarefa com o Develop, visto que em reprovações a tarefa tem que ser resetada para tag.
Uma outra causa comum era o uso do rebase com a reprovação, o que atualizava o branch, mas não atualizava a tag.
Nesse caso, ao fazer o reset com a tag, o commit final acabava incluindo uma curva de alteração que abrangia mais
conteúdo do que o alterado.
Em casos onde isso acontecer há algumas possíveis soluções para o problema. De maneira resumida podemos dizer
que o apropriado seria tenta resolver o problema na seguinte ordem:


Investigar: É necessário tentar entender o que causou o problema em primeiro lugar. O comando git
reflog pode ser usado para prover um roteiro de operações locais feitas pelo usuário do git.
Tentar achar o ultimo commit válido antes do rebase ou reset. Quanto nós fazemos um rebase ou um
reset, uma outra versão das alterações é criada. No entanto, a versão anterior que ainda estava válida
permanece no repositório sem ser referenciado por nenhum branch. Para pequisá-la, o comando git lostfound pode ser de ajuda. Esse comando exibirá uma lista de commits que não estão mais sendo
referenciados no repositório, junto com a descrição do commit.
o Procure pelo ultimo commit que você fez para essa tarefa,
o Faça um checkout para ele e verifique como ele está.
Git - Funcionamento e Workflow - Git
Se esse commit estiver correto, apague o seu branch de reprovação e crie um novo branch de
reprovação baseado nesse commit.
o Em casos de reprovação, coloque a tag de reprovação no primeiro commit que não pertence a
reprovação que você está trabalhando.
o Faça o processo de rebase e reset novamente. (Em casos de reprovação é reset e rebase.)
Tentar anular os arquivos indesejados. Caso seja muito difícil achar o ultimo commit válido com git
lost-found, e os arquivos adicionais não estejam afetando o conteúdo dos arquivos que você trabalhou,
tente reverter essas alterações indesejadas do seu commit.
o Use git checkout HEAD~1 NomeDoArquivo para cada arquivo indesejado, indicando que você quer
o arquivo no estado que ele estava antes desse commit ser gerado. Isso fará com que a alteração
seja anulada.
o Corrija manualmente alterações indesejadas que estão mescladas nos arquivos com o conteúdo da
sua tarefa.
o Confirme tudo com um único git commit --amend.
o

Esse simples passos serão o suficiente para resolver a grande maioria das situações. No entanto, tenha muita
atenção ao efetuar cada um desses passos. As situações podem diferir tanto, que se requer mais discernimento do
analista durante tais operações.
Aproveite
A Atual Sistemas procura utilizar o que há de melhor tanto em ferramentas como em habilidades pessoais.
Acreditamos que a colaboração mútua é extremante vital para que a criação de produtos sólidos ocorra. Entetanto,
nesse respeito, o valor humano é muito mais importante que um sistema de gerenciamento de versões.
Acreditamos que esse manual lhes beneficiará e lhes ajudará a ter uma melhor integração com a equipe e melhor
praticidade ao lidar com tarefas diárias.
Estamos abertos a sugestões.
© 2011Atual Sistemas. Todos os direitos Reservados.
Ao fazer uso desse material você está automaticamente concordando com o termo de licença na página 3.
23