Como redefinir um repositório Git remoto para remover todas as confirmações?

164

Como posso redefinir um repositório Git remoto e local para remover todas as confirmações?

Gostaria de começar de novo com o atual Head como o commit inicial.

Priyank Bolia
fonte
Não quero escolher de cereja ou fazer qualquer outra coisa, só quero remover todas as alterações e redefinir o repositório público também. Como eu sou novo usuário do Git, cometi alguns commits errados. A remoção do diretório .GIT não é uma opção, pois também existe um repositório público.
Priyank Bolia
Você também pode pressionar com força, portanto, remover o diretório .git é realmente uma opção.
Lilith River
2
apenas nitpicking, mas "revisão" é uma terminologia svn e não faz muito sentido em uma história em forma de árvore.
Tamás Szelei
2
@ TamásSzelei "Revisão" é um sinônimo perfeitamente aceitável para "confirmação". É usado no livro Pro Git (por exemplo, aqui ) e nas páginas do manual do Git.
jub0bs

Respostas:

348

Redefinir completamente?

  1. Exclua o .gitdiretório localmente.

  2. Recrie o repositório git:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. Envie para o servidor remoto, substituindo. Lembre-se de que você vai estragar todo mundo fazendo isso ... é melhor você ser o único cliente.

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    
Lilith River
fonte
1
mas as confirmações acabaram e o repositório foi redefinido. Podemos remover essas mensagens anteriores também na frente dos nomes dos arquivos.
Priyank Bolia
2
Remova o repositório remoto diretamente no GitHub e recrie-o lá.
quer
1
Deve ser --force git impulso em vez de -force git push
William Notowidagdo
6
Se você não deseja confirmar nenhum arquivo em "Confirmação inicial", não é possível adicionar nenhum arquivo e adicionar o --allow-emptysinalizador no final de git commit -m 'Initial commit'.
raf #
2
Usando Git 2.3.2, eu tive que usar git push --force --set-upstream origin masterMas todo o resto estava trabalhando como descrito
Sébastien Stormacq
6

Primeiro, siga as instruções nesta pergunta para compactar tudo em um único commit. Em seguida, faça um empurrão forçado no controle remoto:

$ git push origin +master

E, opcionalmente, exclua todos os outros ramos local e remotamente:

$ git push origin :<branch>
$ git branch -d <branch>
R. Martinho Fernandes
fonte
0

Se eu fosse você, faria algo assim:

Antes de fazer qualquer coisa, guarde uma cópia (é melhor prevenir do que remediar)

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

Depois de fazer isso, você pode excluir outros ramos.

Resultado: você terá uma ramificação com apenas 2 confirmações.

Use git log --onelinepara ver seus commits de maneira minimalista e para encontrar o SHA-1 para commits!

Kwnstantinos Nikoloutsos
fonte