cari

Rumah  >  Soal Jawab  >  teks badan

Git怎样撤销一次分支的合并Merge

合并分支后,发现合并错了分支。
master上还没有提交任何东西,想取消这次合并,让分支回到位,肿么办?

好在现在还没commit另外的内容,如果不小心commit了,那又该怎么办啊?

伊谢尔伦伊谢尔伦2810 hari yang lalu867

membalas semua(6)saya akan balas

  • 黄舟

    黄舟2017-04-21 11:18:49

    Sungguh pelik alat pengurusan git Terdapat banyak penjelasan untuk masalah, dan anda tidak dapat mengetahui yang mana satu yang betul sepintas lalu.
    http://git-scm.com/blog/2010/03/02/undoing-merges.html Ini jawapan rasmi saya akan terjemahkannya di sini selepas saya selesai membacanya.

    ===================== Terjemahan mudah bermula =====================

    Oleh kerana terlalu ramai orang bertanya cara untuk membuat asal cantuman, git secara rasmi mengeluarkan tutorial ini untuk menunjukkan cara mencapai matlamat untuk membatalkan cantuman di bawah sistem ideologi sedia ada git.

    Kaedah 1, tetapkan semula kepada versi sebelum bergabung, dan kemudian buat semula operasi seterusnya Setiap kolaborator dikehendaki mengetahui cara untuk melancarkan HEAD setempat:

    $ git checkout 【行merge操作时所在的分支】
    $ git reset --hard 【merge前的版本号】
    

    Kaedah 2, apabila terdapat operasi dan perubahan lain selepas gabungan, git juga mempunyai cara untuk membatalkan gabungan, gunakan git revert:

    $ git revert -m 【要撤销的那条merge线的编号,从1开始计算(怎么看哪条线是几啊?)】 【merge前的版本号】
    Finished one revert.
    [master 88edd6d] Revert "Merge branch 'jk/post-checkout'"
     1 files changed, 0 insertions(+), 2 deletions(-)
    

    Ini akan membuat komitmen baharu untuk mengimbangi operasi gabungan yang sepadan, dan kemudian git merge [cawangan yang diwakili oleh nombor itu] akan menggesa:

    Already up-to-date.
    

    Kerana menggunakan kaedah 2 akan membuat git tersalah anggap bahawa perkara dalam cawangan ini adalah perkara yang kita tidak mahu.

    Kaedah tiga , cara membatalkan kaedah dua:

    $ git revert 【方法二撤销merge时提交的commit的版本号,这里是88edd6d】
    Finished one revert.
    [master 268e243] Revert "Revert "Merge branch 'jk/post-checkout'""
     1 files changed, 2 insertions(+), 0 deletions(-)
    

    Itu sahaja, anda boleh bergabung seperti biasa, tetapi mungkin terdapat banyak konflik! !

    $ git merge jk/post-checkout
    Auto-merging test.txt
    Merge made by recursive.
     test.txt |    1 +
     1 files changed, 1 insertions(+), 0 deletions(-)
    

    ===================================Tamat terjemahan mudah =======

    Pada akhirnya, saya masih merasakan bahawa yang teratas terlalu menyusahkan. Bagi mereka yang menggunakan WebStorm untuk menulis kod di bahagian hadapan setiap hari, lihat: WebStorm Klik kanan fail atau folder projek, dan terdapat:

    Sejarah Tempatan -> Papar Sejarah

    Selepas mengkliknya, tetingkap akan muncul di mana anda boleh melihat semua perubahan setempat. Cari yang betul dan tekan yang di sudut kiri atas:

    Berbalik

    Butang

    , iaitu anak panah kecil melengkung berwarna ungu, kembali ke belakang. Ia sangat berguna apabila saiz fail tidak besar dan sangat disyorkan.

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-21 11:18:49

    Jika anda pasti akan meninggalkan komit gabungan ini, jika anda menggabungkan cawangan yang salah untuk dikuasai, mula-mula gunakan git reflog atau gitg, gitk, qgit dan alatan lain untuk menentukan komit di mana induk berada sebelum anda digabungkan, dan kemudian gunakannya pada cawangan induk git reset --hard <commit> Tetapkan semula penuding kepala. Secara umumnya, melaksanakan git reset --hard HEAD~ terus pada induk juga boleh kembali ke komit sebelum digabungkan, tetapi lebih baik menggunakan komit yang disahkan untuk perintah git reset --hard. Ambil perhatian bahawa perintah git reset --hard adalah berisiko Melainkan anda sangat pasti bahawa anda ingin meninggalkan penyerahan semasa, sebaiknya git branch membuat rujukan cawangan baharu untuk penyerahan semasa sebelum meneruskannya selepas mengesahkan bahawa ia adalah betul.

    Jika terdapat komit baharu selepas cantuman yang salah, anda boleh menggunakan git rebase --onto <错误的合并提交> <正确的合并提交> <新提交所在分支> untuk membina semula komit baharu pada komit gabungan yang betul selepas melengkapkan cantuman betul yang disebutkan di atas. Urutan komit yang dibina semula oleh perintah git rebase --onto adalah linear terbaik, jika tidak, komit bukan linear akan menjadi linear. Jika anda perlu menyimpan sejarah penyerahan bukan linear, anda boleh mempertimbangkan untuk menggunakan parameter --preserve-merges, tetapi hasilnya sangat tidak boleh dipercayai, bergantung pada tahap ketidaklinearan penyerahan.

    balas
    0
  • PHPz

    PHPz2017-04-21 11:18:49

    B-R-A-N-C-H
    / --Gabung
    M-A-S-T-E-R----M

    Anda boleh menggunakan git reset --nilai hash R keras dan kembali ke R. Kembali dari M selepas Gabung ke R.

    balas
    0
  • 高洛峰

    高洛峰2017-04-21 11:18:49

    Saya rasa git merge --abort diperlukan di sini

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-21 11:18:49

    Jika anda menghadapi konflik semasa penggabungan dan ingin membatalkan operasi dan memulihkan indeks, gunakan git merge --abort
    git reset --hard boleh kembali ke komit tertentu
    git revert boleh membuat asal komit, dan membuat asal akan menghasilkan komit baharu

    Git rebase belum dikaji dengan teliti.

    balas
    0
  • 巴扎黑

    巴扎黑2017-04-21 11:18:49

    http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/howto/revert-a-faulty-merge.txt

    Siapa yang mempunyai masa untuk menterjemahkannya?

    balas
    0
  • Batalbalas