On Github josenaldo / workshop-git
Pouca autonomia
Trabalho privado limitado
Risco de perda de dados
Autonomia
RApidez
Trabalho privado
Confiabilidade
$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.comRelembrando, você só precisará fazer isso uma vez caso passe a opção --global, pois o Git sempre usará essa informação para qualquer coisa que você faça nesse sistema. Caso você queira sobrepor estas com um nome ou endereço de e-mail diferentes para projetos específicos, você pode executar o comando sem a opção --global quando estiver no próprio projeto.
$ git config --global core.editor emacs
$ git config --global core.editor "atom --wait"
$ git config --global core.editor "subl -n -w"
$ git config --global core.editor "mate -w"
$ git config --global merge.tool vimdiff
Under Configure the program used for comparing different revisions of files, select External and type the following into the box.
WinMergeU /r /e /x /u /wl %base %mine
Next, select Merge Tool (on the left). Again, select External and type the following.
WinMergeU /e /u %merged
Now, wherever TortoiseMerge use to show up, you should see WinMerge instead
$ git config --list user.name=Scott Chacon user.email=schacon@gmail.com color.status=auto color.branch=auto color.interactive=auto color.diff=auto ...
$ git config user.name Scott Chacon
$ git help <verb> $ git <verb> --help $ man git-<verb>
$ git init
Qual é a diferença entre “git init” e “git init --bare”?
Isso cria um novo subdiretório chamado .git que contem todos os arquivos necessários de seu repositório — um esqueleto de repositório Git. Neste ponto, nada em seu projeto é monitorado.
Com o comando git init --bare você está criando um repositório que é pushable. Geralmente os repositórios bare são criados no servidor e são considerados repositórios para armazenamento, em contraste aos repositórios que vão nas máquinas dos desenvolvedores que seriam os repositórios de desenvolvimento, criados com o comando git init (sem o --bare).
Apesar do GIT ser um sistema de controle de versionamento distribuído, é muito comum que exista um repositório central que facilite a troca de informações entre os desenvolvedores, evitando a necessidade que os computadores dos desenvolvedores se comuniquem diretamente entre si.
Ao incializar um repositório como bare não será permitido editar arquivos (git add) e commitar mudanças (git commit), já que o mesmo não possui uma working tree. Você deve atualizar um repositório bare utilizando git push.
Você inicializa um repositório como bare quando deseja que ele seja o respositório central.
$ git clone https://github.com/josenaldo/workshop-git.git
$ git clone git@github.com:josenaldo/workshop-git.git
$ git status On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) README.md nothing added to commit but untracked files present (use "git add" to track)
$ git add README.md $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: README.md
$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: index.html Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: index.html Untracked files: (use "git add <file>..." to include in what will be committed) app.js
Configurar um arquivo .gitignore antes de começar a trabalhar é uma boa ideia.
$ git diff diff --git a/index.html b/index.html index 2c78d33..544c542 100644 --- a/index.html +++ b/index.html @@ -16,11 +16,11 @@ </head> <body> - + <h1>Olha o titulo adicionado! + <h2>Outro só pra variar</h2> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> - <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> - - <script src="https://ajax.googleapis.com/ajax/libs/angularjs//angular.js"></script> + <script src="https://ajax.googleapis.com/ajax/libs/angularjs//angular.js"></script> </body> </html> warning: LF will be replaced by CRLF in index.html. The file will have its original line endings in your working directory.
$ git commit -m "Comita com mensagem"
git commit -a -m 'Adiciona e comita com mensagem'
$ git rm arquivo $ git rm --cached readme.txt $ git rm log/\*.log
$ git mv arquivo_origem arquivo_destino
$ git log commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <schacon@gee-mail.com> Date: Mon Mar 17 21:52:11 2008 -0700 changed the verison number commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 16:40:33 2008 -0700 removed unnecessary test code ...
$ git commit --amend
$ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend
Você adicionou arquivos (git add) e quer remover algum deles?
$ git add . $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: README.txt # modified: benchmarks.rb
$ git reset HEAD benchmarks.rb benchmarks.rb: locally modified $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: README.txt # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: benchmarks.rb #
Alterou um arquivo e quer desfazer a alteração?
# Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: benchmarks.rb #
$ git checkout -- benchmarks.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: README.txt #
$ git remote -v bakkdoor git://github.com/bakkdoor/grit.git cho45 git://github.com/cho45/grit.git defunkt git://github.com/defunkt/grit.git koke git://github.com/koke/grit.git origin git@github.com:mojombo/grit.git
$ git remote origin $ git remote add pb git://github.com/paulboone/ticgit.git $ git remote -v origin git://github.com/schacon/ticgit.git pb git://github.com/paulboone/ticgit.git
$ git fetch [nome-remoto]
Comando que vai até o projeto remoto e pega todos os dados que você ainda não tem.Ele não faz o merge automaticamente com o seus dados ou modifica o que você está trabalhando atualmente.
$ git pull
Faz um fetch e, depois, faz um merge de um branch remoto no seu branch atual.
$ git push [nome-remoto] [branch]
Envia o trabalho para o servidor
$ git remote show origin * remote origin URL: git://github.com/schacon/ticgit.git Remote branch merged with 'git pull' while on branch master master Tracked remote branches master ticgit
$ git remote rename pb paul $ git remote origin paul
$ git remote rm paul $ git remote origin
$ git tag v0.1 v1.3
$ git tag -l 'v1.4.2.*' v1.4.2.1 v1.4.2.2 v1.4.2.3 v1.4.2.4
é um ponteiro para um commit específico
são armazenadas como objetos inteiros no banco de dados do Git
$ git tag -a v1.4 -m 'my version 1.4' $ git tag v0.1 v1.3 v1.4
Você pode ver os dados da tag junto com o commit que foi taggeado usando o comando git show.
$ git tag v1.4-lw $ git tag v0.1 v1.3 v1.4 v1.4-lw v1.5
se você executar git show na tag, você não verá nenhuma informação extra.
$ git tag -v v1.4.2.1 object 883653babd8ee7ea23e6a5c392bb739348b1eb61 type commit tag v1.4.2.1 tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700 GIT 1.4.2.1 Minor fixes since 1.4.2, including git-mv and git-http with alternates. gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A gpg: Good signature from "Junio C Hamano <junkio@cox.net>" gpg: aka "[jpeg image of size 1513]" Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A
$ git log --pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment' a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support 0d52aaab4479697da7686c15f77a3d64d9165190 one more thing 6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment' 0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function 4682c3261057305bdd616e23b64b0857d832627b added a todo file 166ae0c4d3f420721acbb115cc33848dfcc2121a started write support 9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile 964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo 8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
$ git tag -a v1.2 9fceb02
$ git push origin --tags Counting objects: 50, done. Compressing objects: 100% (38/38), done. Writing objects: 100% (44/44), 4.56 KiB, done. Total 44 (delta 18), reused 8 (delta 1) To git@github.com:schacon/simplegit.git * [new tag] v0.1 -> v0.1 * [new tag] v1.2 -> v1.2 * [new tag] v1.4 -> v1.4 * [new tag] v1.4-lw -> v1.4-lw * [new tag] v1.5 -> v1.5
Você recebe apenas uma referência. É necessário fazer um merge ou checkout.
$ git checkout experiment $ git rebase master First, rewinding head to replay your work on top of it... Applying: added staged command