Terkait: Haruskah setiap git berkomitmen meninggalkan proyek dalam keadaan kerja?
Misalkan saya membuat komitmen berikut secara lokal:
Ubah skema database, hancurkan aplikasi.
Perbarui aplikasi sehingga kompatibel dengan skema database lagi.
Selama saya mendorong kedua komit, master
tetap dalam kondisi kerja. Namun, versi historis rusak.
Saya sadar bahwa saya dapat menggunakannya git rebase -i
untuk menekan komit bersama. Namun, komit yang dihasilkan akan besar dan kurang deskriptif. Jika saya perlu mencari histori komit untuk mengetahui mengapa saya mengubah sesuatu, saya lebih suka menemukan komit asli yang menunjukkan apa yang saya lakukan dan mengapa.
Pertanyaan saya adalah:
Adakah yang mengalami kesulitan karena rusaknya komitmen historis pada master?
Jika demikian, adakah cara sederhana untuk menghindari kesulitan seperti itu, tanpa mengabaikan pesan dan perubahan komit individu?
Jawaban:
Sebagian besar tergantung pada strategi percabangan pakaian Anda, tetapi saya pikir bahwa melanggar komitmen pada cabang pengembangan secara umum sangat masuk akal - "kemenangan" nyata dalam menggunakan kontrol sumber adalah untuk dapat mengembalikan perubahan kecil dan terkadang Anda membuat banyak dari mereka dan Anda harus memecahkan telur untuk membuat telur dadar.
Cara sederhana untuk menjaga komitmen individu tanpa mencemari master adalah dengan menggunakan cabang. Anda dapat meletakkan hal-hal yang melanggar / eksperimental di sana sehingga Anda dapat memiliki sejarah yang bagus tanpa mencemari sejarah cabang utama.
sumber
--no-ff
opsi untuk git-merge untuk memaksanya membuat komit gabungan?Komitmen yang rusak adalah sesuatu yang "terjadi begitu saja", seharusnya tidak berarti akhir dari dunia. Saya memiliki sedikit suara yang mengganggu di bagian belakang kepala saya yang memberitahu saya bahwa seseorang seharusnya tidak secara sengaja memeriksa kode yang rusak, sebagai masalah prinsip dan karena itu termasuk versi sejarah, namun itu bukan sesuatu yang akan saya lawan.
Model percabangan Git yang sangat dipuji menjadikannya layak untuk menjaga komit yang terputus dari cabang tertentu, misalnya jika tim Anda mengadopsi gitflow atau versi yang disederhanakan. Apa pun dengan kebijakan "master bersih". Dalam hal ini, Anda bisa memeriksa di final, versi yang berfungsi sebagai komit gabungan, di mana versi historis (rusak) tersedia di repositori tetapi di luar jalur utama.
Jika tim Anda belum mengadopsi model percabangan seperti itu, maka Anda memiliki alasan yang valid untuk hanya mendorong seluruh lot untuk dikuasai dan dilakukan dengan itu.
sumber
Tidak, tidak apa-apa.
Jika Anda pernah melakukan
git bisect
(dan yang tidak suka fitur pembunuh), Anda tahu nilai sejarah di mana setiap komit dibangun.Jika Anda memiliki banyak komit selama
bisect
pembangunan yang tidak membangun, Anda akan memiliki banyak komitmengit bisect skip
yang membuat sulit untuk menemukan komitmen bagus terakhir.Jika Anda menyelesaikan cabang fitur dan menggabungkannya menjadi master, bersihkan cabang sebelum menggabungkan sehingga riwayat Anda jelas dan membangun.
sumber
Iya. Backport, reverts, dan bisect lebih sulit. Begitu juga dengan membaca sejarah (lihat di bawah).
Bukan yang saya tahu, meskipun cabang adalah solusi yang layak.
Namun, saya pikir bahwa membuang (atau lebih tepatnya menindas) yang dilakukan individu adalah hal yang benar untuk dilakukan.
Selama pengembangan, terutama ketika melakukan TDD, melakukan lebih awal dan sering baik. Anda ingin jejak lengkap dari apa yang Anda lakukan sehingga Anda dapat mundur, atau mencari tahu kapan hal-hal mulai salah (atau mungkin Anda masuk ke refactoring yang lebih besar daripada yang bisa Anda kunyah). Komit pergi.
Namun, begitu fitur / perubahan siap untuk didorong, komit adalah perubahan yang dikemas - idealnya atomik sehingga dapat [ditinjau, diubah, digabung, dipetik-ceri, dipulihkan, dilihat dalam anotasi] terpisah dari perubahan lain yang mungkin dilakukan .
Melihat sejarah suatu proyek, perubahan perangkat lunak harus dievaluasi sendiri. Apakah itu membangun? Apakah ini disertai dengan tes? Apakah itu bekerja? Apa fungsinya? File apa yang perlu diubah untuk memberikan fitur itu?
Harus mengumpulkan komit, selagi mungkin (dan dibantu oleh gabungan), menjadikannya lebih sulit. Oleh karena itu, saya pikir membersihkan riwayat Anda sebelum mendorong adalah tepat, bahkan jika itu berarti kehilangan jejak bagaimana Anda tiba di tempat Anda berada.
sumber
Jawaban Singkat: Ya
Pengujian:
Pengembangan yang digerakkan oleh tes berarti Anda menulis tes yang gagal (yaitu menunjukkan kegagalan).
Kemudian Anda menulis kode untuk membuat tes bekerja.
Pengembangan:
Berkomitmen kecil, Berkomitmen sering.
Setiap komit adalah poin rollback. Jika Anda menyadari bahwa Anda berada di jalan yang salah, Anda dapat mengembalikan ke titik sebelumnya dengan relatif mudah. Jika Anda berkomitmen cukup butir Anda dapat mengembalikan ke titik yang benar.
Peringatan:
Ini tidak berarti
1) Anda memeriksa kode yang rusak menjadi master.
2) Anda perlu mendorong semua komitmen mikro untuk ditinjau oleh semua orang.
Gunakan cabang untuk melakukan pekerjaan Anda. Kompres komit mikro berpotensi untuk proses peninjauan sehingga mereka berada dalam unit yang berbeda secara logis dengan komentar yang sesuai. Jika Anda menggunakan git, Anda tidak akan kehilangan set komit asli. Anda bisa membuat set komit baru yang lebih logis untuk proses review yang akan digabungkan menjadi master.
sumber
Saya pikir selama komitnya lokal dan tidak didorong ke orang lain itu tidak hanya ok, itu sebenarnya cara yang baik untuk bekerja. Hanya saja, jangan mendorong kode yang rusak ke orang lain.
sumber