2013-03-15 24 views
18

Tôi vẫn là người mới chơi git. Tôi đã sửa đổi một số tệp nguồn và cam kết. Sau đó, tôi đã làm git push. Nhưng, tôi có lỗi này.git: Tại sao "Merge branch 'master" của ... "? khi kéo và đẩy

To /foo/bar/ ! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to '/foo/bar/' To prevent you from 
losing history, non-fast-forward updates were rejected Merge the 
remote changes before pushing again. See the 'Note about 
fast-forwards' section of 'git push --help' for details. 

Từ chối này có vẻ như tôi không git pull trước push. Vì vậy, tôi đã làm git pull. Được rồi, có hai tệp được sửa đổi bởi những người khác.

Sau đó, tôi đã có thể git push thành công.

Câu hỏi: Trong trường hợp này, tôi nhìn thấy thêm một bản ghi như sau với cam kết thông báo ban đầu của tôi:

commit 59e04ce13b8afa... 
Merge: 64240ba 76008a5 
Author: Jone Doe <[email protected]> 
Date: Fri Mar 15 11:08:55 2013 -0700 

    Merge branch 'master' of /foo/bar/ 

Và đây là cam kết thông báo ban đầu của tôi.

commit 64240bafb07705c... 
Author: Jone Doe <[email protected]> 
Date: Fri Mar 15 11:06:18 2013 -0700 

    Fixed bugs and updated! 

Tôi muốn hiểu lý do tại sao "tổng hợp nhánh chi nhánh" được thêm vào.

+0

Có thể trùng lặp với [Git pull results in unge branch "Merge branch" tin nhắn trong nhật ký cam kết] (http://stackoverflow.com/questions/8509396/git-pull-results-in-extraneous-merge-branch-messages-in-commit-log), trong đó có nhiều câu trả lời chi tiết hơn –

Trả lời

14

Khi bạn đã thực hiện git-pull, các sửa đổi từ chi nhánh từ xa đã được hợp nhất vào chi nhánh địa phương của bạn. Cam kết được tạo tự động biểu thị điều đó.

Việc hợp nhất có thể dẫn đến xung đột, sau đó việc này cần được giải quyết thủ công. Trong trường hợp cụ thể của bạn, điều này đã không xảy ra và git có thể chăm sóc tất cả mọi thứ.

+0

có cách nào để tránh cam kết bổ sung đó không? Ví dụ bằng cách bao gồm các sửa đổi sáp nhập trong cam kết hiện tại (* Sửa lỗi và cập nhật! * Ở trên)? Bởi vì nó gây ô nhiễm lịch sử nhật ký. – Kalvn

+3

Git sẽ cố gắng thực hiện hợp nhất chuyển tiếp nhanh nếu nhánh ở xa phía trước nhánh địa phương, tức là nhánh từ xa có một số cam kết ở trên cùng của các cam kết của nhánh địa phương. Trong trường hợp này, không có cam kết bổ sung. Cam kết bổ sung chỉ xuất hiện khi lịch sử của hai nhánh phân tán. Trong trường hợp này, bạn có thể viết lại lịch sử commit của nhánh nội bộ bằng cách sử dụng 'git rebase' hoặc' git pull --rebase', thực hiện quá trình hợp nhất nhanh. Rebasing có nhược điểm riêng của mình mặc dù và cam kết hợp nhất thêm không phải lúc nào cũng xấu - họ chỉ ghi lại quá trình phát triển. –

+0

Cảm ơn lời giải thích :) – Kalvn

7

Nếu có thể được thay đổi bởi những người khác, nó có thể là một ý tưởng tốt để làm một git pull --rebase (ví dụ, thêm những thay đổi mới của bạn sau những thay đổi từ xa, điều này có thể tìm thấy những xung đột bạn sẽ phải giải quyết) và sau đó git push kết quả. Hãy cẩn thận, điều này tạo ra các cam kết mới chưa từng tồn tại trước đây (cũng như bất kỳ lịch sử viết lại nào), nhưng nó mang lại một lịch sử tuyến tính sạch sẽ (không có mớ hỗn hợp)

Các vấn đề liên quan