O conceito do "index" é o que mais diferencia o GIT do SVN (e outros SCVs).
"index" contém as alterações que gerarão uma revisão, não os arquivos. Isso só é estranho por causa do comando para adicionar alterações no index.
git add file.py
: Adiciona as alterações do arquivo no "index".
(Se o arquivo nunca teve uma revisão, o conteúdo inteiro do arquivo é adicionado.)
git commit
: Transforma o index em uma revisão e guarda no repositório local.
(git commit -a
gera um index com todas as alterações e gera uma revisão).
git push
: Envia as revisões locais e envia para um servidor SSH/HTTPS/GIT.
Até aqui, SVN parece melhor por ser mais simples: mandar alterações para o servidor é feito
num único passo (svn commit
) enquanto o GIT requer 3 (git add
,
git commit
, git push
).
git add -p file.py
Permite selecionar quais alterações irão para o index.
(Excelente para aqueles momentos de "fiz duas alterações de dois issues diferentes.")
@@ -485,7 +485,7 @@ class GerenciadorForm(TestCase):
"""
curso = EntidadeCursoCurriculoGraduacao.objects.get(pk=1001)
- ano_periodo = AnoPeriodoGraduacao.objects.get(pk=1)
+ ano_periodo = AnoPeriodoGraduacao.objects.get(pk=1001)
# Populando o field com None.
dados = {'pessoa_fisica': u'5',
Stage this hunk [y,n,q,a,d,/,e,?]?
E ainda é útil para aquela última revisada antes de gerar uma revisão.
git add
e git reset
Como mencioando anteriormente, git add
adiciona as modificações no index.
git reset
remove do index. Só isso.
git checkout
Faz a mesma coisa que o SVN checkout -- recupera um arquivo do repositório.
Só é preciso lembrar que no GIT, o repositório é local. Portanto irá trazer de volta a última versão que estiver no repositório.
git stash
git stash pop
reaplica as alterações.git log
svn log
, mas não precisa de less e faz stream do conteúdo.
git log --raw
: mostra os arquivos alterados dentro da revisão.git log -p
: mostra as alterações dentro da revisão.git log -p [arquivo]
: mostra a alteração no arquivo em cada revisão.git commit --amend
Permite alterar um commit depois de feito.
git bisect
Percorre os commits em forma de árvore binária, para procura de "onde esse bug foi introduzido?"
Como o repositório é local, vários commits podem ser feitos sem serem enviados ao servidor.
"Meu branch tá todo quebrado, mas ninguém vai ver isso!"
As ferrametnas de code review para GIT são geralmetne melhores de serem usadas de que as de outros SCVs.
Bem legal, mas...
GIT-SVN é uma módulo do GIT que cria e mantém um repositório local GIT usando um servidor SVN.
Alguns comandos mudam.
(... pelo menos aqueles ligados ao acesso do servidor.)
git add
continua igual (-p
também continua).git commit
continua igual.
git svn clone http://blahblahblah.com/blah/blah/branch/blah
A yoshi/google/alias/forms.py
A yoshi/urls.py
A requirement.txt
W: +empty_dir: yoshi/autenticacao/esqueceu_senha/fixtures
W: +empty_dir: yoshi/autenticacao/login/templates/busca
W: +empty_dir: yoshi/core/busca/templates
W: +empty_dir: yoshi/core/geral/templates/search
W: +empty_dir: yoshi/templates/agenda/busca
r4531 = b3667a084e7d69080e0f1c7235b94dab9cb5a326 (refs/remotes/git-svn)
A yoshi/financeiro/cadastro_beneficio/__init__.py
A yoshi/financeiro/cadastro_beneficio/models.py
A yoshi/financeiro/__init__.py
r4532 = 65ce3a96d11c13d0be24836af3a276561885118c (refs/remotes/git-svn)
M yoshi/settings.py
M yoshi/modulos.py
É clonado o repositório e todos os commits.
Portanto, não se assuste.
git svn rebase
Na verdade, busca commits existentes no servidor que não estejam no repositório local e aplica antes dos commits locais.
git svn dcommit
git add
alterações.git svn rebase
para verificar se há alterações upstream.git commit
.git svn dcommit
."Ok, eu posso editar o último commit com git commit --amend
. Mas e se o
commit errado não for o último?"
git rebase -i HEAD~[número de revisões a voltar]
git commit --amend
git rebase --continue