Pendekatan pribadi saya terhadap git commit adalah bahwa setiap commit harus menyertakan unit perubahan , dalam kelengkapannya.
Ketika saya berkembang, saya biasanya fokus pada unit seperti itu. Tetapi kadang-kadang, perhatian saya menyimpang di tempat lain dan saya bekerja sebentar di unit yang berbeda. Ini mungkin tidak optimal, tetapi saya telah belajar untuk berkomitmen dengan hati-hati ( git add --interactive
adalah teman baik saya).
Namun, itu bisa terjadi bahwa saya lupa untuk melakukan perubahan selektif saya dan bukannya melakukan seluruh file, percaya bahwa semua perubahan yang saya lihat di diff memang terkait dengan unit yang sama, meskipun mungkin ada perubahan atau dua yang sama sekali tidak terkait.
Lalu saya git push
.
Apakah ini berbahaya? Haruskah saya berupaya mengubah komit sehingga hanya mencakup perubahan yang dimaksudkan? Perhatian utama saya adalah bahwa siapa pun yang melihat sejarah akan melihat perubahan dan mungkin akan menggaruk kepala mereka selama beberapa menit sebelum menyadari bahwa itu kemungkinan besar adalah kesalahan. Lebih buruk lagi, saya bisa membayangkan bahwa perubahan bahkan akan terlihat terkait dan programmer mungkin tidak mengenali kesalahannya.
Masalahnya adalah, karena saya sudah mendorong, saya tidak bisa menulis ulang sejarah server dengan aman , jadi saya mungkin harus terlebih dahulu mengembalikan komit, membaginya dengan benar dan komit lagi. Atau, saya bisa mengubah komit dengan pesan komit yang lebih baik, tetapi saya harus benar-benar cepat karena itu juga memerlukan penulisan ulang riwayat. Sebagai upaya terakhir, saya mungkin hanya melakukan unit yang saya kerjakan sebagai berikutnya, meninggalkan catatan bahwa ada perubahan terkait dalam komit sebelumnya (tapi ini terasa salah).
Saya mengerti bahwa dalam pengaturan multi-pengembang dengan alur kerja peninjauan kode yang tepat, hal ini kemungkinan tidak akan terjadi. Saya juga mengerti bahwa jika saya adalah satu-satunya pengembang dalam suatu proyek, maka penulisan ulang sejarah adalah solusi terbaik untuk ini.
Jawaban:
Komit sejarah sangat penting, tetapi karena 3 alasan:
Jadi, meskipun unit-of-work melakukan suara yang ideal, mereka tidak menuntut apa pun dalam hal praktis. Saya akan berusaha untuk menjaga komitmen tetap masuk akal, dan unit kerja adalah cara yang baik untuk menjaga komitmen tetap waras, tetapi jangan repot-repot mencoba mengutak-atik sejarah komit hanya untuk menjaga komit tetap rapi. Itu seperti memperbarui file kode untuk membuat semua tanda kurung sesuai dengan yang Anda inginkan - bagus, tetapi tidak berguna.
Sekarang, jika Anda telah melakukan sedikit pekerjaan yang ditujukan untuk cabang yang berbeda, kembalikan dan komit dengan benar ke cabang yang tepat. Itu penting, tetapi jika Anda telah memperbarui sedikit kode server ketika Anda telah bekerja pada GUI .. tidak perlu khawatir tentang hal itu.
sumber
Ketika ini terjadi, itu bukan masalah besar untuk hanya mengembalikan perubahan di komit berikutnya. Menambahkan pesan komit yang tepat (
Removing the XYZ that I accidentally added in C92A891
) akan cukup bagi pengembang lain untuk memahami dalam ulasan kode.Daripada khawatir tentang memperbaiki insiden tertentu, cobalah untuk menghindari situasi di tempat pertama.
Ini adalah masalah sebenarnya:
Anda harus membiasakan diri untuk tidak pernah melakukan seluruh file (atau yang terburuk dari seluruh ruang kerja Anda!). Selalu komit baris demi baris atau dengan seluruh Hunk yang telah Anda periksa.
Saat melakukan hal ini (yang sepertinya sering Anda lakukan) perubahan yang tidak disengaja jauh lebih kecil kemungkinannya untuk menyelinap masuk ke dalam komitmen Anda.
sumber
Tampaknya Anda memiliki satu repositori lokal di komputer Anda, dan satu repositori dibagikan dengan rekan kerja Anda di server. Mengapa Anda hanya memiliki satu repositori di komputer lokal Anda? Saya biasanya memiliki setidaknya lima, sehingga saya dapat mengerjakan satu hal dalam satu repositori, memperbaiki bug di yang lain tanpa menyentuh repo pertama, yang mungkin dalam keadaan tidak lengkap, dan sebagainya.
sumber