Rumah  >  Soal Jawab  >  teks badan

Adakah Git merge perlu menggabungkan cawangan? Bolehkah saya menggabungkan dua komitmen?

Git merge operasi gabungan, adakah ia perlu menggabungkan hujung cawangan (hujung cawangan), bolehkah ia menggabungkan mana-mana dua komit?
Sebagai contoh, terdapat hotfix cawangan dan induk cawangan, strukturnya adalah seperti berikut:

      /A+--+B+----+C   hotfix
     /

init---->D +--->E +--->F+---->G master

Soalan 1:
Saya ingin menggabungkan komit di tengah-tengah cawangan thotfix, seperti B, kepada induk cawangan semasa.
Boleh tak?
Oleh kerana berdasarkan penjelasan parameter arahan, commit boleh digunakan dan bukannya nama cawangan branchName.

Soalan 2:
Jika masih terdapat topik cawangan (tidak ditunjukkan dalam gambar), dan cawangan semasa ialah induk, saya ingin menggabungkan cabang pembaikan terbaru dan topik, tetapi tidak menggabungkannya ke dalam induk cawangan semasa, dan jangan tukar cawangan. Saya mahu mengekalkan cawangan semasa saya seorang tuan, bolehkah saya melakukannya?
Oleh kerana menilai daripada parameter arahan, berbilang komit boleh diterima Manual mengatakan bahawa penggabungan berbilang komit membentuk gabungan sotong, saya tertanya-tanya sama ada penggabungan berbilang komit mesti digabungkan ke dalam cawangan semasa. Jadi ada masalah ini.

学习ing学习ing2702 hari yang lalu1306

membalas semua(2)saya akan balas

  • ringa_lee

    ringa_lee2017-06-17 09:17:31

    Gunakan cherry-pick untuk memilih penyerahan yang anda mahukan

    balas
    0
  • 阿神

    阿神2017-06-17 09:17:31

    Pertama sekali, nampaknya ada sesuatu yang tidak kena dengan gambar anda Anda tidak dapat mengetahui di mana dua cabang itu dipisahkan. Anda harus menggunakan git cherry-pick 命令,而不是 merge. Saya hanya boleh meneka, adakah begitu?

       A - B - C           hotfix
      /
    init - D - E - F - G   master

    Jawapan berikut semuanya berdasarkan tekaan ini. Jika ia berbeza dengan anda, sila komen.

    Soalan 1: Secara ringkasnya, sebaiknya gunakan cherry-pick
    首先你要知道,git merge <hash>git cherry-pick <hash> 是不同的。。如果你要在这里用 git merge B, maka anda akan mendapat keputusan ini:

         A  -  B  -  C   hotfix
        /       \
    init-D-E-F-G-G'      master

    Tetapi jika anda git cherry-pick B, anda akan mendapat keputusan ini:

       A - B - C                hotfix
      /
    init - D - E - F - G - B'   master

    merge 有它的优点,因为每一次 merge 其实都是创建一个新的 "merge commit",而且会 "保留历史",所以是一个 "non-destructive"(非破坏性)的过程。当然,cherry-pick 也有它的缺点,首先是创建一个新的 hash,这可能会导致多人协作的混乱。比如有人已经在 G 后面又加了 HJKL,那至少他还要 rebase 一下。另外,这个 B' 也不会像 merge 那样保留自己的历史记录。因此,确切的说,这个 B' 更像是一个 patch。(请参考 git format-patch https://git-scm.com/docs/git-...

    Saya secara peribadi lebih suka cherry-pickrebase 这样的命令,不太喜欢 merge,最主要是因为历史线简洁很多。虽然这两个命令比 merge Ia lebih merosakkan, tetapi adalah baik untuk membiasakan diri dengan git dan mengetahui perkara yang dilakukan oleh setiap langkah dan kesan yang mungkin ada.


    Soalan 2:
    Rasanya macam tak boleh. merge 不像 rebase 那样有类似于 --onto 这样的参数。还是切换过去再 merge Jom buat.

    Apabila anda menyebut gurita bergabung kemudian, anda berkata --strategy=octopus 么?不太确定这个 strategy 和你要问的有什么联系。。因为多个 branchmerge 默认 strategy 就是 octopus。。不用去专门设置。。。顺便,对于单个 HEAD 的 merge, dan strategi lalai adalah rekursif.

    Untuk penggabungan berbilang komitmen yang anda nyatakan, sila huraikan keperluan anda secara terperinci. Atau lukis gambar untuk menambahnya

    balas
    0
  • Batalbalas