Cách hoàn nguyên về phiên bản tệp gốc của nhánh chính


425

Tôi đang ở trong nhánh chính của máy tính cục bộ của tôi là một nhánh chủ nhân bản của một repo từ một máy chủ từ xa.

Tôi đã cập nhật một tệp và tôi muốn trở lại phiên bản gốc từ nhánh chính từ xa.

Tôi có thể làm cái này như thế nào?

Câu trả lời:


873

Giả sử bạn không cam kết tệp hoặc thêm nó vào chỉ mục, sau đó:

git checkout -- filename

Giả sử bạn đã thêm nó vào chỉ mục, nhưng không cam kết, thì:

git reset HEAD filename
git checkout -- filename

Giả sử bạn đã cam kết, thì:

git checkout origin/master filename

Giả sử bạn muốn thổi bay tất cả các cam kết từ chi nhánh của mình (RẤT HẤP DẪN):

git reset --hard origin/master

43
Tùy chọn thứ ba của bạn rất khác so với hai tùy chọn đầu tiên của bạn ở chỗ nó chạm vào tất cả các tệp chứ không chỉ một tệp. Bạn có thể muốn chỉ ra điều này rõ ràng hơn. Ngoài ra tại sao không đề xuất git checkout HEAD filenamegit checkout origin/master filenamecho các tùy chọn một và hai, nó sẽ phù hợp hơn?
CB Bailey

5
@CharlesBailey: Tôi đã thêm git checkout origin/master filenametùy chọn vào câu trả lời của gahooa.
Frank

2
@cilphex nó thổi bay tất cả các cam kết trong chi nhánh hiện tại của bạn
WattsInABox

1
Tôi vô tình loại bỏ nhánhA khỏi nhánhB và cần thiết lập lại để làm chủ nhánh cục bộ. git reset --hard mastermột mình là giải pháp của tôi vì tôi không muốn tiếp cận nguồn gốc. Cảm ơn.
taco

3
@gahooa Có lẽ nên là git checkout - tên tệp, nếu tệp được gọi là "master", thì bạn sẽ nhận được một hành vi không có ý định.
dùng2602152

50

Tôi đã đối mặt với cùng một vấn đề và gặp phải chủ đề này nhưng vấn đề của tôi là với upstream. Dưới đây lệnh git làm việc cho tôi.

Cú pháp

kiểm tra git {tên từ xa} / {chi nhánh} - {file / path.js}

Thí dụ

kiểm tra git ngược dòng / phát triển - công khai / js / index.js


0

Nếu bạn chưa cam kết nó với nhánh chính, thật dễ dàng:

  • rời khỏi nhánh chính (như git checkout -b oops/fluke/dang)
  • cam kết thay đổi của bạn ở đó (như git add -u; git commit;)
  • quay trở lại nhánh chủ (như git checkout master)

Những thay đổi của bạn sẽ được lưu trong oops chi nhánh / sán / dang; chủ sẽ được như nó đã được.

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.