- Configuração
- Arquivos de Configuração
- Criar
- Mudanças Locais
- Pesquisa
- Histórico de Commits
- Ramos e Tags
- Atualizar e Publicar
- Mesclar e Reconstruir
- Desfazer
- Git Flow
$ git config --list
$ git config --local --list
$ git config --global --list
$ git config --system --list
$ git config --global user.name “[nome sobrenome]”
$ git config --global user.email “[email-válido]”
$ git config --global color.ui auto
$ git config --global core.editor vi
<repo>/.git/config
~/.gitconfig
/etc/gitconfig
Existem duas maneiras:
Via SSH
$ git clone ssh://usuario@dominio.com/repo.git
Via HTTP
$ git clone http://dominio.com/usuario/repo.git
$ git init
$ git init <diretorio>
$ git status
$ git diff
$ git diff <arquivo>
$ git add .
$ git add -p <arquivo>
$ git add <nome-do-arquivo-1> <nome-do-arquivo-2>
$ git commit -a
$ git commit
$ git commit -m 'mensagem aqui'
$ git commit -am 'mensagem aqui'
$ git commit --date="`date --date='n day ago'`" -am "<Mensagem do commit aqui>"
Não emenda os commits publicados!
$ git commit -a --amend
Não emenda os commits publicados!
$ git commit --amend --no-edit
GIT_COMMITTER_DATE="data" git commit --amend
$ git commit --amend --date="data"
$ git stash
$ git checkout ramo2
$ git stash pop
$ git stash apply
- O {numero-do-stash} pode ser obtido de
git stash list
$ git stash apply stash@{numero-do-stash}
$ git stash drop
$ git grep "Olá"
$ git grep "Olá" v2.5
$ git log -S'palavra-chave'
$ git log -S'palavra-chave' --pickaxe-regex
Mostrar todos os commits, começando pelo mais novo (mostrará o hash, informações do autor, data do commit e título do commit):
$ git log
$ git log --oneline
$ git log --author="nome-do-usuario"
$ git log -p <arquivo>
$ git log --oneline <origin/master>..<remoto/master> --left-right
$ git blame <arquivo>
$ git reflog show
$ git reflog delete
Renomear Index.txt para Index.html
$ git mv Index.txt Index.html
$ git branch
$ git branch -a
$ git branch -r
$ git checkout <ramo>
$ git checkout <ramo> -- <arquivo>
$ git checkout -b <ramo>
$ git checkout -b <ramo_novo> <ramo_existente>
$ git checkout <hash-do-commit> -b <novo_nome_do_ramo>
$ git branch <novo-ramo>
$ git branch --track <ramo-novo> <ramo-remoto>
$ git branch -d <ramo>
$ git branch -m <nome_do_novo_ramo>
Você perderá as alterações não mescladas!
$ git branch -D <ramo>
$ git tag <nome-da-tag>
$ git tag -a <nome-da-tag>
$ git tag <nome-da-tag> -am 'mensagem aqui'
$ git tag
Listar todas as tags com suas mensagens (mensagem de tag ou mensagem de commit se a tag não tiver mensagem):
$ git tag -n
$ git remote -v
$ git remote show <remoto>
$ git remote add <remoto> <url>
$ git remote rename <remoto> <novo_remoto>
$ git remote rm <remoto>
Nota: git remote rm
não exclui o repositório remoto do servidor. Ele simplesmente remove o remoto e suas referências de seu repositório local.
$ git fetch <remoto>
$ git remote pull <remoto> <url>
$ git pull origin master
$ git pull --rebase <remoto> <ramo>
$ git push remote <remoto> <ramo>
$ git push <remoto> :<ramo> (desde o Git v1.5.0)
OU
$ git push <remoto> --delete <ramo> (desde o Git v1.7.0)
$ git push --tags
$ git config --global merge.tool meld
$ git mergetool
$ git merge <ramo>
Não faz reconstrução de commit publicado!
$ git rebase <ramo>
$ git rebase --abort
$ git rebase --continue
Usar seu editor para resolver manualmente os conflitos e (depois de resolver) marcar o arquivo como resolvido:
$ git add <arquivo-resolvido>
$ git rm <arquivo-resolvido>
$ git rebase -i <commit-just-before-first>
Agora substitua isso:
pick <commit_id>
pick <commit_id2>
pick <commit_id3>
para isso:
pick <commit_id>
squash <commit_id2>
squash <commit_id3>
$ git reset --hard HEAD
$ git reset HEAD
$ git checkout HEAD <arquivo>
$ git revert <commit>
$ git reset --hard <commit>
$ git reset --hard <remoto/ramo> e.g., upstream/master, origin/minha-recurso
Redefinir o ponteiro HEAD
para um commit anterior e preservar todas as alterações como alterações não preparadas (unstaged changes):
$ git reset <commit>
Redefinir o ponteiro HEAD
para um commit anterior e preservar as alterações locais não confirmadas (committed):
$ git reset --keep <commit>
$ git rm -r --cached .
$ git add .
$ git commit -m "remove arquivo xyz"
Improved Git-flow
Você precisa de uma instalação git funcional como pré-requisito. O Git flow funciona em OSX, Linux e Windows.
$ brew install git-flow-avh
$ port install git-flow
$ sudo apt-get install git-flow
$ wget -q -O - --no-check-certificate https://raw.githubusercontent.com/petervanderdoes/gitflow/develop/contrib/gitflow-installer.sh install <state> | bash
O Git flow precisa ser inicializado para personalizar a configuração do projeto. Comece a usar o git-flow inicializando-o dentro de um repositório git existente:
Você terá que responder a algumas perguntas sobre as convenções de nomenclatura de seus ramos. É recomendável usar os valores padrão.
git flow init
OU
git flow init -d
Desenvolver novos recursos para os próximos lançamentos. Normalmente existe apenas em repositórios de desenvolvedores.
git flow feature start MEURECURSO
git flow feature finish MEURECURSO
Você está desenvolvendo um recurso em colaboração? Publique um recurso no servidor remoto para que possa ser usado por outros usuários.
git flow feature publish MEURECURSO
git flow feature pull origin MEURECURSO
git flow feature track MEURECURSO
Apoio na preparação de um novo lançamento de produção. Permitir pequenas correções de bugs e preparar metadados para um lançamento
Para iniciar uma versão, use o comando git flow release
. Ele cria um ramo de lançamento criado a partir do ramo 'desenvolver'. Opcionalmente, você pode fornecer um hash sha-1 de commit [BASE] para iniciar o lançamento. O commit deve estar no ramo 'desenvolver'.
git flow release start LANÇAMENTO [BASE]
É aconselhável publicar o ramo de lançamento depois de criá-lo para permitir commits de lançamento por outros desenvolvedores. Faça de forma semelhante à publicação de recursos com o comando:
git flow release publish LANÇAMENTO
git flow release finish LANÇAMENTO
As correções rápidas (hotfixes) surgem da necessidade de agir imediatamente em um estado indesejado de uma versão de produção ao vivo. Pode ser ramificado a partir da tag correspondente no ramo master que marca a versão de produção.
$ git flow hotfix start VERSÃO [NOMEDABASE]
O argumento da versão marca o novo nome de lançamento da correção rápida. Opcionalmente, você pode especificar um nome de base para começar.
Ao terminar uma correção rápida, ele é mesclado de volta ao desenvolver e ao master. Além disso, a mesclagem do master é marcada com a versão da correção rápida
git flow hotfix finish VERSÃO