Apa cara paling sederhana untuk membatalkan komitmen tertentu yaitu:
- tidak di kepala atau KEPALA
- Telah didorong ke remote.
Karena jika itu bukan komitmen terbaru,
git reset HEAD
tidak bekerja Dan karena telah didorong ke remote,
git rebase -i
dan
git rebase --onto
akan menyebabkan beberapa masalah di remote.
Terlebih lagi, saya benar-benar tidak ingin memodifikasi sejarah. Jika ada kode buruk, itu ada di sana dalam sejarah dan bisa dilihat. Saya hanya ingin itu dalam copy pekerjaan, dan saya tidak keberatan komit penggabungan terbalik.
Dengan kata lain, apa yang setara dengan Git dari perintah svn berikut:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
yang menghapus semua perubahan dari 295 hingga 302 dengan membalikkan semua perubahan dalam revisi tersebut, sebagai komit baru.
svn merge -c -302 ^/trunk
yang membatalkan 302 commit, tentu saja dengan menambahkan commit lain yang membalikkan menggabungkan perubahan dari commit tersebut.
Saya pikir itu harus menjadi operasi yang cukup sederhana di Git dan kasus penggunaan yang cukup umum. Apa lagi maksud dari komitmen atom?
Kami memiliki staging stashing dan semuanya untuk memastikan bahwa komit adalah atomik sempurna, tidakkah Anda dapat membatalkan satu atau lebih dari komit atomik itu dengan mudah?
sumber
Saya tidak suka komit otomatis yang
git revert
melakukannya, jadi ini mungkin bermanfaat bagi sebagian orang.Jika Anda hanya ingin file yang dimodifikasi bukan komitmen otomatis , Anda dapat menggunakannya
--no-commit
yang sama dengan
-n
sumber
git reset HEAD~1 --soft
jika Anda sudah kembali tanpa-n
git reset HEAD~n
tidak akan menyelesaikan kehancuran dari komitmen yang tidak dapat dijangkau dari kepala. Kueri adalah untuk mengembalikan komit tertentu.git revert --continue
seperti yang diperintahkan kepada saya. Itu berhasil, tetapi sayangnya hasilnya berkomitmen. Mungkin saya perlu melakukannyagit revert --no-commit --continue
.git revert
, jika Anda lupa-n
; karena pada saat itu komit terakhir adalah pengembalian, sehingga soft reset akan membatalkan komit itu tetapi tidak terkait perubahan kode revertKarena sudah didorong, Anda tidak boleh secara langsung memanipulasi sejarah.
git revert
akan mengembalikan perubahan spesifik dari komit menggunakan komit baru, sehingga tidak memanipulasi riwayat komit.sumber
Jika komit yang ingin Anda kembalikan adalah komit gabungan (sudah digabung), maka Anda harus memilih salah satu
-m 1
atau-m 2
seperti yang ditunjukkan di bawah ini. Ini akan memberi tahu git komit mana dari komit gabungan untuk digunakan. Rincian lebih lanjut dapat ditemukan di SINI .git revert <commit> -m 1
git revert <commit> -m 2
sumber