Git Merge –no-ff Option

Git Merge No Ff Option



Khả năng hợp nhất dễ dàng của git là một trong những điểm mạnh của nó. Trong quá trình hợp nhất, git sử dụng hợp nhất tua đi nhanh khi nhận thấy rằng HEAD của nhánh hiện tại là tổ tiên của cam kết mà bạn đang cố gắng hợp nhất. Trong hợp nhất tua đi nhanh, không có cam kết mới. Git chỉ di chuyển con trỏ. Nếu không mong muốn hành vi này, bạn có thể sử dụng cờ no-ff để tạo một cam kết mới cho quá trình hợp nhất.

Hợp nhất trông như thế nào khi có và không có tua nhanh

Sau khi tua đi nhanh, lịch sử git của bạn sẽ giống như sau:







C0 -> C1 -> C2—> C3



Đối với cùng một số lượng cam kết, đây là lịch sử hợp nhất mà không cần tua đi nhanh:







Trong trường hợp đầu tiên, không có dấu hiệu cho thấy có bất kỳ sự phân nhánh nào. Trong trường hợp thứ hai, lịch sử hiển thị cam kết C4 để chỉ ra nơi hợp nhất đã xảy ra.

Đi qua một ví dụ

Bạn sẽ tạo một kho lưu trữ git, tạo một nhánh và sau đó thử các hợp nhất có và không có tua đi nhanh.



Phần 1: Thiết lập

Trước tiên, bạn có thể tạo kho lưu trữ git bằng các bước sau:

$ mkdir my_project
$ cd my_project
$ git init
$ touch a.txt
$ git thêm -A
$ git commit -m 'C0: Thêm a.txt'

Bây giờ, hãy tạo một nhánh có tên là các tính năng và thực hiện một vài thay đổi:

Các tính năng của chi nhánh $ git
Các tính năng thanh toán của $ git
$ touch b.txt
$ git thêm -A
$ git commit -m 'C1: Thêm b.txt'
$ touch c.txt
$ git thêm -A
$ git commit -m 'C2: Thêm c.txt'
$ touch d.txt
$ git thêm -A
$ git commit -m 'C3: Thêm d.txt'

Phần 2: Hợp nhất với chuyển tiếp nhanh

Hãy quay lại nhánh chính và hợp nhất nhánh các tính năng vào đó:

$thanh toán gitbậc thầy
$hợp nhất gitTính năng, đặc điểm

Đầu ra:

Đang cập nhật 08076fb..9ee88eb
Nhanh về phía trước
b.txt | 0
c.txt | 0
d.txt | 0
3 tệp đã thay đổi, 0 lần chèn (+), 0 lần xóa (-)
chế độ tạo 100644 b.txt
tạo chế độ 100644 c.txt
tạo chế độ 100644 d.txt

Nếu bạn kiểm tra lịch sử, bạn sẽ thấy:

$ git log --oneline
9ee88eb C3: Thêm d.txt
c72b92c C2: Thêm c.txt
2e4039e C1: Thêm b.txt
08076fb C0: Thêm a.txt

Vì vậy, tất cả các cam kết từ chi nhánh tính năng hiện đang ở trong chi nhánh chính. Nếu bạn tiếp tục thực hiện các thay đổi đối với cái chính, không có cách nào để biết khi nào nhánh tính năng đã được hợp nhất vào nó.

Phần 3: Không chuyển tiếp nhanh

Lặp lại Phần 1 cho một thư mục mới.

Sau đó, hãy thử hợp nhất mà không cần chuyển tiếp nhanh:

$thanh toán gitbậc thầy
$hợp nhất git --no-ffđặc tính

Nó sẽ mở ra những thứ sau trong trình soạn thảo văn bản mặc định của git của bạn:

Hợp nhất chi nhánh'Tính năng, đặc điểm'
# Vui lòng nhập thông báo cam kết để giải thích lý do tại sao việc hợp nhất này là cần thiết,
# đặc biệt nếu nó hợp nhất một phần ngược dòng cập nhật vào một nhánh chủ đề.
#
# Các dòng bắt đầu bằng '#' sẽ bị bỏ qua và thông báo trống sẽ hủy bỏ
# cam kết.

Sửa đổi các nhận xét. Trong trường hợp này, bạn chỉ có thể thêm C4: trước khi hợp nhất nhánh ‘tính năng’. Đầu ra sẽ giống như sau:

Hợp nhất được thực hiện bởi chiến lược 'đệ quy'.
b.txt | 0
c.txt | 0
d.txt | 0
3 tệp đã thay đổi, 0 lần chèn (+), 0 lần xóa (-)
chế độ tạo 100644 b.txt
tạo chế độ 100644 c.txt
tạo chế độ 100644 d.txt

Bây giờ nếu bạn kiểm tra lịch sử, nó sẽ giống như sau:

$ git log --oneline
e071527 C4: Hợp nhất nhánh 'tính năng'
bb79c25 C3: Thêm d.txt
692bd8c C2: Thêm c.txt
a0df62a C1: Thêm b.txt
7575971 C0: Thêm a.txt

Bạn có thể thấy rằng mặc dù bạn có những thay đổi giống hệt nhau, nhưng phiên bản hợp nhất này có thêm cam kết C4 để biểu thị việc hợp nhất các nhánh tính năng thành chính.

Phần kết luận

Cờ no-ff hợp nhất git giúp tạo lịch sử dễ đọc hơn. Nó cho phép bạn đặt các thẻ hiển thị rõ ràng nơi các hợp nhất đã xảy ra. Nó có thể giúp bạn tiết kiệm thời gian và công sức trong quá trình gỡ lỗi.

Học cao hơn:

Người giới thiệu: