Reiniciando um Branch Git

Costumo pensar muito no meu código, mesmo quando não estou na frente do computador. Às vezes penso em uma refatoração ou melhoria de desempenho no trem, no chuveiro ou quando estou deitado na cama antes de me levantar de manhã. Quando tenho uma dessas ideias, costumo começar a digitar o código no momento em que me sento. Muitas vezes me esqueço de puxar ou iniciar um novo branch primeiro. Felizmente, o git torna relativamente simples mover seus commits contanto que você não tenha feito push de suas mudanças ainda. (Depois de enviar seus commits, você não deve alterá-los porque outra pessoa pode tê-los puxado.)

O caso mais fácil é se você tiver alterações que ainda não foram confirmadas. Apenas crie seu branch antes de comprometer suas alterações.

git checkout -b great-train-idea
# now on branch great-train-idea
git commit
-a -m "Great idea I thought of on the train"

O próximo caso é se você fez vários commits em masterque ainda não fez push , mas deseja movê-los para um novo branch. Uma vez que branches são simplesmente ponteiros para commits no git, você pode apenas criar um novo brach que aponte para suas novas mudanças, então reinicie masterpara o commit antes de fazer essas mudanças.

# assuming current branch is master and working directory is clean
git branch genius
-shower-idea
git reset
--hard origin/master

O exemplo acima funciona com outras ramificações master– se você acidentalmente fez commits de que gostaria de mover para uma nova ramificação, apenas substitua por no exemplo. Além disso, se você nunca fez push (o branch com o qual se comprometeu por engano), você pode usar para descobrir para qual commit reverter, em vez de confiar na referência.great-train-ideagenius-shower-ideamastergreat-train-ideagreat-train-ideagit logorigin/great-train-idea

O caso mais complicado é se você fez vários commits master, mas masternão estava atualizado. A solução aqui é mover os commits para um novo branch como antes, então atualizar mastere então repetir as mudanças em seu novo branch usando o novo master atualizado como ponto de partida.

# assuming current branch is master and working directory is clean
git branch awesome
-morning-idea
git reset
--hard origin/master

# update master
git pull


# make it as if awesome-morning-idea was branched from up-to-date master
git checkout awesome
-morning-idea
git rebase master

Novamente, deixe-me enfatizar que você não deve fazer nada disso se já tiver feito push de suas alterações. Felizmente, se você estava tão envolvido em sua ideia que esqueceu de puxar ou se comprometeu com o branch incorreto, você também estava muito distraído para empurrar.

Esta dica foi republicada do meu blog, jontai.me