2012-07-31 34 views
107

Gần đây, theo sau bất kỳ git pull, git đã bắt đầu sinh ra trình soạn thảo văn bản của tôi và yêu cầu thông báo cam kết hợp nhất. Một thông điệp cam kết đã được điền sẵn, và tôi chỉ cần lưu và đóng cửa sổ để hoàn tất việc kéo.Tại sao git nhắc tôi cho một tin nhắn cam kết hợp nhất sau khi kéo?

Trong quá khứ, nó sẽ thực hiện hợp nhất âm thầm, với thông báo cam kết chuẩn (dọc theo các dòng Merge branch 'dev' of remote.com:/repo into dev).

Gần đây tôi đã cập nhật git lên phiên bản 1.7.11.3 (thông qua homebrew), nhưng không thể nghĩ ra bất kỳ điều gì khác mà tôi có thể đã thực hiện để thay đổi hành vi này. Đây có phải là một thiết lập, hoặc là có cách nào khác để lấy lại cách nó được?

Trả lời

122

Trong git 1.7.10, các nhà phát triển git quyết định hợp nhất các cam kết có thể được thực hiện quá dễ dàng. Như được giải thích trong this blog post, buộc hành vi thông báo cam kết tương tác phải làm cho những thông điệp cam kết đó chi tiết hơn và có thể làm giảm tần suất tổng hợp các hợp nhất không cần thiết.

Bạn có thể sử dụng cờ --no-edit để tránh hành vi này, nhưng, tốt, không. Hợp nhất các cam kết, giống như bất kỳ cam kết nào trong lịch sử, cũng nên được xây dựng tốt. Lịch sử của bạn sẽ không là gì ngoài hữu ích.

+0

Tuyệt vời, cảm ơn thông tin đó. – shanebonham

+40

Cảm ơn sự giúp đỡ. Tôi không đồng ý rằng các cam kết hợp nhất phải luôn mang tính mô tả. Lý do tôi tìm kiếm điều này là vì sự kết hợp tự động bất cứ khi nào tôi kéo yêu cầu tôi giải thích tại sao hợp nhất là cần thiết, nhanh chóng trở nên không hợp lý vì nó thậm chí còn làm điều đó khi tôi không có bất kỳ thay đổi nào. – Brian

+8

Đây cũng là một tài nguyên hữu ích để tránh hành vi này: http://longair.net/blog/2009/04/16/git-fetch-and-merge/ Bạn nên tránh 'git pull'; sử dụng 'git merge --ff-only' nếu bạn chỉ đang cố gắng cập nhật và bạn không nghĩ rằng bạn có bất kỳ thay đổi cục bộ nào; sử dụng 'git merge --no-ff' nếu bạn đang thực sự cố gắng hợp nhất một nhánh. – Glyph

40

Để tạo một shortcut để sử dụng trong tương lai, hoặc: -

Chỉnh sửa của bạn ~/.gitconfig như sau:

[core] 
    mergeoptions = --no-edit 

Hoặc thực hiện như sau trong Terminal

git config --global core.mergeoptions --no-edit

+12

Điều này không hiệu quả đối với tôi (git trên OSX), và tôi đã cài đặt nó một cách chính xác, xem đầu ra của 'git config --global core.mergeoptions'. – jvannistelrooy

+3

Không làm việc cho tôi –

4

Thứ nhất, chú ý đến các cảnh báo trong câu trả lời của Christopher ở trên.

Sau đó, nếu bạn vẫn muốn vô hiệu hóa tự động hợp nhất cam kết chỉnh sửa tin nhắn, thiết lập biến môi trường này:

GIT_MERGE_AUTOEDIT = no 

này biến môi trường và "không" thiết lập của nó là tài liệu trên trang git merge doc. Bạn nên sử dụng nó chỉ trong các kịch bản cần hợp nhất không tương tác, nhưng tất nhiên nó có thể được thiết lập như là một phần của môi trường vỏ của bạn để làm cho các hiệu ứng của nó trở nên vĩnh viễn hơn.

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