Masalah saya adalah saya telah mengubah file misalnya: README, menambahkan baris baru ' ini untuk jalur pengujian saya ' dan menyimpan file, kemudian saya mengeluarkan perintah berikut
git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README
#
no changes added to commit (use "git add" and/or "git commit -a")
git add README
git commit -a -m 'To add new line to readme'
Saya tidak mendorong kode ke github, Sekarang saya ingin membatalkan komit ini.
Untuk ini saya gunakan
git reset --hard HEAD~1
Tapi saya kehilangan baris yang baru ditambahkan ' ini untuk jalur pengujian saya ' dari file README. Ini seharusnya tidak terjadi. Saya perlu konten untuk berada di sana. Apakah ada cara untuk mempertahankan konten dan membatalkan komit lokal saya?
git
git-reset
git-commit
Amal Kumar S
sumber
sumber
git revert
, yang menciptakan komit baru dengan kebalikan dari komit yang dipulihkan. Menyetel ulang cukup mengarahkan cabang Anda saat ini ke komit yang berbeda, dalam hal ini, yang sebelum komit yang ingin Anda "lupakan".git-commit
dapat dibatalkan jika Anda membiarkan pesan kosong, jadi jika Anda belum benar - benar menyelesaikan komit yang dapat membantu.Jawaban:
Cukup gunakan
git reset
tanpa--hard
bendera:PS: Pada sistem berbasis Unix Anda dapat menggunakan
HEAD^
yang sama denganHEAD~1
. Pada WindowsHEAD^
tidak akan berfungsi karena^
menandakan kelanjutan garis. Jadi command prompt Anda hanya akan bertanya kepada AndaMore?
.sumber
--mixed
dalam manual .@^
sebagai singkatanHEAD^
.Gunakan
--soft
sebagai ganti--hard
tanda:sumber
git reset --soft HEAD^
akan menghapus komit lokal terakhir (tidak ditutup) tetapi akan tetap melakukan perubahan yang telah Anda lakukangit reset --soft HEAD~
pada windowsJika Anda berada di tengah-tengah komit (yaitu di editor Anda sudah), Anda dapat membatalkannya dengan menghapus semua baris di atas yang pertama
#
. Itu akan membatalkan komit.Jadi, Anda dapat menghapus semua baris sehingga pesan komit kosong, lalu menyimpan file:
Anda kemudian akan mendapatkan pesan yang mengatakan
Aborting commit due to empty commit message.
.EDIT :
Anda juga dapat menghapus semua baris dan hasilnya akan persis sama.
Untuk menghapus semua baris dalam vim (jika itu adalah editor default Anda), setelah Anda berada di editor, ketik
gg
untuk pergi ke baris pertama, laludG
untuk menghapus semua baris. Akhirnya, tulis dan keluar file denganwq
dan komit Anda akan dibatalkan.sumber
rebase -i mybranchname
Hal pertama yang harus Anda lakukan adalah menentukan apakah Anda ingin menyimpan perubahan lokal sebelum Anda menghapus pesan komit.
Gunakan
git log
untuk menampilkan pesan komit saat ini, kemudian temukancommit_id
sebelum komit yang ingin Anda hapus, bukan komit yang ingin Anda hapus.Jika Anda ingin menyimpan file yang diubah secara lokal, dan hapus saja pesan komit:
git reset --soft commit_id
Jika Anda ingin menghapus semua file yang diubah secara lokal dan pesan komit:
git reset --hard commit_id
Itulah perbedaan lunak dan keras
sumber
Anda dapat memberi tahu Git apa yang harus dilakukan dengan indeks Anda (kumpulan file yang akan menjadi komit berikutnya) dan direktori yang berfungsi ketika melakukan git reset dengan menggunakan salah satu parameter:
--soft
: Hanya komit yang akan direset, sedangkan Indeks dan direktori kerja tidak diubah.--mixed
: Ini akan mengatur ulang indeks agar sesuai dengan KEPALA, sementara direktori kerja tidak akan disentuh. Semua perubahan akan tetap di direktori kerja dan muncul sebagai diubah.--hard
: Ini me-reset segalanya (komit, indeks, direktori kerja) agar sesuai dengan KEPALA.Dalam kasus Anda, saya akan menggunakan
git reset --soft
untuk menyimpan perubahan yang dimodifikasi di Indeks dan direktori kerja. Pastikan untuk memeriksa ini untuk penjelasan yang lebih rinci.sumber
Gunakan perintah di bawah ini:
Setelah ini, Anda juga dapat melihat file apa yang mengembalikan seperti respons di bawah ini.
sumber