Saya tidak berpikir inilah yang dimaksud dengan pertanyaan itu. Penggabungan terbalik di SVN juga mengembalikan perubahan dari komit ke perubahan lokal, jadi Anda bisa mengeditnya dan melakukan lagi.
Untuk membuat komit baru yang 'membatalkan' perubahan dari komit sebelumnya, gunakan:
$ git revert <commit>
Dimungkinkan juga untuk benar-benar menghapus komit dari titik arbitrer di masa lalu dengan melakukan rebasing dan kemudian menyetel ulang, tetapi Anda benar-benar tidak ingin melakukannya jika Anda telah mendorong komit ke repositori lain (atau orang lain telah menarik dari Anda) .
Anda mungkin perlu memberikan -m <parent number>opsi git revertuntuk menentukan perubahan mana yang akan dikembalikan. Jika Anda ingin membatalkan penggabungan riwayat yang tidak diterbitkan, gunakan git reset --hard HEAD^1.
Jakub Narębski
3
Jakub: itu benar jika Anda mengembalikan komit penggabungan, tetapi dalam terminologi Subversion, "penggabungan terbalik" sebenarnya hanyalah nama untuk mengembalikan segala jenis komit.
Ben James
4
Perhatikan bahwa menggunakan -mcara penggabungan mendatang dari cabang yang tidak digabungkan tidak akan menyertakan perubahan dari sebelum penggabungan itu! Lihat schacon.github.com/git/howto/revert-a-faulty-merge.txt untuk mengetahui cara yang tepat untuk menggabungkan kembali cabang yang tidak digabungkan.
Martijn Pieters
125
Untuk mengembalikan sebuah gabungan komit, Anda perlu menggunakan: git revert -m <parent number>. Jadi misalnya, untuk mengembalikan komit gabungan terbaru menggunakan induk dengan nomor 1 Anda akan menggunakan:
git revert -m 1 HEAD
Untuk mengembalikan komit gabungan sebelum komit terakhir, Anda akan melakukan:
git revert -m 1 HEAD^
Gunakan git show <merge commit SHA1>untuk melihat orang tua, penomoran adalah urutan kemunculannya misalnyaMerge: e4c54b3 4725ad2
Bagaimana Anda bisa mendapatkan 'nomor' yang terkait dengan orang tua? Apakah cabang memiliki 'id' numerik intrinsik?
daniyalzade
7
Gunakan git show <merge commit SHA1>untuk melihat orang tua, penomoran adalah urutan kemunculannya, misalnyaMerge: e4c54b3 4725ad2
supermetode
8
Contoh: git revert -m 1 SHA1Perintah itu bekerja bagi saya untuk mengembalikan komit gabungan yang merupakan beberapa komit gabungan sebelum head dan memiliki banyak komit di bawahnya.
c.apolzon
3
Manakah orang tua? E4c54b3 atau 4725ad2?
Dolphin
1
Ini masih belum memberikan info yang cukup tentang bagaimana hasil git show berhubungan dengan nomor induk. Apakah "urutan kemunculannya" berbasis 1? Berbasis 0? Dalam contoh ini secara khusus, apa SHA1 dari induk 1? e4c54b3 atau 4725ad2?
cowlinator
4
Jika saya memahami Anda dengan benar, Anda sedang berbicara tentang melakukan a
svn merge -rn:n-1
untuk mundur dari komit sebelumnya, dalam hal ini, Anda mungkin mencari
Ini membuang komit gabungan, yang tidak melakukan apa yang diminta oleh poster asli. OP mencoba melakukan tambalan terbalik untuk membatalkan perubahan sebelumnya, bukan sama sekali menghapus riwayat perubahan sebelumnya.
-1
Jika Anda tidak ingin mengkomit, atau ingin mengkomit nanti (pesan komit akan tetap disiapkan untuk Anda, yang juga dapat Anda edit):
Jawaban:
Untuk membuat komit baru yang 'membatalkan' perubahan dari komit sebelumnya, gunakan:
Dimungkinkan juga untuk benar-benar menghapus komit dari titik arbitrer di masa lalu dengan melakukan rebasing dan kemudian menyetel ulang, tetapi Anda benar-benar tidak ingin melakukannya jika Anda telah mendorong komit ke repositori lain (atau orang lain telah menarik dari Anda) .
sumber
-m <parent number>
opsigit revert
untuk menentukan perubahan mana yang akan dikembalikan. Jika Anda ingin membatalkan penggabungan riwayat yang tidak diterbitkan, gunakangit reset --hard HEAD^1
.-m
cara penggabungan mendatang dari cabang yang tidak digabungkan tidak akan menyertakan perubahan dari sebelum penggabungan itu! Lihat schacon.github.com/git/howto/revert-a-faulty-merge.txt untuk mengetahui cara yang tepat untuk menggabungkan kembali cabang yang tidak digabungkan.Untuk mengembalikan sebuah gabungan komit, Anda perlu menggunakan:
git revert -m <parent number>
. Jadi misalnya, untuk mengembalikan komit gabungan terbaru menggunakan induk dengan nomor 1 Anda akan menggunakan:Untuk mengembalikan komit gabungan sebelum komit terakhir, Anda akan melakukan:
Gunakan
git show <merge commit SHA1>
untuk melihat orang tua, penomoran adalah urutan kemunculannya misalnyaMerge: e4c54b3 4725ad2
dokumentasi git merge: http://schacon.github.com/git/git-merge.html
diskusi git merge (membingungkan tapi sangat detail): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt
sumber
git show <merge commit SHA1>
untuk melihat orang tua, penomoran adalah urutan kemunculannya, misalnyaMerge: e4c54b3 4725ad2
git revert -m 1 SHA1
Perintah itu bekerja bagi saya untuk mengembalikan komit gabungan yang merupakan beberapa komit gabungan sebelum head dan memiliki banyak komit di bawahnya.Jika saya memahami Anda dengan benar, Anda sedang berbicara tentang melakukan a
untuk mundur dari komit sebelumnya, dalam hal ini, Anda mungkin mencari
sumber
Gunakan perintah di atas untuk mengembalikan perubahan gabungan.
sumber
Jika Anda tidak ingin mengkomit, atau ingin mengkomit nanti (pesan komit akan tetap disiapkan untuk Anda, yang juga dapat Anda edit):
sumber