Saya ingin tahu tentang cara menghapus komit pertama di git.
Apa revisi sebelum melakukan sesuatu? Apakah revisi ini memiliki nama atau tag?
git
repository
commit
git-commit
Jian Weihang
sumber
sumber
git rebase -i --root
. Lihat jawaban SO berikut untuk detailnya: stackoverflow.com/questions/2246208/…git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
Jawaban:
Bagi saya, cara paling aman adalah menggunakan
update-ref
perintah:Ini akan menghapus referensi yang disebutkan
HEAD
, sehingga akan mengatur ulang (dengan lembut, Anda tidak akan kehilangan pekerjaan Anda) semua komit Anda dari cabang Anda saat ini .Jika yang Anda inginkan adalah menggabungkan komit pertama dengan komit kedua, Anda dapat menggunakan
rebase
perintah:Cara terakhir adalah membuat cabang yatim, cabang dengan konten yang sama tetapi tanpa riwayat komit, dan mengkomit konten baru Anda di dalamnya:
sumber
Tidak ada apa pun sebelum komit pertama, karena setiap komit merujuk komit orang tua. Ini menjadikan komit pertama spesial (komit anak yatim), jadi tidak ada cara untuk merujuk ke "keadaan" sebelumnya.
Jadi, jika Anda ingin memperbaiki komit, Anda bisa
git commit --amend
: ini akan memodifikasi komit tanpa membuat komit lainnya.Jika Anda hanya ingin memulai dari awal, hapus
.git
repositori, dan buat yang lain dengangit init
sumber
--amend
juga tidak akan memperbarui penulis baik jika awalnya terkonfigurasi. Itulah yang saya butuhkan jadi saya menggunakan jawaban yang diterima dan kemudian hanya melakukan komit baru.sumber
Anda mungkin hanya ingin mengedit komit pertama Anda (karena selalu ada komit pertama di git repo). Pertimbangkan untuk menggunakan
git commit --amend --reset-author
daripada yang biasagit commit --amend
.sumber
Saya sedang mencari cara untuk membatalkan semua git melakukan dari repo, seolah-olah itu tidak pernah terjadi.
Rebasing akan bekerja hingga titik tertentu. Namun, yang pertama (kronologis git commit tertua) akan selalu bermasalah, karena tidak memiliki orangtua, sehingga akan salah.
Tidak satu pun dari jawaban ini yang cukup memecahkannya untuk saya. Tetapi setelah banyak pencarian dan coba-coba, saya menemukan ini berfungsi!
Semoga ini bisa membantu Anda. Semoga hari mu menyenangkan.
sumber
Cara lain yang dapat Anda lakukan adalah:
git checkout dev
git branch -D master
git checkout --orphan master
Tentu saja, semua ini tergantung pada penggunaan Anda, tetapi jika Anda memiliki lebih dari satu cabang, menghapus
.git
direktori tidak masuk akal.sumber
Jika Anda ingin menyimpan cabang lain, tetapi misalnya membuat
master
cabang mulai baru tanpa riwayat umum ke cabang lain, salah satu cara aman untuk mencapai ini adalah dengan membuat repositori baru, dan mendorong konten yang ada di yang lama:Ini menciptakan
newmaster
cabang di repositori lama, dengan sejarah yang tidak umum dengan cabang lainnya. Tentu saja, Anda bisa menimpanyamaster
juga dengangit push -f
.Jika Anda ingin menghancurkan semua cabang dan semua konten yang ada, maka jalankan saja
sumber
git rebase --root
mungkin apa yang diinginkan OP, tetapi mengingat jawaban ini memiliki dua upvotes, saya akan menahan diri untuk tidak menghapusnya jika seseorang masih menganggapnya relevan.Jika Anda baru saja melakukannya tetapi tidak mendorongnya maka hapus saja direktori .git dan
git init
lagi ...sumber
Jawaban atas pertanyaan tergantung pada apakah:
Anda ingin menghapus komit pertama DAN HANYA pada cabang (sementara meninggalkan cabang lain seperti sebelumnya), atau apakah
Anda ingin menghapus komit pertama pada beberapa cabang, sementara 'meninggalkan di tempat' komit berikutnya (dan cabang lainnya).
Yang kedua ini relatif lebih sederhana. Anda pada dasarnya harus mengulang ke root - sebagian besar jawaban di sini adalah tentang cara untuk melakukan ini.
Melakukan yang kedua (menghapus komit pertama dan hanya dari cabang sementara meninggalkan cabang lain sendirian) lebih sulit. Atau, paling tidak, terutama lebih sulit jika Anda menginginkannya terjadi dan agar perubahan tercermin kembali di GitHub atau Bitbucket. Tidak ada (sejauh yang saya tahu) di Git untuk mendorong atau memaksa mendorong cabang tanpa komitmen. Dan ada juga (sekali lagi, sejauh yang saya bisa lihat) tidak ada cara sama sekali untuk membuat cabang baru yang kosong tanpa komitmen di dalamnya baik di GitHub atau Bitbucket. Jadi Anda pada dasarnya harus membuat repositori baru untuk membuat cabang yang benar-benar kosong, dan kemudian menambahkan kembali cabang yang Anda inginkan (termasuk komit yang Anda inginkan) - sesuai jawaban @ user1338062.
Jadi saya harap jawaban ini mengklarifikasi apa yang mungkin tidak jelas - bahwa ada dua pendekatan berbeda yang perlu diambil, untuk dua skenario yang berbeda (lebih atau kurang masuk akal) yang merupakan dua hal yang Anda mungkin ingin dapat lakukan, dalam rangka untuk sepenuhnya menguasai melakukan apa yang diminta OP.
sumber