2012-07-19 18 views
7

Tôi đã hợp nhất nhánh beta vào nhánh chính. Tôi bị đẩy về nguồn gốc. Bây giờ tôi muốn chủ nhân được như trước khi sáp nhập cả cục bộ lẫn từ xa.Băm cam kết nào để hoàn tác hợp nhất được đẩy bằng git-revert?

Một câu trả lời tốt cho undoing a merge that was already pushed gợi ý

git revert -m 1 commit_hash 

Nếu đây thực sự là con đường để đi, làm thế nào tôi có thể xác commit_hash? Tôi không thành công cố gắng băm được trả về bởi merge-base:

$ git merge-base --all master beta 
1f4b949b7ef97abf913ae672e3acd0907abfac1b 
$ git revert -m 1 1f4b949b7ef97abf913ae672e3acd0907abfac1b 
error: Mainline was specified but commit 1f4b949b7ef97abf913ae672e3acd0907abfac1b is not a merge. 
fatal: revert failed 

Tôi đã kiểm tra cả hai git-log và gitk lồng vào cốt của ngành, nhưng chúng rất dài, và tôi không chắc chắn đủ giải thích của tôi để cảm thấy tôi nên tìm kiếm sự trợ giúp trước khi tạo ra một mớ hỗn độn lớn hơn. Beta được bắt nguồn từ v2, được lấy từ master. Đã có một số vụ sáp nhập từ master vào v2 và beta dọc theo con đường như tôi đã giữ cho các chi nhánh mới được cập nhật với chủ. Việc sáp nhập theo hướng từ phiên bản beta thành chủ là một sai lầm mà tôi muốn sửa.

Khi tôi xác định điểm hợp nhất, nếu tôi tìm thấy bất kỳ cam kết nào được thực hiện trên trang chủ sau khi sáp nhập thực sự nằm trên nhánh beta, cách tốt nhất để di chuyển chúng là gì?

+2

Thử 'log - all --graph --pretty = tformat: '% Tín dụng% h% Creset -% C (màu vàng)% d% Creset% s% Cgreen (% an% cr)% Creset' - abbrev-commit --date = relative' (cá nhân tôi bí danh nó), nó sẽ hiển thị các cam kết của tất cả các chi nhánh và ngày của họ, và cũng có nơi sáp nhập xảy ra. –

Trả lời

4

Bạn cần phải tìm cam kết hợp nhất, git merge-base cho bạn biết cam kết nơi bạn có thể thực hiện hợp nhất. Về cơ bản nó là cam kết cuối cùng tồn tại trong hai nhánh đó. Cam kết hợp nhất chỉ tồn tại trong nhánh chính của bạn, trừ khi bạn tạo một nhánh mới sau khi hợp nhất, nhưng nó không có liên quan ở đây. :)

Để tìm việc hợp nhất cam kết thử: git log master ^beta --ancestry-path --merges

Các cần cam kết là cam kết cuối cùng.

Nhưng xin đọc lên trên Linus' viết lên: http://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt

1

Ngoài ra nhìn vào http://sethrobertson.github.com/GitFixUm/ mà bạn đi qua hầu hết các vấn đề git, trong đó có hòa trộn đẩy. Tuy nhiên ... đẩy sáp nhập không có giải pháp dễ dàng.