git loại bỏ tất cả các thay đổi và kéo từ thượng nguồn


144

Làm cách nào để tìm nạp repo ngược dòng và làm cho nó thay thế chủ? Tôi chỉ có một chi nhánh trong repo của mình, đó là chủ nhân và tôi hoàn toàn làm hỏng nó, vì vậy về cơ bản tôi cần phải bắt đầu lại từ đầu dòng. Tôi nghĩ init sẽ thực hiện công việc, nhưng có cách nào dễ hơn không?

Câu trả lời:


250

Có (ít nhất) hai điều bạn có thể làm ở đây, bạn có thể gọi lại repo từ xa, hoặc bạn có thể reset --hardđến tổ tiên chung và sau đó thực hiện thao tác kéo, sẽ nhanh chóng chuyển tiếp đến cam kết mới nhất trên chủ từ xa.

Để cụ thể, đây là một phần mở rộng đơn giản của câu trả lời ban đầu của Nevik Rehnel:

git reset --hard origin/master
git pull origin master

LƯU Ý : việc sử dụng git reset --hardsẽ loại bỏ mọi thay đổi không được cam kết và có thể dễ nhầm lẫn với lệnh này nếu bạn chưa quen với git, vì vậy hãy chắc chắn rằng bạn có ý thức về những gì nó sẽ làm trước khi tiếp tục.


1
Giúp đỡ nhiều hơn cho các tân binh ngoài kia: git gcdọn dẹp và chạy qua một số công việc vệ sinh. Một lưu ý khác, tôi chưa bao giờ chạy git gc. Nó là tốt đẹp để chạy, nhưng không cần thiết.
Vũ điệu Joshua

@JoshuaDance - điểm tốt. Tôi không chắc tại sao ban đầu tôi đưa nó vào.
Eric Walker

23

trong khi trên nhánh chủ: git reset --hard origin/master

sau đó làm sạch với git gc(thêm về điều này trong các trang nam)

Cập nhật: Bạn cũng có thể cần phải làm một git fetch origin(hoặc git fetch origin masternếu bạn chỉ muốn chi nhánh đó); nó không quan trọng nếu bạn làm điều này trước hoặc sau khi thiết lập lại. (Cảm ơn @ eric-walker)


1
Bạn có thể cần phải làm một kéo sau reset --hard.
Eric Walker

Việc kéo từ bản gốc là không cần thiết một khi nguồn gốc git fetch được chạy trước khi thiết lập lại.
sciritai

@sciritai: bình luận của tôi đã được thêm vào trước khi đề cập đến tìm nạp từ nguồn gốc.
Eric Walker

19

Bạn có thể làm điều đó trong một lệnh duy nhất:

git fetch --all && git reset --hard origin/master

Hoặc trong một cặp lệnh:

git fetch --all
git reset --hard origin/master

Lưu ý hơn bạn sẽ mất TẤT CẢ các thay đổi cục bộ của bạn


5
git reset <hash>  # you need to know the last good hash, so you can remove all your local commits

git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f

voila, bây giờ ngã ba của bạn trở lại giống như ngược dòng.

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.