2013-05-14 27 views
23

Tôi đã cam kết một số mã thử nghiệm trước khi hợp nhất trong một nhánh từ xa. Sự hợp nhất này đã có rất nhiều xung đột và mất một thời gian nghiêm túc để đặt đúng. Vì vậy, lịch sử của tôi trông giống như sau:Sửa đổi thông điệp Git cam kết trước khi hợp nhất

7ab562c Merge from remote branch 
... whole load of commits brought across from the remote branch... 
f3e71c2 Temporary TESTING COMMIT 

Mã kiểm tra là tốt, tôi thực sự chỉ muốn thay đổi thông báo cam kết. Thông thường tôi sẽ đi ngay với một số git rebase -i f3e71c2^ (vì không có điều nào trong số này đã được đẩy ra), nhưng tôi đã được một đồng nghiệp nói với điều này sẽ làm hỏng việc hợp nhất. Tôi thực sự không muốn làm hỏng quá trình hợp nhất :)

Đồng nghiệp của tôi có chính xác không? Và nếu có, tôi có thể làm gì không, hay tôi chỉ cần sống với lịch sử này?

+2

'git commit --amend'? – kan

+2

@kan: chỉ hoạt động để sửa đổi cam kết mới nhất, không phải là tình huống ở đây. – kampu

+4

Ít lo ngại hơn! Nếu bạn lộn xộn, chỉ cần 'git reset --hard 7ab562c' để quay lại trạng thái kết hợp bài đăng của bạn và thử lại. Ngoài ra, hãy kiểm tra 'git rerere' để nhớ git nhớ cách giải quyết xung đột hợp nhất. – chrisk

Trả lời

31

Bạn có thể thử một git rebase --preserve-merges --interactive, với:

-p 
--preserve-merges 

Thay vì bỏ qua sáp nhập, cố gắng tái tạo chúng.

Phần BUG của trang người đàn ông bao gồm:

Danh sách todo trình bày bởi --preserve-merges --interactive không đại diện cho topo của đồ thị sửa đổi.
Chỉnh sửa các cam kết và viết lại thông điệp cam kết của họ sẽ hoạt động tốt, nhưng các nỗ lực sắp xếp lại các cam kết có xu hướng tạo ra kết quả phản trực giác.


Như jthill 's comment mô tả (kể từ -p sẽ giữ gìn tốt hơn hòa trộn nếu độ phân giải xung đột là máy ghi âm):

Bạn có thể hồi tố rerere ánh sáng cho việc kết hợp:

git config rerere.enabled true 
git checkout $merge^1 
git merge $merge^2 
git read-tree --reset -u $merge 
git commit -m- 
git checkout @{-1} 
+0

Cảm ơn của @VonC, nhưng thật đáng buồn, điều này đã không làm việc cho tôi. Tôi 'reword'ed cam kết thử nghiệm,' pick'ed hợp nhất, và rebase vẫn bị nghẹt thở trên hợp nhất, ném ra 11 tập tin xung đột. Tôi đã sử dụng gợi ý 'git reset' của @ chrisk để quay lại vị trí của tôi, và tôi nghĩ tôi sẽ để nó ở đó: thời gian đầu tư không đáng để sửa chữa trong trường hợp này. – ChrisWard

+0

@ChrisWard Điều đó có nghĩa là bạn sẽ cần phải kích hoạt 'rerere' (http://git-scm.com/docs/git-rerere) để ghi lại độ phân giải hợp nhất, sau đó * sẽ * cho phép một rebase' --preserve -gege' mà không xung đột. – VonC

+0

Tôi đã bật 'rerere' và thử lại' rebase'. Khi 'rebase' nhận được commit hợp nhất, tôi có thể thấy' rerere' ghi lại các hình ảnh trước, và sau đó các xung đột hợp nhất đổ vào. Tôi đoán nó đang làm điều này bởi vì tôi không bật 'rerere' khi tôi đã thực hiện các giải pháp xung đột ban đầu, do đó, nó không nhận thức được cách tôi giải quyết vấn đề. Liệu «rerere' có thể thu thập dữ liệu đó từ một cam kết đã được giải quyết? – ChrisWard

-3

Nếu và chỉ nếu đồng nghiệp của bạn không đẩy/kéo các thay đổi ontop của f3e71c2 ở nơi khác, thao tác này sẽ hoạt động. Nếu không thì tôi không biết chuyện gì sẽ xảy ra. Thay đổi thông điệp cam kết hoàn toàn là mỹ phẩm (== thay đổi siêu dữ liệu), với điều kiện là bạn chưa sửa đổi cam kết bạn muốn, nhưng điều này vẫn có thể dẫn đến nhầm lẫn lịch sử nếu đồng nghiệp của bạn đã đẩy/kéo bất kỳ phần nào của lịch sử mà là trên đỉnh nó.

(nhờ Abizern để chỉ ra sự thất bại này-mode)

+2

Thư này là một phần của đối tượng cam kết, không thể thay đổi được.Nếu bạn thay đổi tin nhắn, bạn đã thay đổi cam kết, thay đổi lịch sử. – Abizern

+0

@Abizern: Đúng vậy. Tuy nhiên, điều đó chỉ có liên quan nếu các cam kết đã được đẩy ở nơi khác (chúng chưa có). Tôi đã xác minh tại địa phương chiến lược này hoạt động trong tình huống này. – kampu

+0

@Abizern: Tuy nhiên, tôi cho rằng tôi đã không nghĩ rằng những người khác có thể đã đẩy các cam kết trên đầu vào nơi khác trong thời gian chờ đợi. Điều đó có lẽ sẽ gây ra sự thất bại/lịch sử nhầm lẫn, vì vậy tôi đã chỉnh sửa cho phù hợp. – kampu

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