Cách nhận các thay đổi từ chi nhánh khác


84

Tôi hiện đang làm việc trên featurexchi nhánh. Chi nhánh chính của chúng tôi được đặt tên là chi nhánh our-team. Kể từ khi tôi bắt đầu làm việc featurex, nhiều thay đổi hơn đã được thực hiện đối với chi nhánh our-team. Trước khi thúc đẩy featurexviệc hợp nhất, tôi muốn nhận tất cả các thay đổi từ our-teamchi nhánh vào featurexđể đảm bảo mọi thứ hoạt động như mong đợi.

Tôi đã thực hiện điều này cục bộ để nhận tất cả các thay đổi mới nhất our-team.

git checkout our-team
git pull

Làm thế nào tôi có thể làm điều đó?


6
Bạn đã đặt câu hỏi rất cố ý và chính xác. Điều này làm cho nó dễ dàng hơn để trả lời cũng như dễ dàng hơn cho những người (chẳng hạn như tôi) hiểu.
douglas.kirschman

Câu trả lời:


45

Ví dụ: bạn có thể sử dụng rebasegit rebase our-team khi bạn ở trên chi nhánh của mìnhfeaturex

Nó sẽ di chuyển điểm bắt đầu của nhánh đến cuối our-teamnhánh của bạn , hợp nhất tất cả các thay đổi trong featurexnhánh của bạn .


3
Tôi sẽ sử dụng nó trong tương lai, tuy nhiên, lần này tôi chỉ làm những điều sau đây..có ảnh hưởng tương tự không? git checkout our-team git pull git checkout featurex git merge our-team
Anthony

5
Tôi muốn nhấn mạnh: nếu bạn làm điều này và bạn không có các thay đổi từ our-teamcục bộ, bạn sẽ cần chạy git fetch && git rebase origin/our-teamthay thế. Các lệnh của bạn giả định rằng kho lưu trữ đã được cập nhật trước đó.
Makoto

97
  1. đi đến chi nhánh chính our-team

    • git checkout nhóm của chúng tôi
  2. kéo tất cả các thay đổi mới từ our-teamchi nhánh

    • git kéo
  3. đi đến chi nhánh của bạn featurex

    • thanh toán git featurex
  4. hợp nhất các thay đổi của our-teamchi nhánh thành featurexchi nhánh

    • hợp nhất git our-team
    • hoặc git cherry-pick{commit-hash} nếu bạn muốn hợp nhất các cam kết cụ thể
  5. đẩy các thay đổi của bạn với các thay đổi của our-teamnhánh

    • git push

Lưu ý : có thể bạn sẽ phải sửa xung đột sau khi hợp nhất our-teamnhánh vào featurexnhánh trước khi đẩy


git sẽ kéo vào đâu?
chia yongkang

26
git fetch origin our-team

hoặc là

git pull origin our-team

nhưng trước tiên, bạn nên đảm bảo rằng bạn đã ở trên nhánh mà bạn muốn cập nhật (featurex).


8

Bạn sắp hoàn thành rồi :)

Tất cả những gì còn lại là

git checkout featurex
git merge our-team

Điều này sẽ hợp nhất nhóm của chúng tôi thành featurex.

Ở trên giả sử bạn đã cam kết / lưu trữ các thay đổi của mình trong featurex, nếu không đúng như vậy, bạn sẽ cần thực hiện việc này trước.


5

Đối với những người khác đến với bài đăng này trên google. Có 2 lựa chọn, hoặc là sáp nhập hoặc rebasing chi nhánh của bạn. Cả hai hoạt động khác nhau, nhưng có kết quả tương tự.

Các câu trả lời được chấp nhận là một rebase . Thao tác này sẽ thực hiện tất cả các cam kết đã thực hiện our-team và sau đó áp dụng các cam kết đã thực hiện featurex, nhắc bạn hợp nhất chúng nếu cần.

Một lưu ý nhỏ của việc phục hồi là bạn mất / viết lại lịch sử chi nhánh của mình, về cơ bản nói với git rằng chi nhánh của bạn không bắt đầu ở mức cam kết 123abc mà ở mức cam kết 456cde. Điều này sẽ gây ra vấn đề cho những người khác làm việc trên chi nhánh và một số công cụ từ xa sẽ phàn nàn về điều đó. Tuy nhiên, nếu bạn chắc chắn về những gì bạn đang làm, thì đó là điều mà --forcelá cờ dành cho bạn.

Những gì các áp phích khác đang đề xuất là một sự hợp nhất . Điều này sẽ đưa featurexnhánh, với bất kỳ trạng thái nào mà nó có và cố gắng hợp nhất nó với trạng thái hiện tại our-team, nhắc bạn thực hiện một, lớn, hợp nhất cam kết và sửa tất cả các lỗi hợp nhất trước khi đẩy sang our-team. Sự khác biệt là bạn đang áp dụng các featurexcam kết của mình trước khi các our-teamcam kết mới và sau đó sửa các điểm khác biệt. Bạn cũng không viết lại lịch sử, thay vào đó hãy thêm một cam kết vào nó thay vì viết lại những gì đã có trước đó.

Cả hai tùy chọn đều hợp lệ và có thể hoạt động song song. Điều thường làm (theo ý tôi là, nếu bạn đang sử dụng các công cụ và phương pháp luận phổ biến như git-flow ) được thực hiện cho một nhánh tính năng là hợp nhất nó vào nhánh chính, thường thông qua một yêu cầu hợp nhất và giải quyết tất cả các xung đột phát sinh thành một (hoặc nhiều) cam kết hợp nhất.

Rebasing là một tùy chọn thú vị, có thể giúp bạn sửa chữa chi nhánh của mình trước khi tiến hành hợp nhất và giảm bớt nỗi đau khi phải thực hiện một cam kết hợp nhất lớn.

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.