Estou curioso sobre como remover o primeiro commit no git.
Qual é a revisão antes de cometer alguma coisa? Esta revisão possui um nome ou tag?
git
repository
commit
git-commit
Jian Weihang
fonte
fonte
git rebase -i --root
. Consulte a seguinte resposta do SO para obter detalhes: stackoverflow.com/questions/2246208/…git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
Respostas:
Para mim, a maneira mais segura é usar o
update-ref
comando:Ele excluirá a referência nomeada
HEAD
e redefinirá (suavemente, você não perderá seu trabalho) todos os seus commits do seu ramo atual .Se o que você deseja é mesclar o primeiro commit com o segundo, você pode usar o
rebase
comando:Uma última maneira poderia ser criar uma ramificação órfã, uma ramificação com o mesmo conteúdo, mas sem histórico de confirmação, e confirmar seu novo conteúdo:
fonte
Não há nada antes do primeiro commit, pois todo commit está se referindo a um commit pai. Isso torna o primeiro commit especial (um órfão), portanto não há como se referir a um "estado" anterior.
Portanto, se você deseja corrigir o commit, você pode simplesmente
git commit --amend
: isso modificará o commit sem criar outro.Se você deseja apenas começar tudo de novo, exclua o
.git
repositório e faça outro comgit init
fonte
--amend
também não atualizará o autor corretamente se ele tiver sido inicialmente configurado incorretamente. Era disso que eu precisava, então usei a resposta aceita e fiz um novo commit.fonte
Você pode apenas editar seu primeiro commit (como sempre há um primeiro commit em um repositório git). Considere usar em
git commit --amend --reset-author
vez do habitualgit commit --amend
.fonte
Eu estava procurando uma maneira de desfazer todos os commits git de um repositório, como se nunca tivessem acontecido.
O rebaseamento funcionará até certo ponto. No entanto, o primeiro (cronologicamente o mais antigo commit do git) sempre será problemático, uma vez que não possui um pai, o que resultará em erro.
Nenhuma dessas respostas resolveu isso para mim. Mas, depois de muita pesquisa e tentativa e erro, achei que funcionava!
Espero que isso ajude você. Tenha um ótimo dia.
fonte
Outra maneira de fazer é:
git checkout dev
git branch -D master
git checkout --orphan master
Obviamente, tudo isso dependeria da sua base de dados, mas se você tiver mais de uma ramificação, excluir o
.git
diretório não fará sentido.fonte
Se você deseja manter outras ramificações, mas, por exemplo, fazer com que a
master
ramificação inicie novamente sem histórico comum para outras ramificações, uma maneira segura de conseguir isso é criar um novo repositório e enviar o conteúdo dele para o antigo:Isso cria
newmaster
ramificação no repositório antigo, com histórico que não é comum a nenhuma das outras ramificações. Claro, você pode simplesmente substituir omaster
também comgit push -f
.Se você deseja destruir todas as ramificações e todo o conteúdo existente, basta executar
fonte
git rebase --root
que provavelmente é o que o OP queria, mas, considerando que esta resposta tem dois votos positivos, evitarei excluí-la caso alguém ainda a ache relevante.Se você acabou de confirmar, mas não o enviou, remova o diretório .git e
git init
novamente ...fonte
A resposta para a pergunta depende se:
Você deseja remover o primeiro e apenas confirmar em uma ramificação (enquanto deixa outras ramificações como eram) ou se
Você deseja remover o primeiro commit em alguma ramificação, enquanto 'deixa no lugar' as confirmações subsequentes (e as outras ramificações).
O segundo deles é relativamente mais simples. Você basicamente precisa se refazer na raiz - a maioria das respostas aqui são sobre maneiras de fazer isso.
Fazer o segundo (remover o primeiro e apenas confirmar de um ramo, deixando outros ramos em paz) é mais difícil. Ou, pelo menos, especialmente mais difícil se você quiser que isso aconteça e que a mudança seja refletida no GitHub ou no Bitbucket. Não há (até onde eu saiba) nenhuma maneira no Git de empurrar ou forçar a empurrar um ramo sem confirmação. E também há (novamente, até onde eu vejo), nenhuma maneira de criar um novo ramo vazio, sem confirmações no GitHub ou no Bitbucket. Portanto, você basicamente precisa criar um novo repositório para criar uma ramificação completamente vazia e, em seguida, adicionar novamente as ramificações que deseja (incluindo as confirmações que deseja) - conforme a resposta de @ user1338062.
Espero que esta resposta esclareça o que pode não ter sido óbvio - que existem duas abordagens diferentes que precisam ser adotadas, para dois cenários diferentes (mais ou menos razoáveis), que são as duas coisas que você pode querer fazer, para dominar completamente o que o OP pede.
fonte