Tenho uma branch2
ramificação de outra branch1
sem confirmações adicionais, branch1
então a árvore de ramificações é realmente linear.
Agora eu descobri que o último commit em branch1
deveria ser, na verdade, o primeiro commit de branch2
. Então eu acho que seria salvar no comando git reset --hard HEAD~
. Na documentação, nós encontramos, que os commits depois são perdidos, mas eu acho que porque nós temos branch2
, isso não é verdade no cenário dado.
Se houver mais de um commit, eu poderia comandar git reset --hard hash
com o hash do commit necessário, certo?
Para ter certeza, gostaria de saber a opinião da comunidade.
Você está certo, nada está perdido. Para entender o porquê, vale a pena saber um pouco sobre como o git funciona:
abc123
está embranch1
" na verdade significa "se você começar no commit referenciado porbranch1
e seguir os ponteiros "pai" para trás, em algum momento você alcançará o commitabc123
".O que
git reset --hard
acontece (além de descartar alterações não confirmadas , que são permanentes) é alterar a referência nomeada para apontar para uma confirmação diferente.O aviso é que isso pode deixar o commit anterior "inacessível" - ou seja, não no histórico de nenhuma branch ou tag nomeada. Periodicamente, commits inacessíveis são "coletados como lixo" e excluídos do banco de dados. Até lá, eles ainda podem ser acessados se você souber o hash deles ou encontrá-los em algum lugar como
git reflog
No seu caso, todos os commits acessíveis a partir de
branch1
também podem ser acessados a partir debranch2
, então nada ficará inacessível.Você está mudando uma história como esta:
Para alguém assim: