Làm cách nào để hoàn nguyên nhánh chính thành thẻ trong git?


87

Chúng tôi có nguồn gốc và phát triển chi nhánh. Trạng thái ban đầu của cái chủ đã được gắn thẻ tại tag_ABC.

Chúng tôi có một số thay đổi được thực hiện đối với nhánh phát triển và chuyển sang nhánh gốc. Sau đó, chúng tôi đã vô tình hợp nhất phát triển thành chủ và đẩy về nguồn gốc.

Bây giờ chúng tôi muốn hoàn nguyên bản gốc về trạm kiểm soát tag_ABC. Làm thế nào chúng ta có thể làm điều đó?

Câu trả lời:


159

Bạn có thể làm

git checkout master
git reset --hard tag_ABC
git push --force origin master

Xin lưu ý rằng điều này sẽ ghi đè lịch sử hiện có trong repo ngược dòng và có thể gây ra sự cố cho các nhà phát triển khác đã kiểm tra repo này.


5
Bằng cách này, tất cả các nhánh sẽ được đẩy bằng lực. Bạn có thể muốn thửgit push --force origin master
danza

1
Để tham khảo, để trở lại cam kết trước đó, bạn có thể làm mộtgit reset --hard HEAD^
Geoff

1
BTW git reset --hard HEAD^có thể được sử dụng nhiều lần để lùi một lần cam kết tại một thời điểm sau đó nếu nó ở trên điều khiển từ xa, git push --force origin mastercó thể được sử dụng.
Luke Wenke

Ngoài ra để thiết lập lại các chi nhánh bậc thầy của các copy nội bộ của người khác để sử dụng phiên bản trước đó git pullgit reset --hard origin/master
Luke Wenke

Một lời khuyên nhỏ sau khi hoàn nguyên này, có thể được nói với nhóm: kéo từ nhánh chính !! Cảm ơn!!
JRichardsz

89

Đây không phải là câu trả lời trực tiếp cho câu hỏi nhưng trang này quay lại khi tìm kiếm các cách hoàn nguyên mã của chi nhánh về phát hành thẻ.

Một cách khác là tạo sự khác biệt giữa trạng thái hiện tại của nhánh và thẻ bạn muốn hoàn nguyên rồi áp dụng điều đó cho nhánh. Điều này giữ cho lịch sử phiên bản chính xác và hiển thị những thay đổi đang diễn ra sau đó sẽ xuất hiện trở lại.

Giả sử nhánh của bạn được gọi là chính và thẻ bạn muốn quay lại được gọi là 1.1.1

git checkout 1.1.1
git diff master > ~/diff.patch
git checkout master
cat ~/diff.patch | git apply
git commit -am 'Rolled back to version 1.1.1'
git push origin master

19
Đây phải là câu trả lời được chấp nhận vì nó giữ nguyên lịch sử và không gây ra vấn đề cho những người khác đã kiểm tra repo.
OpenUserX03

1
Điều này có vẻ thanh lịch. Nhưng tôi đã cố gắng hoàn nguyên nhánh qa về thẻ trước đó và chỉ nhận được thông báo lỗi vá. $ cat ../diff_qa.patch | git apply <stdin>: 55: khoảng trắng theo sau. <stdin>: 336: khoảng trắng ở cuối. <stdin>: 12692: khoảng trắng ở cuối. <stdin>: 12695: khoảng trắng ở cuối. <li> {{$ tag ['rank'] + 1}}: <stdin>: 12706: khoảng trắng ở cuối. error: patch failed: .env.wholo: 1
rickatech 19/12/16

Tôi đã thử một số giải pháp, nhưng không có giải pháp nào hoạt động. Điều này làm việc như một sự quyến rũ. Cảm ơn @ John rất nhiều
Strabek

Đây là cách chính xác để làm. Nó không bị phá hủy và lưu giữ toàn bộ lịch sử
Nitin Bansal

Điều này không làm việc cho tôi. Tôi có thể chạy 3 lệnh đầu tiên mà không gặp bất kỳ sự cố nào, nhưng khi tôi thực hiện cat ~/diff.patch | git apply, nó cho tôi biết error: unrecognized input. Bất kỳ ý tưởng? @NitinBansal có lẽ vì bạn đã bình luận gần đây?
Trải
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.