Ketika Anda agak baru dengan Git (dan DVCS pada umumnya), dan Anda mulai mengeksplorasi perubahan penulisan ulang sejarah, Anda aman jika repositori hanya bersifat lokal, tetapi Anda mungkin mengalami masalah jika Anda bekerja dengan remote dan mencoba untuk mendorong perubahan tersebut.
Fitur yang saya harapkan adalah kemampuan untuk mengaktifkan "safe mode" yang pada dasarnya akan menghentikan saya dari melakukan apa pun yang seharusnya tidak saya lakukan ... Dan apa yang saya maksud dengan itu? Maksudku perubahan penulisan ulang sejarah untuk hal-hal yang sudah didorong ke asal. Saya tidak dapat mendefinisikannya dengan tepat, tetapi ini akan mencakup kasus-kasus seperti:
commit --amend
ketika KEPALA sudah didorongrebase
dari cabang non-lokalreset
dari cabang yang telah didorong
Ini adalah contoh situasi yang mungkin akan membuat push
kegagalan berikutnya (karena itu tidak akan maju cepat, IIRC). Saya telah membuat beberapa dari itu secara tidak sengaja dan harus membuat kembali cabang pada remote. Dan saya masih beruntung melakukan ini dengan cukup cepat sehingga tidak ada yang menarik sejarah yang saya tulis ulang.
Saya percaya itu mungkin untuk mengidentifikasi jenis perubahan ini dan, sesuai permintaan, mencegah pengguna membuat mereka. Apakah mungkin ada opsi untuk itu?
Jika tidak ada, menurut Anda apakah ada gunanya mencoba membuatnya? Apakah Anda akan mencoba mendefinisikan dengan tepat bagaimana cara mengidentifikasi "perubahan berbahaya" seperti itu?
--force
.Jawaban:
Ini terlihat sangat dekat, jika bukan pertanyaan yang sama dengan Strategi untuk Mencegah atau Menangkap Menulis Ulang Sejarah Git
Singkatnya, Anda dapat mengaktifkan
git config --system receive.denyNonFastforwards true
dan
git config --system receive.denyDeletes true
Atau tulis kiriman terima kail untuk menolak apa pun yang Anda tentukan adalah penulisan ulang.
sumber
denyNonFastforwards
adalah default (?), SedangkandenyDeletes
tidak. Keduanya bermanfaat, tetapi saya membayangkan solusi sisi klien yang akan menghentikan saya yaitu melakukancommit --amend
jika saya tidak dapat mendorongnya (karena HEAD sudah didorong).denyNonFastfowards
untuktrue
hanya pada cabang master? Saya ingin cabang topik saya diizinkan untuk diubah dan dipaksa.Tidak karena itu adalah bagian dari filosofi git untuk memberi Anda kekuatan penuh dan membiarkan Anda mengelola kekuatan itu seperti yang Anda inginkan.
Jika Anda tidak mematuhi filosofi ini, maka mungkin beralih ke Mercurial akan bernilai karena mereka memungkinkan penulisan ulang sejarah tetapi dalam cara yang terbatas, atau jelas, enggan, yang membuat Anda merasa itu bukan ide yang baik.
sumber
AFAIK, cara git menyelesaikan masalah ini adalah bahwa setiap kali Anda meminta tindakan seperti itu, ia akan melakukannya secara lokal, tetapi memberi tahu Anda bahwa apa yang Anda lakukan mungkin memiliki konsekuensi yang tidak diinginkan. Pada saat itu, Anda belum mendorong apa pun, sehingga Anda berada dalam posisi untuk meninjau repositori lokal Anda, dan mungkin membatalkan perubahan berbahaya sebelum Anda mendorong. Anda harus memperhatikan apa yang dikatakan git, dan Anda sebaiknya berhati-hati saat memperbaiki kesalahan tersebut.
sumber