Khi nào git rebase có xung đột?

Sep 28 2020

Tôi đã đọc một số bài viết trên diễn đàn này, progit, Youtube và một số blog ngẫu nhiên về rebase.

Hình thức chung nhất để kết luận chủ đề này là:

- A - B - C   Master
   \  D - E Topic

và tôi thực hiện:

git checkout Topic
git rebase Master

Lý tưởng nhất, nó sẽ là:

- A - B - C - D' - E' Master, Topic

Nhưng 2 mối quan tâm là:

  1. Có phải D '= D, E' = E không?
  2. Xung đột git rebase là gì?

Về mối quan tâm đầu tiên và bài đăng này ,

  1. Rebase thực hiện hợp nhất trên D và E, và trên hết, với đầu vào phức tạp.

Ví dụ, khi nó chuyển đến D, theo bài đăng và nếu tôi đúng

  1. HEAD tách ra thành C
  2. Git so sánh giữa những thay đổi từ A sang D và những thay đổi từ A sang C
  3. Sau khi hợp nhất, git so sánh giữa D ', D và E

Và điều này làm tôi bối rối nhất. Tại sao hợp nhất liên quan đến nhiều hơn 2 cam kết? Ngoài ra, xung đột xuất hiện như thế nào?

BIÊN TẬP:

Chạy một số lệnh, vui lòng xem như sau:

git init

Đã tạo Nội dung Random.txt: Chính 1

git add Random.txt
git commit -m "Master 1"

Tạo chi nhánh mới

git checkout -b rebase_conflict

Nội dung Alter Random.txt: 1

git add Random.txt
git commit -m "Conflict 1"

Thay đổi ngẫu nhiên. txt Nội dung: 2

git add Random.txt
git commit -m "Conflict 1"

Chuyển sang chế độ chính

git checkout master

Nội dung Alter Random.txt: Master 2

git add Random.txt
git commit -m "Master 2"

Chuyển nhánh và cơ sở lại

git checkout rebase_conflict
git rebase master

Nhận lỗi xung đột Nội dung thay thế Random.txt: 1

git add Random.txt
git rebase --continue

Tại thời điểm này, tôi mong đợi một xung đột rebase khác, bởi vì theo logic

-- Master 1 -- Master 2
  \ -- Conflict 1 -- Conflict 2

Sau lần rebase đầu tiên

-- Master 1 -- Master 2 -- Conflict 1'
 \ -- Conflict 1 -- Conflict 2

Ở giai đoạn này, tôi đang mong đợi một cam kết mới ở đầu Xung đột 1 '. Không có xung đột hợp nhất giữa Xung đột 2 và Xung đột 1 '?

Vì Xung đột 1 'nội dung Random.txt: 1, trong khi

Xung đột 2 Nội dung Random.txt: 2

Họ thay đổi cùng một dòng, phải không?

Trả lời

TimBiegeleisen Sep 28 2020 at 20:27

Hợp nhất hoặc khôi phục trong ví dụ trên của bạn có thể dẫn đến xung đột hợp nhất. Có thể chỉ cái này hay cái kia cũng có xung đột. Để hiểu tác dụng của việc phục hồi, hãy xem xét sơ đồ sau cho thấy những gì Topicsẽ trông như thế nào sau khi khôi phục lại Master:

Topic:  -- A -- B -- C -- D' -- E'

Ở đây dấu nháy đơn chỉ ra rằng dấu Dvà Ecam kết đã được áp dụng lại vào cơ sở mới của Master. Khi mỗi cam kết được áp dụng lại, có cơ hội xảy ra xung đột hợp nhất. Vì vậy, trong trường hợp áp dụng lại N cam kết, có thể có N tập hợp các xung đột hợp nhất. Mặt khác, hợp nhất sẽ luôn dẫn đến nhiều nhất một tập hợp các xung đột hợp nhất. Nếu đây là mối quan tâm của bạn, thì bạn có thể ủng hộ việc hợp nhất hơn là giảm giá.