Saya berkomitmen untuk repositori git untuk pertama kalinya; Saya kemudian menyesali komitmen dan ingin mengembalikannya. saya coba
# git reset --hard HEAD~1
Saya menerima pesan ini:
fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
Komit ini adalah komit pertama dari repositori. Adakah cara untuk membatalkan komit awal git?
git status
, dan yang mengejutkan saya, kata gitfatal: Not a git repository (or any parent up to mount point ...)
!.gitignore
.git add .
,git commit -m "initial commit"
,git update-ref -D HEAD
, Membuat.gitignore
, melihat bahwa git masih adalah melihat file yang ditambahkan sebelumnya yang harus diabaikan. Dengan kata laingit update-ref -d HEAD
tidak membawa saya kembali ke negara sebelum komit awal.git reset --hard HEAD~1
akan menghapus file yang ditambahkan untuk semua komitmen lainnya. Jelas pertanyaannya adalah bagaimana mendapatkan ke status yang sama dengan perintah itu bekerja di semua kasus lainnya. Lihat inti ini untuk membuktikan solusi Anda tidak berfungsi gist.github.com/greggman/522fa69a21d6cfb3ff0bgit update-ref -d HEAD
tidak benar-benar kembali awal komit, tapi membuat semua perubahan yang sebelumnya berkomitmen ditambahkan ke indeks. Jika Anda ingin juga menghapus perubahan itu, jalankan saja yang berikut inigit reset --hard
. Meskipun tidak lengkap, jawaban ini memang yang terbaik, jadi hindari menggunakanrm -fr .git
(kecuali Anda tahu apa yang Anda lakukan).Anda dapat menghapus HEAD dan mengembalikan repositori Anda ke status baru, tempat Anda dapat membuat komit awal yang baru:
Setelah Anda membuat komit baru, jika Anda telah mendorong ke jarak jauh, Anda perlu memaksanya ke jarak jauh untuk menimpa komit awal sebelumnya:
sumber
Pertanyaan ini ditautkan dari posting blog ini dan solusi alternatif diusulkan untuk versi Git yang lebih baru:
Solusi ini mengasumsikan bahwa:
master
cabang Andaold_master
jadi saya bebas menggunakan nama ituIni akan mengubah nama cabang yang ada menjadi
old_master
dan membuat cabang baru, yatim piatumaster
(seperti dibuat untuk repositori baru) setelah itu Anda dapat dengan bebas menghapusold_master
... atau tidak. Terserah kamu.Catatan: Memindahkan atau menyalin cabang git mempertahankan reflognya (lihat kode ini ) sambil menghapus dan kemudian membuat cabang baru menghancurkannya. Karena Anda ingin kembali ke keadaan semula tanpa riwayat, Anda mungkin ingin menghapus cabang, tetapi yang lain mungkin ingin mempertimbangkan catatan kecil ini.
sumber
Dalam kondisi yang ditentukan dalam pertanyaan:
git init
,git add
operasi,git commit
,Jika prasyarat tersebut dipenuhi, maka cara paling sederhana untuk membatalkan komit awal adalah:
dari direktori tempat Anda melakukannya
git init
. Anda kemudian dapat mengulangigit init
untuk membuat ulang repositori Git, dan mengulangi penambahan dengan perubahan apa pun yang masuk akal yang Anda sesalkan tidak melakukan yang pertama kali, dan mengulang komit awal.BAHAYA! Ini menghapus direktori repositori Git.
Ini menghapus direktori repositori Git secara permanen dan tidak dapat diperbaiki, kecuali jika Anda memiliki cadangan di suatu tempat. Di bawah prasyarat, Anda tidak ingin menyimpan apa pun di repositori, sehingga Anda tidak kehilangan apa pun. Semua file yang Anda tambahkan masih tersedia di direktori yang berfungsi, dengan asumsi Anda belum memodifikasinya dan belum menghapusnya, dll. Namun, melakukan ini aman hanya jika Anda tidak memiliki apa pun dalam repositori Anda sama sekali. Dalam keadaan yang dijelaskan dalam pertanyaan 'lakukan repositori pertama kali - kemudian menyesalinya', itu aman. Namun, sangat sering hal itu tidak aman.
Aman juga melakukan ini untuk menghapus repositori kloning yang tidak diinginkan; itu tidak merusak repositori dari mana ia dikloning. Itu membuang semua yang telah Anda lakukan dalam salinan Anda, tetapi sebaliknya tidak mempengaruhi repositori asli.
Hati-hati, tetapi aman dan efektif ketika prasyarat dipenuhi.
Jika Anda telah melakukan hal-hal lain dengan repositori yang ingin Anda pertahankan, maka ini bukan teknik yang tepat - repositori Anda tidak lagi memenuhi prasyarat untuk menjadikannya tepat.
sumber
Kamu tidak bisa Begitu:
sumber
git reset --hard
, jadi mengapa dia maugit add -A
?Saya akan memasukkan apa yang berhasil bagi saya pada akhirnya. Saya perlu menghapus komit awal pada repositori karena data yang dikarantina salah tempat, komit sudah didorong.
Pastikan Anda saat ini berada di cabang kanan.
git checkout master
git update-ref -d HEAD
git commit -m "Initial commit
git push -u origin master
Ini bisa menyelesaikan masalah.
Penting
Ini ada di repositori internal yang tidak dapat diakses publik, jika repositori Anda dapat diakses oleh umum, asumsikan semua yang Anda butuhkan untuk mengembalikan telah ditarik ke bawah oleh orang lain.
sumber
Saya bertanya-tanya mengapa "mengubah" tidak disarankan dan telah dicoret oleh @damkrat, karena perubahan tersebut menurut saya sebagai cara yang tepat untuk menyelesaikan secara paling efisien masalah mendasar dari memperbaiki komit yang salah karena tidak ada tujuan untuk tidak memiliki inisial melakukan. Seperti yang ditekankan beberapa orang, Anda hanya perlu memodifikasi cabang "publik" seperti master jika tidak ada yang mengkloning repo Anda ...
sumber
git reset --segera buat perubahan, lalu lakukanatau
lalu
--force akan menulis ulang komit yang telah Anda atur ulang pada langkah pertama.Jangan lakukan ini, karena Anda akan menentang seluruh gagasan sistem VCS dan git pada khususnya. Satu-satunya metode yang baik adalah membuat cabang baru dan menghapus yang tidak dibutuhkan. Lihat
git help branch
untuk info.sumber
Yang harus Anda lakukan hanyalah mengembalikan komit.
Lalu dorong
sumber