Tại sao git lại nhắc tôi về một thông báo cam kết hợp nhất sau kéo?


142

Gần đây, 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 một 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 thành việc kéo.

Trong quá khứ, nó sẽ thực hiện việc hợp nhất một cách âm thầm, với một thông điệp cam kết tiêu chuẩn (dọc theo 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 cứ điều gì khác mà tôi có thể đã làm để thay đổi hành vi này. Đây có phải là một thiết lập, hoặc có cách nào khác để trở lại như cũ không?

Câu trả lời:


157

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

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


54
Cảm ơn đã giúp đỡ. Mặc dù vậy, tôi không đồng ý rằng các cam kết hợp nhất phải luôn được mô tả. Lý do tôi tìm kiếm điều này là vì tự động hợp nhất bất cứ khi nào tôi yêu cầu tôi giải thích lý do tại sao việc hợp nhất là cần thiết, điều này nhanh chóng trở nên vô 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

10
Đây cũng là một tài nguyên hữu ích để tránh hành vi này: longair.net/blog/2009/04/16/git-fetch-and-merge Bạn nên tránh git pull; sử dụng git merge --ff-onlynếu bạn chỉ đang cố 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-ffnếu bạn thực sự đang cố gắng hợp nhất một chi nhánh.
Glyph

6
Có một cờ cấu hình để tắt cái này không? Thật khó chịu khi phải gõ --no-edit mỗi lần.
LandonSchropp

Tuyệt vời. Cảm ơn đã chia sẻ @Christopher.
LandonSchropp

3
@SeanCoetzee: Tùy thuộc vào $EDITORcài đặt của bạn , nhưng nếu bạn đang sử dụng git out of the box trên OSX thì đó có thể là một chương trình có tên là 'vi' . Nhập iđể vào chế độ "CHERTN"; gõ tin nhắn của bạn. Sau đó, bạn có thể lưu và thoát bằng cách nhấn ESCvà sau đó gõ :wq.
Christopher

58

Để tạo lối tắt cho việc sử dụng trong tương lai,:

Chỉnh sửa của bạn ~/.gitconfigvới những điều sau đây:

[core]
    mergeoptions = --no-edit

Hoặc thực hiện các thao tác sau trong Terminal

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


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

lệnh đầu cuối phải giống như dưới đâygit config core.mergeoptions --no-edit
S. Mert

@SimsekMert sẽ chỉ chỉnh sửa .gitconfig trong kho lưu trữ hiện tại, không phải trên toàn cầu cho mọi kho lưu trữ git
Dallas Clark

@AbhishekGoel có thể bạn cần khởi động lại Terminal để những thay đổi có hiệu lực
Dallas Clark

@jvannistelrooy có thể bạn cần khởi động lại Terminal để những thay đổi có hiệu lực
Dallas Clark

11

Đầu tiên, hãy chú ý đến những cảnh báo trong câu trả lời của Christopher ở trên.

Sau đó, nếu bạn vẫn muốn tắt tự động hợp nhất chỉnh sửa thông báo cam kết, hãy đặt biến môi trường này:

    GIT_MERGE_AUTOEDIT=no

Biến môi trường này và cài đặt "không" của nó được ghi lại trên trang tài liệu hợp nhất git . Bạn chỉ nên sử dụng nó trong các tập lệnh cần hợp nhất không tương tác, nhưng tất nhiên nó có thể được đặt làm một phần của môi trường shell của bạn để làm cho hiệu ứng của nó lâu dài hơn.


Bạn có thể giải thích làm thế nào điều này có thể khác với việc sử dụng --no-editcờ?
Alexander Mills

2
Tôi không biết về sự khác biệt về chức năng, nhưng yếu tố tiện lợi làm cho nó đáng giá. Các --no-editcờ phải được lặp đi lặp lại trên dòng lệnh với nhau sử dụng, vì nó không xuất hiện để làm việc trong các thiết lập như mô tả trong câu trả lời Dallas Clark ở đây. Đặt biến môi trường là cách duy nhất tôi biết để thực hiện cài đặt này.
emackey
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.