Làm thế nào để bạn phản ứng lại các thay đổi của chi nhánh hiện tại trên đầu các thay đổi được hợp nhất?


144

Được chứ. Nếu tôi ở trên một nhánh (nói working) và tôi muốn hợp nhất các thay đổi từ một nhánh khác master, thì tôi sẽ chạy lệnh git-merge mastertrong khi ở workingnhánh đó và các thay đổi sẽ được hợp nhất mà không làm đảo lộn lịch sử. Nếu tôi chạy git-rebase master, thì những thay đổi trong masterđược khởi động lại sẽ được đặt lên đầu workingchi nhánh của tôi . Nhưng điều gì sẽ xảy ra nếu tôi muốn hợp nhất trong các thay đổi từ masternhưng từ chối các thay đổi của tôi trongworking để đứng đầu? Làm thế nào để làm điều đó? Nó có thể được thực hiện?

Tôi có thể chạy git-rebase workingtrên masterchi nhánh của mình để đặt các thay đổi của mình lên hàng đầu trong masterchi nhánh, nhưng tôi muốn có thể làm điều đó trong workingchi nhánh của mình và tôi không biết làm thế nào. Cách gần nhất mà tôi có thể nghĩ đến là tạo ra một nhánh mới từ masterđó và sau đó khởi động lại workingnhững thay đổi của nó, nhưng sau đó tôi sẽ có một nhánh mới thay vì thay đổi workingnhánh.

Câu trả lời:


255

Bạn đã có những gì rebasekhông ngược. git rebase masterthực hiện những gì bạn yêu cầu - lấy các thay đổi trên nhánh hiện tại (vì sự phân kỳ của nó từ chủ) và phát lại chúng trên đầu master, sau đó đặt đầu của nhánh hiện tại làm đầu của lịch sử mới đó. Nó không phát lại các thay đổi từ mastertrên đỉnh của chi nhánh hiện tại.


3
@Jonathan thật tuyệt. Đây là một chút của một chủ đề khó khăn. Nhân tiện, git rebase workingsẽ chuyển masternhững thay đổi của nó (sau khi workingphân nhánh) lên trên đỉnh của workingchi nhánh - nhưng đó không phải là điều rất hợp lý để làm master:)
hobbs

66

Một cách khác để xem xét nó là xem xét git rebase masternhư:

Rebase chi nhánh hiện tại trên đầu trang master

Ở đây, ' master' là nhánh ngược dòng , và điều đó giải thích tại sao, trong một cuộc nổi loạn, ourstheirsbị đảo ngược .


Điều đó cũng giải thích tại sao ĐỊA PHƯƠNG và XÓA bị đảo ngược. Cảm ơn.
Nhà phát triển AVID

@AVIDeveloper trên ĐỊA PHƯƠNG và XÓA, bạn cũng có thể đọc stackoverflow.com/a/3052118/6309
VonC

5
@@ VonC: Cảm ơn. Đúng, sau khi dành một buổi chiều lẩm bẩm với chính mình "XÓA là chi nhánh của tôi .. ĐỊA PHƯƠNG không phải là của tôi", tất cả đều chìm đắm. Thật lòng, tôi thích nhìn thấy các tên chi nhánh (hoặc viết tắt. SHA) thay vì XÓA / ĐỊA PHƯƠNG / của chúng ta / của họ / của tôi. Suy nghĩ của tôi giống nhau về git difftooltrái / phải khủng khiếp. Loại ra khỏi chủ đề, nhưng vì difftooltôi dính vào git-meld và thích những cái tên như 'work-dir', 'stash @ {0}', như vậy.
Nhà phát triển AVID

1
@VonC: Bạn có thể giải thích làm thế nào có thể là như vậy sau khi chúng tôi làm: git checkout branch_to_update git rebase masterTôi nhận được trong git log các cam kết của chủ trên đầu chi nhánh địa phương, thay vì ngược lại?
JavaSa

1
@JavaSa Điều đó thật lạ, trừ khi cuộc nổi loạn không được hoàn thành đúng cách? Bạn có thể cần phải hỏi một câu hỏi riêng biệt với nhiều chi tiết hơn trong đó.
VonC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.