Apakah ada kerugian untuk mengaktifkan git rerere?

107

Saya telah membaca berbagai hal tentang fitur rerere git, dan saya sedang mempertimbangkan untuk mengaktifkannya. Tetapi saya belum melihat siapa pun menyebutkan kemungkinan masalah yang bisa timbul saat menggunakannya. Saya harus berasumsi ada sisi negatifnya, atau mungkin akan diaktifkan secara default. Jadi, apakah ada kerugian untuk mengaktifkan rerere? Masalah potensial apa yang dapat ditimbulkannya yang tidak akan terjadi?

Ryan C. Thompson
sumber
Ketika rerere otomatis diaktifkan dan menerapkan resolusi sebelumnya, apakah itu menampilkan pesan? Jika ya, seperti apa bentuknya? TIA!
joeytwiddle
1
@joeytwiddle, per artikel ini , bentuknya,Resolved 'index.html' using previous resolution.
sampablokuper

Jawaban:

69

Jika Anda melakukan penggabungan secara tidak benar, kemudian membuangnya, lalu melakukan penggabungan yang "sama" lagi, penggabungan akan menjadi salah lagi. Anda bisa melupakan resolusi yang direkam. Dari dokumentasi :

git rerere forget <pathspec>

Ini menyetel ulang resolusi konflik yang telah direkam ulang untuk konflik saat ini di <pathspec>.

Berhati-hatilah untuk menggunakannya di jalur tertentu; Anda tidak ingin menghapus semua resolusi yang direkam di mana-mana. ( forgetdengan tidak ada argumen yang tidak digunakan lagi untuk menyelamatkan Anda dari melakukan ini, kecuali Anda mengetik git rerere forget .untuk memintanya secara eksplisit.)

Tetapi jika Anda tidak berpikir untuk melakukan itu, Anda dapat dengan mudah memasukkan penggabungan yang salah itu ke dalam riwayat Anda ..

MatrixFrog
sumber
13
Inilah sebabnya mengapa rereremasih menyisakan file dengan konflik yang ditandai sebagai tidak digabungkan, sehingga Anda harus menambahkannya secara manual (mudah-mudahan setelah memeriksa / mengujinya) sebelum melakukannya. Anda selalu dapat menggunakan git checkout -m <path>untuk memeriksa versi asli yang berkonflik dan mengulangi resolusi jika perlu.
Cascabel
1
Itu masuk akal! Sepertinya Anda membutuhkan alias baru.
Cascabel
5
Saya pikir ini mungkin masalah utama. Mengaktifkan rerere menambahkan satu cara lagi untuk kesalahan menyelinap tiba-tiba. Penggabungan yang Anda batalkan (atau lebih tepatnya urungkan dengan menghapusnya dari riwayat) masih bisa menghantui Anda nanti. Pada dasarnya, ini memperkenalkan mekanisme riwayat kedua yang ortogonal dengan grafik riwayat yang sebenarnya.
Ryan C. Thompson
3
Penggabungan @RyanThompson Dibatalkan tidak memengaruhi rerere. (Saya sering berharap mereka melakukannya — saya terkadang membatalkan penggabungan karena saya salah memasangnya, lalu perlu melakukan resolusi yang persis sama saat saya memasangnya dengan benar.) Mengenai menghapus penggabungan dari riwayat, mengapa Anda pernah lakukan itu?
Marnen Laibow-Koser
40

Seperti yang disebutkan JC Hamano dalam artikelnya " Bersenang-senang dengan rerere "

  • Rerere ingat bagaimana Anda memilih untuk menyelesaikan daerah konflik;
  • Rerere juga ingat bagaimana Anda menyentuh di luar wilayah konflik untuk menyesuaikan dengan perubahan semantik;
  • Rerere dapat menggunakan kembali resolusi sebelumnya meskipun Anda menggabungkan dua cabang dengan konten yang berbeda dari yang Anda selesaikan sebelumnya .

Bahkan orang yang telah menggunakan rerere untuk waktu yang lama sering kali tidak menyadari poin terakhir.

Jadi jika Anda mengaktifkan konten rerereyang terlalu luas, Anda mungkin akan mendapatkan resolusi penggabungan yang mengejutkan atau membingungkan karena poin terakhir.

VonC
sumber
15
Para bakhil yang berkonflik masih harus cocok; cukup sulit untuk memberikan hasil positif palsu.
Cascabel
3

Saya mengaktifkan rerere secara global. Saya benar-benar tidak menyadari adanya masalah, dan biasanya itu membuat hidup saya lebih mudah.

Marnen Laibow-Koser
sumber
4
Sama disini. Tidak ada masalah dalam 2+ tahun penggunaan.
Andrey Tarantsov
3

Saya memilih komit (dalam gitk) yang hanya berisi file biner. Cherrypick gagal karena konflik (yang menjadi sesuatu tentang hal itu wajar) dan saya menyelesaikan konflik dengan tetap memilih cherry. Saya terkejut kemudian menemukan di cabang rebased lain bahwa dll saya tidak berperilaku - hanya untuk menemukan mereka tidak dibawa ke dalam rebase sebagai (saya berspekulasi) resolusi konflik otomatis. Jadi ini adalah satu-satunya kasus yang saya temui (setelah mengaktifkan ulang) menjalankan perilaku yang berlawanan dengan intuisi (meskipun saya yakin sangat konsisten).

Mr_and_Mrs_D
sumber
1
Obat:git rerere forget path/to/compiled/bin.dll
Mr_and_Mrs_D
Dalam kasus asli, saya mendapatkan konflik bukan pada pemetikan ceri tetapi pada rebasing tetapi menurut saya tidak ada bedanya
Mr_and_Mrs_D