بِسْـــــــــمِ ﷲِالرَّحْمَنِ الرَّحِيم. اَللَّهُمَّ صَلِّى عَلَى مُحَمَّدٍٍ، وَعَلَى آلِهِ مُحَمَّدٍٍ


Kandungan: MasalahPunca MasalahRevert "merge commit" menggunakan GIT Bash.


Tedi menggunakan GIT untuk urus versi kod-kod yang Tedi tulis. Tetapi Tedi tak fasih sangat arahan GIT ini maka Tedi gunakan satu perisian bernama SourceTree sebagai antara muka.

Kelmarin (20210726) berlaku satu kemalangan di mana Tedi telah merge satu branch ke production kerana ada permintaan. Malangnya dalam permintaan itu tidak dinyatakan branch mana yang perlu Tedi merge, tetapi disebut nama pemilik branch tersebut.

Maka Tedi pun merge branch yang pernah diminta Tedi merge ke staging. Tetapi bukan branch itu yang dimaksudkan malahan tiada branch pun yang perlu digabungkan kerana material yang nak diterbitkan itu tidak di-commit ke mana-mana branch. Itu cerita lain pula.

 

Masalah

Kemudian Tedi pun cuba revert apa yang telah Tedi merge ke production, sekali tak lepas la. Ada ralat seperti di bawah:

git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks revert --no-edit 722a718601e27196c694b0fdc0f8efd468039ecc
error: commit 722a718601e27196c694b0fdc0f8efd468039ecc is a merge but no -m option was given.
fatal: revert failed
Completed with errors, see above.

Di mana adalah 722a718601e27196c694b0fdc0f8efd468039ecc nilai hash untuk commit yang Tedi nak revert tu.

 

Punca Masalah

Setelah Googling akhirnya Tedi menemui jawapannya di revert back on git but a merge but no -m option was given - Stack Overflow.

Rupa-rupanya SourceTree tak boleh revert atau cherry pick sebarang "merge commit". Terpaksa gunakan GIT bash.

Tedi memang kalau nak merge akan gunakan merge commit dan bukannya fast forward kerana ia nampak lebih mudah untuk difahami dan semua files yang kita commit boleh dijejak dengan lebih mudah kerana terletak pada satu merge. Memandangkan Tedi jenis beruang yang suka buat banyak commit mengikut task. Setiap task berlainan Tedi akan commit berasingan.

 

Revert "merge commit" menggunakan GIT Bash

Mudah sahaja rupanya nak revert gunakan GIT Bash ni dan memang dalam SourceTree ada pintasan untuk buka Terminal.

Buka Terminal pada SourceTree dan masukkan arahan di bawah:

git revert -m 1 <commit-hash>

contoh

git revert -m 1 722a718601e27196c694b0fdc0f8efd468039ecc

-m 1 tu bermaksud mainline, tetapi nilai 1 tu Tedi tak pasti. Nak kena kaji lagi.

git akan laksanakan revert pada merge commit tersebut sebelum paparkan editor untuk sunting mesej commit. Jika kita tutup window editor ini guna butang close [X] commit takkan berlaku.

Selepas dipaparkan editor untuk edit mesej commit, boleh masuk mod sunting dengan taip "i" atau terus taip ":wq" untuk save dan exit, kerana pada dasarnya GIT telah letakkan siap-siap mesej yang bersesuaian.

Selepas exit editor tersebut, GIT akan laksanakan arahan commit. Tedi tak pasti tapi rasanya editor tu vim.

Kemudian kita boleh sambung dalam SourceTree macam biasa.

 


~20210728~
jika kiriman ini bermanfaat, tolong lawat iklan yang ada ya, terima kasih