2010-11-18 33 views
14

Đã quen với SVN, tôi luôn thực hiện 'cập nhật' trước khi chia sẻ bất kỳ thay đổi nào, vì vậy trước khi thực hiện bất kỳ thao tác đẩy nào tôi luôn kéo đầu tiên.Ngăn không cho git viết trống hợp nhất cam kết

Thật khó chịu khi tôi kéo (mặc dù không có bất kỳ thay đổi nào đối với điều khiển từ xa) và xem cam kết hợp nhất với 0 changed files with 0 additions and 0 deletions. Các cam kết như:
https://github.com/UCF/Harvard-Mobile-Web/commit/be9d6b2d1ab196554e080d8b8647a9d16c8a5ddf

Tôi thấy điều này là tiếng ồn vô dụng khi xem lịch sử cam kết.

Có thể có điều gì đó tôi thiếu, có bất kỳ điểm nào đối với cam kết này không? Nếu không, có cách nào để ngăn git viết các cam kết hợp nhất trống không?

+0

Bạn dường như đã hợp nhất hai cam kết tự kết hợp hai cùng một cam kết. Vì không phải ai trong số đó là hậu duệ trực tiếp của git khác * có * để thực hiện một cam kết khi bạn yêu cầu nó hợp nhất. Những gì tôi không hiểu là lý do tại sao bạn muốn làm cùng một hợp nhất hai lần và sau đó hợp nhất kết quả. Bạn đã cố gắng làm gì? –

+3

1) Kéo từ thượng lưu [thay đổi hợp nhất] 2) thời gian trôi qua, kéo từ thượng lưu trở lại [sáp nhập nhiều thay đổi] 3) sẵn sàng để đẩy vào ngã ba của tôi, kéo đầu tiên (đảm bảo không có thay đổi trên ngã ba từ đồng nghiệp) - không có thay đổi, chưa hợp nhất trống cam kết bằng văn bản. 'git pull --rebase' chính là thứ tôi đang tìm kiếm. – Doug

Trả lời

20

Định nghĩa chính xác của git pull về bản chất là "tìm nạp và hợp nhất với HEAD từ xa mới cho nhánh hiện tại của tôi". Thay vào đó, nếu bạn muốn rebase, chỉ cần git pull --rebase. Điều này sửa đổi kéo để rebase cam kết của bạn trên đầu của HEAD từ xa mới.

Cá nhân, tôi thích git fetch (tải xuống các đối tượng mới từ xa, nhưng không cập nhật bất kỳ nhánh địa phương nào) và kiểm tra tình huống, sau đó tự quyết định có hợp nhất hay rebase hay không.

+1

Cảm ơn bạn. Cũng hữu ích, nhận xét của bạn dẫn tôi đến đây: [Khi nào tôi nên sử dụng git pull --rebase?] (Http://stackoverflow.com/questions/2472254/when-should-i-use-git-pull-rebase) – Doug

5

Có một số tùy chọn, tất cả đều đến cùng một điều: làm cho git sử dụng tùy chọn --rebase (như đã đề cập bởi @cdhowie).

Có thể bạn sẽ thấy rằng bạn thích một trong những:

Lựa chọn 1: Rõ ràng sử dụng git pull --rebase mỗi lần.

Phương án 2: cho từng dự án, chỉnh sửa các tập tin .git/config bằng cách thêm

[branch "master"] 
remote = origin 
merge = refs/heads/master 
rebase = true 

Lựa chọn 3: trong cá nhân của bạn ~/.gitconfig

[branch] 
    autosetuprebase = always 

Cá nhân tôi thích phương án 3, vì nó cho phép tôi không thực thi bất kỳ điều gì trên các nhà phát triển khác, trong khi vẫn không phải nhập --rebase mỗi lần.

Đồng thời xem How to make Git pull use rebase by default for all my repositories?

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