-
1. ComeƧando
- 1.1 Sobre Controle de Versão
- 1.2 Uma Breve História do Git
- 1.3 O BƔsico do Git
- 1.4 A Linha de Comando
- 1.5 Instalar o Git
- 1.6 Configuração Inicial do Git
- 1.7 Pedindo Ajuda
- 1.8 Resumo
-
2. NoƧƵes BƔsicas do Git
- 2.1 Obtendo um Repositório Git
- 2.2 Recording Changes to the Repository
- 2.3 Veja o Histórico de Confirmação
- 2.4 Desfazer Coisas
- 2.5 Working with Remotes
- 2.6 Tagging
- 2.7 Alias Git
- 2.8 Resumo
-
3. Ramificação do Git
- 3.1 Branches in a Nutshell
- 3.2 Basic Branching and Merging
- 3.3 Branch Management
- 3.4 Branching Workflows
- 3.5 Remote Branches
- 3.6 Rebasing
- 3.7 Resume
-
4. Git no Servidor
- 4.1 The Protocols
- 4.2 Getting Git on a Server
- 4.3 Generating Your SSH Public Key
- 4.4 Setting Up the Server
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 OpƧƵes Hospedadas de Terceiros
- 4.10 Resumo
-
5. Git DistribuĆdo
- 5.1 Distributed Workflows
- 5.2 Contributing to a Project
- 5.3 Maintaining a Project
- 5.4 Resumo
-
6. GitHub
-
7. Ferramentas do Git
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Resumo
-
8. Personalizar o Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Resumo
-
9. O Git e Outros Sistemas
- 9.1 O Git como Cliente
- 9.2 Migrar para o Git
- 9.3 Resumo
-
10. Internos do Git
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Resumo
-
A1. Appendix A: Git em Outros Ambientes
- A1.1 Graphical Interfaces
- A1.2 Git no Visual Studio
- A1.3 Git no Eclipse
- A1.4 Git in Bash
- A1.5 Git no Zsh
- A1.6 Git no Powershell
- A1.7 Resumo
-
A2. Appendix B: Incorporar o Git nos teus Aplicativos
- A2.1 Linha de comando Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
2.4 NoƧƵes BƔsicas do Git - Desfazer Coisas
Desfazer Coisas
A qualquer momento tu podes querer desfazer algo. Aqui vamos analisar algumas ferramentas bĆ”sicas usadas para desfazer as alteraƧƵes que tu fizeste. Te, cuidado, Ć s vezes nĆ£o Ć© possĆvel recuperar algo depois de o ter desfeito. Esta Ć© uma das poucas Ć”reas em que a Git pode perder parte do seu trabalho se cometer um erro.
Um dos itens comuns ocorre quando cometes muito cedo e, possivelmente esqueçes de adicionar alguns arquivos ou confundes a tua mensagem de confirmação.
Se quiseres refazer esta confirmação, faz as alterações adicionais que te esqueceste, coloca-as e confirma novamente usando a opção --amend
:
$ git commit --amend
Este comando usa a tua Ôrea de preparação para confirmação. Se não fizeste alterações desde a tua última confirmação (por exemplo, executas este comando logo após a confirmação anterior), o instantâneo ficarÔ exatamente o mesmo, e a única coisa que tu mudarÔs é a mensagem de confirmação.
O mesmo editor de confirmação serĆ” iniciado, mas tu verĆ”s que jĆ” inclui a mensagem da tua confirmação anterior. Podes editar a mensagem como de costume e a tua confirmação anterior serĆ” substituĆda.
Por exemplo, se confirmares e depois perceberes que te esqueceste de preparar as alterações num arquivo que tu querias incluir nesta confirmação, tu podes fazer o seguinte:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
No final, acabarĆ”s com apenas uma confirmaçãoāāāa segunda confirmação substitui o resultado da primeira.
à importante entender que, quando estÔs a modificar a tua última confirmação, não estÔs tanto a arranjar-la como a substituir inteiramente com uma nova confirmação melhorada que empurra a antiga confirmação fora do caminho e coloca a nova confirmação no seu lugar. Efectivamente, é como se a confirmação anterior nunca acontecesse, e não aparecerÔ no teu histórico do repositório.
O valor óbvio para comprometer confirmaƧƵes Ć© fazer melhorias menores para a tua Ćŗltima confirmação, sem aglomerar o histórico do repositório com as mensagens de confirmação do formulĆ”rio, āOops, esqueci de adicionar um arquivoā ou āDarn, a corrigir um erro de digitação na Ćŗltima confirmaçãoā.
Desfazer um Arquivo Preparado
As próximas duas seções demonstram como lidar com as mudanças na tua Ôrea de preparação e seu diretório de trabalho.
Felizmente, o comando que tu usas para determinar o estado destas duas Ɣreas tambƩm lembra como desfazer as mudanƧas neles.
Por exemplo, supƵe que tenhas mudado dois arquivos e que as confirmaƧƵes como duas mudanƧas separadas, mas acidentalmente digitaste git add *
e preparaste os dois.
Como podes obter um deles fora da Ôrea de preparação?
O comando git status
lembra-te como:
$ git add *
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md
Logo abaixo do texto āChanges to be committedā, podes ver que diz que usas git reset HEAD <file>...
para desfazer a preparação.
Portanto, vamos usar os conselhos para desfazer a preparação do arquivo CONTRIBUTING.md
:
$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
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: CONTRIBUTING.md
O comando Ć© um pouco estranho, mas funciona.
O arquivo CONTRIBUTING.md
é modificado e, novamente, não estÔ pronto.
Embora o git reset
seja um comando perigoso se tu o chamares com --hard
.
No entanto, no cenÔrio descrito acima, o arquivo no teu diretório de trabalho não é tocado, por isso é relativamente seguro.
Por enquanto, a Ćŗnica coisa que precisas de saber sobre o comando git reset
é esta invocação mÔgica.
Entraremos em mais detalhes sobre o que Ć© reiniciar
e como dominƔ-lo para que ele faƧa coisas realmente interessantes em <ch07-git-tools#_git_reset>>..
Desfazer um arquivo modificado
E se tu perceberes que não desejas manter as tuas alterações no arquivo CONTRIBUTING.md
?
Como podes facilmente restaura-loāāāreverte-o de volta ao que ele parecia quando quando o tu o confirmaste pela Ćŗltima vez (ou inicialmente clonado, ou no entanto entraste no teu diretório de trabalho)?
Por sorte, git status
diz-te como fazer isto tambƩm.
No Ćŗltimo exemplo de saĆda, a Ć”rea nĆ£o identificada parece com isto:
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: CONTRIBUTING.md
Ele diz muito explicitamente como descartar as mudanƧas que tu fizeste. Vamos fazer o que ele diz:
$ git checkout -- CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Agora podes verificar que as mudanƧas foram revertidas.
Ć importante entender que git checkout -- <file>
Ć© um comando perigoso.
Todas as mudanƧas que izeste neste arquivo desapareceramāāāo Git apenas copiou outro arquivo sobre ele.
Nunca uses este comando a menos que saibas absolutamente que não desejas o arquivo.
Se tu quiseres manter as mudanças que fizeste neste arquivo, mas ainda precisas sair do caminho por agora, iremos falar de como ocultar e ramificar em Ramificação do Git; estas são, geralmente as melhores maneiras de ir.
Lembra-te, qualquer coisa que seja committed no Git quase sempre pode ser recuperada.
Mesmo os compromissos que estavam em ramos que foram excluĆdos ou os compromissos que foram substituĆdos por um compromisso --amend
podem ser recuperados (consulta Data Recovery para recuperação de dados).
No entanto, qualquer coisa que tu perderes que nunca foi cometido provavelmente nunca mais serĆ” vista novamente.