Bagaimana cara mereset repositori remote Git untuk menghapus semua commit?

164

Bagaimana saya bisa mereset repositori Git jarak jauh dan lokal untuk menghapus semua komit?

Saya ingin memulai dengan Kepala saat ini sebagai komit awal.

Priyank Bolia
sumber
Saya tidak ingin memilih cherry atau melakukan hal lain, saya hanya ingin menghapus semua perubahan dan mereset repo publik juga. Karena saya adalah pengguna baru Git, saya membuat beberapa komitmen yang salah. Menghapus direktori .GIT bukan pilihan karena ada repositori publik juga.
Priyank Bolia
Anda juga dapat melakukan push force, sehingga menghapus dir .git sebenarnya merupakan opsi.
Sungai Lilith
2
hanya nitpicking, tetapi "revisi" adalah terminologi svn dan tidak masuk akal dalam sejarah berbentuk pohon.
Tamás Szelei
2
@ TamásSzelei "Revisi" adalah sinonim yang dapat diterima untuk "komit". Ini digunakan baik di buku Pro Git (misalnya di sini ) dan di halaman manual Git.
jub0bs

Jawaban:

348

Setel ulang sepenuhnya?

  1. Hapus .gitdirektori secara lokal.

  2. Buat repostory git:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. Dorong ke server jauh, timpa. Ingat Anda akan mengacaukan orang lain melakukan ini ... Anda lebih baik menjadi satu-satunya klien.

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    
Sungai Lilith
sumber
1
tetapi komit hilang, dan repositori diatur ulang. Bisakah kita menghapus pesan-pesan sebelumnya juga di depan nama file.
Priyank Bolia
2
Hapus repositori jarak jauh langsung di GitHub dan buat ulang di sana.
Bombe
1
Seharusnya git push --force bukannya git push
William Notowidagdo
6
Jika Anda tidak ingin mengkomit file apa pun di "Komit awal" Anda, Anda tidak bisa menambahkan file apa pun, dan menambahkan --allow-emptyflag di akhir git commit -m 'Initial commit'.
raf
2
Menggunakan Git 2.3.2, saya harus menggunakan git push --force --set-upstream origin masterTapi semua yang lain berfungsi seperti yang dijelaskan
Sébastien Stormacq
6

Pertama, ikuti instruksi dalam pertanyaan ini untuk menekan semuanya menjadi satu komit. Kemudian dorong paksa ke remote:

$ git push origin +master

Dan secara opsional hapus semua cabang lain baik lokal maupun jarak jauh:

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

Kalau saya, saya akan melakukan sesuatu seperti ini:

Sebelum melakukan apa pun tolong simpan salinannya (lebih baik aman daripada menyesal)

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

Setelah melakukan itu, Anda dapat menghapus cabang lain.

Hasil: Anda akan memiliki cabang dengan hanya 2 komit.

Gunakan git log --onelineuntuk melihat komit Anda dengan cara yang minimalis dan untuk menemukan SHA-1 untuk komit!

Kwnstantinos Nikoloutsos
sumber