Git Merge –no-ff Option

Git Merge No Ff Option



Keupayaan menggabungkan git yang mudah adalah salah satu kelebihannya. Semasa penggabungan, git menggunakan penggabungan maju cepat apabila menyedari bahawa KEPALA cabang semasa adalah nenek moyang dari komitmen yang anda cuba gabungkan. Dalam penggabungan maju cepat, tidak ada komitmen baru. Git hanya menggerakkan penunjuk. Sekiranya tingkah laku ini tidak diingini, anda boleh menggunakan bendera no-ff untuk membuat komit baru untuk penggabungan.

Bagaimana Gabungan Nampak Dengan dan Tanpa Maju Cepat

Setelah maju cepat, sejarah git anda akan kelihatan seperti ini:







C0 -> C1 -> C2—> C3



Untuk jumlah komitmen yang sama, berikut adalah sejarah penggabungan tanpa penerusan cepat:







Dalam kes pertama, tidak ada petunjuk bahawa terdapat percabangan. Dalam kes kedua, sejarah menunjukkan komitmen C4 untuk menunjukkan di mana penggabungan itu berlaku.

Berjalan Melalui Contoh

Anda akan membuat git repositori, membuat cawangan dan kemudian mencuba penggabungan dengan dan tanpa maju cepat.



Bahagian 1: Persediaan

Pertama, anda boleh membuat git repositori dengan langkah-langkah berikut:

$ mkdir my_projek
$ cd my_projek
$ git init
$ sentuh a.txt
$ git add -A
$ git commit -m 'C0: Menambah a.txt'

Sekarang mari kita buat cabang yang disebut ciri dan lakukan beberapa perubahan:

ciri cawangan $ git
ciri $ git checkout
$ sentuh b.txt
$ git add -A
$ git commit -m 'C1: Menambah b.txt'
$ sentuh c.txt
$ git add -A
$ git commit -m 'C2: Menambah c.txt'
$ sentuh d.txt
$ git add -A
$ git commit -m 'C3: Menambah d.txt'

Bahagian2: Gabungan Dengan Penghantaran Cepat

Mari kembali ke cabang induk dan gabungkan cabang ciri ke dalamnya:

$git checkouttuan
$git bergabungciri-ciri

Pengeluaran:

Mengemas kini 08076fb..9ee88eb
Maju pantas
b.txt | 0
c.txt | 0
d.txt | 0
3 fail diubah, 0 sisipan (+), 0 penghapusan (-)
buat mod 100644 b.txt
buat mod 100644 c.txt
buat mod 100644 d.txt

Sekiranya anda menyemak sejarah, anda akan melihat:

$ git log - talian
9ee88eb C3: Menambah d.txt
c72b92c C2: Menambah c.txt
2e4039e C1: Menambah b.txt
08076fb C0: Menambah a.txt

Jadi, semua komitmen dari cabang ciri ada di cawangan induk sekarang. Sekiranya anda terus melakukan perubahan pada master, tidak ada cara untuk mengetahui kapan cabang fitur digabungkan ke dalamnya.

Bahagian 3: Tanpa Penghantaran Cepat

Ulangi Bahagian 1 untuk folder baru.

Kemudian, cubalah penggabungan tanpa pemajuan pantas:

$git checkouttuan
$git bergabung --no-ffciri

Ini akan membuka perkara berikut dalam editor teks lalai git anda:

Gabungan cawangan'ciri-ciri'
# Sila masukkan mesej komit untuk menjelaskan mengapa penggabungan ini diperlukan,
# terutamanya jika menggabungkan hulu yang dikemas kini menjadi cabang topik.
#
# Garis yang dimulai dengan '#' akan diabaikan, dan mesej kosong dibatalkan
# komit.

Ubah suai komen. Dalam kes ini, anda hanya boleh menambahkan C4: sebelum Gabungkan 'ciri' cawangan. Keluarannya akan kelihatan seperti ini:

Gabungan dibuat dengan strategi 'recursive'.
b.txt | 0
c.txt | 0
d.txt | 0
3 fail diubah, 0 sisipan (+), 0 penghapusan (-)
buat mod 100644 b.txt
buat mod 100644 c.txt
buat mod 100644 d.txt

Sekarang jika anda menyemak sejarah, ia akan kelihatan seperti berikut:

$ git log - talian
e071527 C4: Gabungkan 'ciri' cawangan
bb79c25 C3: Menambah d.txt
692bd8c C2: Menambah c.txt
a0df62a C1: Menambah b.txt
7575971 C0: Menambah a.txt

Anda dapat melihat bahawa walaupun anda mempunyai perubahan yang sama, versi penggabungan ini mempunyai komitmen C4 tambahan yang menandakan penggabungan cabang ciri menjadi induk.

Kesimpulannya

Bendera git merge no-ff membantu mencipta sejarah yang lebih mudah dibaca. Ia membolehkan anda meletakkan teg yang menunjukkan dengan jelas di mana penggabungan itu berlaku. Ia dapat menjimatkan masa dan usaha semasa melakukan penyahpepijatan.

Sambung belajar:

Rujukan: