Saya memiliki submodule git di repo git utama saya. Seperti yang saya pahami, repo utama menyimpan nilai SHA (di suatu tempat ...), menunjuk ke komit khusus dari submodule yang "ditautkan".
Saya masuk ke submodule dan mengetik git checkout some_other_branch
. Saya tidak tahu dari komit mana saya berasal.
Saya ingin mengembalikan pointer itu sehingga repo utama dan submodule sudah sinkron lagi.
Insting pertama saya (mungkin naif) adalah mengatakan git reset --hard
- yang tampaknya bekerja untuk yang lainnya. Yang mengejutkan saya, itu tidak berhasil untuk skenario ini.
Jadi saya sudah tahu bahwa saya bisa mengetik git diff
, perhatikan SHA ID yang dimiliki oleh pointer submodule, dan kemudian menuju ke submodule dan git checkout [SHA ID]
... tapi pasti harus ada cara yang lebih mudah?
Karena saya masih belajar tentang submission git, jangan ragu untuk memperbaiki terminologi saya jika ada kata-kata untuk konsep yang saya tidak tahu.
sumber
--init
. Tanpa itu, submodules akan tetap dalam kondisi dengan(new commits)
. Meskipun submodul saya sudah diinisialisasi.--init
opsi sangat penting dalam semua ini. Saya diminta memasukkan nama pengguna dan kata sandi karena submodule saya dikloning melalui https. Saya masuk ke kedua folder dan mengatur remote untuk menggunakanssh
protokol untuk checkout.Untuk mengubah komit yang ditunjuk oleh submodule, Anda perlu checkout versi itu dalam submodule, lalu kembali ke repo yang berisi, tambahkan dan komit perubahan itu.
Atau, jika Anda ingin submodule berada pada versi yang ditunjuk oleh repo top, lakukan
git submodule update --recursive
. Tambahkan--init
jika Anda baru saja dikloning.Juga,
git submodule
tanpa perintah submodule akan menunjukkan komit yang Anda tuju. Akan ada - atau + di depan komit jika tidak sinkron.Jika Anda melihat pohon dengan submodule di dalamnya, Anda dapat melihat bahwa submodule ditandai sebagai yang
commit
bertentangan dengan yang lainnya adalah gumpalan atau pohon.untuk melihat apa yang dilakukan komit tertentu kepada submodul, Anda dapat:
Anda kemudian dapat melihat komit atau apa pun jika Anda suka dengan memasukkannya ke dalam log, dll. (
git-dir
opsi pada tingkat perintah git memungkinkan Anda untuk melewati keharusan cd ke submodule):sumber
Kasus lain yang baru saja saya temui adalah jika ada perubahan yang tidak bertahap dalam submodule yang ingin Anda buang. git submodule update tidak akan menghapus perubahan itu, git tidak akan mereset --hard pada direktori induk. Anda harus pergi ke direktori submodule dan melakukan git reset --hard. Jadi, jika saya ingin sepenuhnya menghapus perubahan yang tidak dipentaskan pada orang tua dan submodule saya, saya melakukan hal berikut:
Dalam Induk:
Dalam Submodule:
sumber
Gunakan
git ls-tree HEAD
di folder "superproject" untuk melihat komitmen awal dari submodule Anda. Kemudian ubah ke direktori submodule dan gunakangit log --oneline --decorate
untuk melihat cabang apa yang komit asli aktif. Akhirnyagit checkout original-commit-branch
,.Menggunakan beberapa direktori pengujian yang saya atur, inilah yang akan terlihat seperti perintah:
"Superproject" menunjukkan submodule sm2 di commit
f68bed6
tetapi sm2 memiliki HEAD at5b8d48f
. Komit submodulef68bed6
memiliki tiga cabang di atasnya yang dapat digunakan untuk checkout di direktori submodule.sumber
Jawabannya di sini entah bagaimana tidak menyelesaikan masalah spesifik saya dengan submodule sehingga jika itu terjadi pada Anda juga, coba yang berikut ...
https://kalyanchakravarthy.net/blog/git-discard-submodule-changes/
sumber
Saya ingin mengabaikan perubahan dalam submodule dan modul saya juga
Perintah di bawah ini membantu saya:
sumber