Ada dua cara untuk menangani ini. Yang lebih mudah tergantung pada situasi Anda
Setel ulang
Jika komit yang ingin Anda singkirkan adalah komit terakhir, dan Anda belum melakukan pekerjaan tambahan yang bisa Anda gunakan git-reset
git reset HEAD^
Membawa cabang Anda kembali ke komit tepat sebelum KEPALA Anda saat ini. Namun, itu sebenarnya tidak mengubah file di pohon kerja Anda. Akibatnya, perubahan yang ada di komit itu muncul sebagai dimodifikasi - itu seperti perintah 'tidak berkomitmen'. Sebenarnya, saya punya alias untuk melakukan hal itu.
git config --global alias.uncommit 'reset HEAD^'
Maka Anda hanya dapat digunakan git uncommit
di masa depan untuk mencadangkan satu komit.
Squashing
Memencet komit berarti menggabungkan dua atau lebih komit menjadi satu. Saya cukup sering melakukan ini. Dalam kasus Anda, Anda memiliki setengah fitur yang dikomit, dan kemudian Anda akan menyelesaikannya dan melakukan lagi dengan pesan komit permanen yang tepat.
git rebase -i <ref>
Saya katakan di atas karena saya ingin memperjelas ini bisa menjadi jumlah komit kembali. Jalankan git log
dan temukan komit yang ingin Anda singkirkan, salin SHA1-nya dan gunakan sebagai ganti <ref>
. Git akan membawa Anda ke mode rebase interaktif. Ini akan menunjukkan semua komitmen antara keadaan Anda saat ini dan apa pun yang Anda lakukan <ref>
. Jadi jika <ref>
10 komit yang lalu, itu akan menampilkan 10 komit.
Di depan setiap komit, akan ada kata pick
. Temukan komit yang ingin Anda singkirkan dan ubah dari pick
menjadi fixup
atau squash
. Menggunakan fixup
hanya discards yang melakukan pesan dan menggabungkan perubahan ke pendahulunya langsung dalam daftar. Kata squash
kunci melakukan hal yang sama, tetapi memungkinkan Anda untuk mengedit pesan komit dari komit baru digabungkan.
Perhatikan bahwa komit akan dikomit ulang sesuai urutan yang ditampilkan pada daftar saat Anda keluar dari editor. Jadi jika Anda membuat komit sementara, maka lakukan pekerjaan lain di cabang yang sama, dan selesaikan fitur di komit kemudian, kemudian menggunakan rebase akan memungkinkan Anda untuk mengurutkan ulang komit dan menghancurkannya.
PERINGATAN:
Rebasing memodifikasi riwayat - JANGAN lakukan ini pada komit yang telah Anda bagikan dengan pengembang lain.
Stashing
Di masa depan, untuk menghindari masalah ini pertimbangkan git stash
untuk menyimpan sementara pekerjaan yang tidak dikomit.
git stash save 'some message'
Ini akan menyimpan perubahan Anda saat ini ke sisi dalam daftar simpanan Anda. Di atas adalah versi yang paling eksplisit dari perintah simpanan, memungkinkan komentar untuk menggambarkan apa yang Anda simpan. Anda juga dapat menjalankan git stash
dan tidak ada yang lain, tetapi tidak ada pesan yang akan disimpan.
Anda dapat menelusuri daftar simpanan Anda dengan ...
git stash list
Ini akan menunjukkan kepada Anda semua simpanan Anda, cabang apa yang telah mereka lakukan, dan pesan dan di awal setiap baris, dan pengidentifikasi untuk simpanan yang terlihat seperti ini di stash@{#}
mana # adalah posisinya dalam susunan simpanan .
Untuk mengembalikan simpanan (yang dapat dilakukan pada cabang apa pun, terlepas dari tempat simpanan awalnya dibuat) Anda cukup menjalankan ...
git stash apply stash@{#}
Sekali lagi, ada posisi # dalam susunan simpanan. Jika simpanan yang ingin Anda pulihkan ada di 0
posisi - yaitu, jika simpanan terbaru. Maka Anda hanya dapat menjalankan perintah tanpa menentukan posisi simpanan, git akan menganggap Anda berarti yang terakhir: git stash apply
.
Jadi, misalnya, jika saya menemukan diri saya bekerja di cabang yang salah - saya dapat menjalankan urutan perintah berikut.
git stash
git checkout <correct_branch>
git stash apply
Dalam kasus Anda, Anda bergerak sedikit lebih banyak, tetapi ide yang sama masih berlaku.
Semoga ini membantu.
git stash