2012-09-21 14 views
40

bước i thực hiện:Hoàn nguyên một merge sau khi bị đẩy

Tôi có hai chi nhánh branch1 và branch2,

$git branch --Initial state 
$branch1 

$git checkout branch2 
$git pull origin branch1 --Step1 

tôi giải quyết những mâu thuẫn và đã làm một

$git commit -m "Merge resolved" 

sau đó

$git checkout branch1 
$git merge branch2 
$git push origin branch1 

Bây giờ tôi reali sed rằng trong khi đang ở bước 1, tự động sáp nhập loại bỏ một số mã và mã thay đổi đã được đẩy, bây giờ tôi muốn quay trở lại trạng thái ban đầu của tôi để hoàn nguyên bất kỳ thay đổi. tìm kiếm một số trợ giúp ngay lập tức?

+0

Liệu git trở lại không làm những gì bạn muốn? –

+1

nó cung cấp thông báo là: tử vong: Cam kết b4a758b36a5bde9311061fe7b56e4f47859de052 là tùy chọn hợp nhất nhưng không có -m được đưa ra. @FrederickCheung – Bijendra

+0

Xem hướng dẫn về tùy chọn -m. http://www.kernel.org/pub/software/scm/git/docs/git-revert.html Một thời gian ngắn bạn có thể sử dụng -m 1 hoặc -m 2. Việc này sẽ chọn một trong hai phiên bản chính mà bạn muốn hoàn nguyên. –

Trả lời

56

Bạn có thể hoàn nguyên hợp nhất theo sau official guide, tuy nhiên điều này khiến Git có sai lầm sai lầm rằng các cam kết đã hợp nhất vẫn nằm trên nhánh mục tiêu.

Về cơ bản bạn phải:

git revert -m 1 (Commit id of the merge commit) 
+16

Bạn nên cẩn thận với '1'. Nó có nghĩa là cha mẹ 'đầu tiên' của cam kết hợp nhất. Nhưng nếu một (giả thuyết) 'do tai nạn' sáp nhập tổng thể vào nhánh, sau đó chuyển tiếp chủ nhanh đến cam kết hợp nhất - ta nên sử dụng '-m 2' để hoàn nguyên việc hợp nhất trên master. –

+1

Hãy cẩn thận với điều đó '1'. Nó làm hỏng kho lưu trữ của tôi bằng cách hoàn nguyên một phần việc hợp nhất, trong khi tôi muốn hoàn nguyên việc hợp nhất hoàn toàn. Tôi đã hoàn nguyên việc hoàn nguyên! – Metallica

15

Hãy thử sử dụng git reflog <branch> để tìm hiểu chi nhánh của bạn trước khi hợp nhất và git reset --hard để khôi phục bản sửa đổi cũ.

Reflog sẽ hiển thị cho bạn trạng thái cũ hơn của chi nhánh, vì vậy bạn có thể trả lại trạng thái cũ cho bất kỳ thay đổi nào bạn muốn.

Hãy chắc chắn rằng bạn đang ở trong ngành đúng khi bạn sử dụng git reset

Để thay đổi lịch sử kho từ xa, bạn có thể làm git push -f, tuy nhiên điều này là không nên vì một người nào đó alredy có thể đã tải về những thay đổi, đẩy bởi bạn.

+0

tôi đã đẩy mã vào chi nhánh từ xa, cách này sẽ hoàn nguyên mã từ đó .. – Bijendra

+1

nếu bạn đã đẩy, bạn KHÔNG muốn làm lại lịch sử địa phương, như Ilya đã mô tả –

+2

Xin lỗi, tôi đã bỏ lỡ điều đó ... Đôi khi bạn có thể sử dụng git push -f để viết lại lịch sử từ xa. Điều này phụ thuộc vào cấu hình kho lưu trữ từ xa của bạn và các thành viên nhóm khác (nếu chúng không giết bạn vì cú đẩy buộc đó). –