Você acidentalmente apagou uma branch chamada ajuste-layout que tinha commits importantes. Recupere o conteúdo dessa branch com base no histórico local.
-
Crie e altere para a branch
ajuste-layout -
Faça 2 commits
-
Volte para
maine execute:git branch -D ajuste-layout
-
Use
git reflogpara identificar o último HEAD que estava emajuste-layout -
Crie novamente a branch com:
git checkout -b ajuste-layout <hash>
Você percebeu que algum commit entre v1.0 e v1.6 quebrou a funcionalidade de validação. Use git bisect para identificar qual commit introduziu o erro.
-
Em um novo repositório, crie 6 commits sequenciais
- No 4º commit, adicione um erro intencional, como
echo "valor errado" > config.txt
- No 4º commit, adicione um erro intencional, como
-
Em
HEAD, configure:git bisect start git bisect bad git bisect good HEAD~5
-
Execute para encontrar automatica o erro:
git bisect run bash -c 'grep -q "errado" config.txt && exit 1 || exit 0' -
Finalize com
git bisect reset
Você está desenvolvendo uma nova funcionalidade, mas precisa trocar para a branch main urgentemente para corrigir um bug. Guarde seu progresso com stash, mude de contexto, e depois retome de onde parou.
-
Crie a branch
nova-funcionalidade -
Edite e salve 2 arquivos com modificações (sem comitar)
-
Execute:
git stash save "wip: nova funcionalidade" git checkout main -
Faça um commit fictício em
main -
Volte para a branch e recupere o progresso:
git checkout nova-funcionalidade git stash list git stash apply stash@{0}
Sua branch main contém dois commits: um com uma nova feature e outro com um hotfix. Você precisa aplicar apenas o hotfix na branch release/1.0.
-
Crie uma nova branch:
git checkout -b release/1.0
E volte para main.
-
Em
main, crie dois commits:- Commit 1:
"feature: novo componente" - Commit 2:
"fix: corrige bug no botão"
- Commit 1:
-
Aplique somente o segundo commit com:
git cherry-pick <hash-do-hotfix>
-
Verifique o histórico com
git log --oneline
Você executou um git reset --hard por engano e perdeu commits que ainda não haviam sido pushados.
-
Em uma branch chamada
nova-pagina, crie 2 commits importantes. -
Execute:
git reset --hard HEAD~2
-
Simule o desespero 🤯.
-
Use
git reflogpara localizar os hashes antigos. -
Recupere o commit com:
git checkout -b recuperado HEAD@{n}
Você deverá restaurar a branch exatamente no ponto em que estava antes do reset.
Você automatizou o git bisect run, mas o script retorna códigos de erro inválidos, quebrando o processo.
-
Crie 5 commits, com um bug inserido no 3º (
echo "valor errado" > teste.txt) -
Use:
git bisect start git bisect bad git bisect good HEAD~4
-
Rode:
git bisect run bash -c 'grep "valor certo" teste.txt' -
Corrija o erro no script: o comando acima não define código de saída corretamente.
-
Ajuste para:
bash -c 'grep -q "valor certo" teste.txt && exit 0 || exit 1'
A correção do script permite ao bisect encontrar o commit defeituoso corretamente.
Você alterou um arquivo localmente, fez git stash, mas ao aplicar o stash em outra branch, um conflito acontece.
-
Crie
feature-x, editepagina.htmlcom um novo conteúdo egit stash. -
Vá para
main, edite o mesmo arquivo, com outro conteúdo e comite. -
Agora, em
main, tente:git stash apply
-
O conflito deve aparecer.
-
Resolva o conflito manualmente no arquivo, e finalize com:
git add pagina.html git stash drop
Você resolve o conflito e limpa o stash manualmente.
Você está fazendo cherry-pick de um commit que altera o mesmo arquivo já modificado na branch atual. Um conflito ocorre e você acidentalmente aborta.
-
Crie a branch
bugfixe comite um arquivoconfig.yml -
Em
main, edite o mesmo arquivo de forma diferente e comite -
Em
main, execute:git cherry-pick <commit-de-bugfix>
-
Um conflito ocorre.
-
Execute acidentalmente:
git cherry-pick --abort
-
Agora decida a estratégia:
- Voltar para
bugfixe gerar novo patch? - Recomeçar o cherry-pick?
- Criar uma branch temporária a partir do commit original?
- Voltar para
Você consegue aplicar o conteúdo da alteração original mesmo após o abort, usando uma abordagem alternativa (ex: git format-patch, git show, ou cherry-pick novamente).
- 🎬 Criar um commit em um repositório de origem
# Crie e entre no repositório de origem
cd git-workshop
echo "versao 1" > app.txt
git add app.txt
git commit -m "feat: primeira versão do app"
echo "versao 2" >> app.txt
git commit -am "feat: segunda versão do app"- 📦 Gerar um arquivo patch
# Gere patch do último commit
git format-patch -1 HEAD --stdout > segunda-versao.patch- 📤 Criar um repositório de destino e importar o patch
# Em um novo terminal ou pasta separada
cd ..
mkdir repo-destino && cd repo-destino
git init
# Crie um arquivo base igual ao primeiro commit do outro repo
echo "versao 1" > app.txt
git add app.txt
git commit -m "feat: primeira versão do app"
# Copie o patch gerado anteriormente (ou use caminho relativo)
cp ../git-workshop/segunda-versao.patch .
# Aplique o patch
git apply segunda-versao.patch
# Verifique alterações e comite
git status
git add app.txt
git commit -m "feat: segunda versão do app (via patch)"- 🧠 Preservar autor e mensagem
Se quiser preservar os metadados do commit original:
git reset --hard HEAD~1 # volte antes do commit feito manualmente
git am segunda-versao.patch- ✅ Validação
git log --oneline
cat app.txtVocê deve ver os dois commits com o conteúdo final do arquivo app.txt contendo as duas versões.