Đặt lại tất cả các thay đổi sau lần cam kết cuối cùng trong git


324

Làm cách nào tôi có thể hoàn tác mọi thay đổi được thực hiện cho thư mục của mình sau lần xác nhận cuối cùng, bao gồm xóa các tệp đã thêm, đặt lại các tệp đã sửa đổi và thêm lại các tệp đã xóa?


bản sao có thể có của Revert với cam kết Git trước đó
nawfal

8
@nawfal có thể là một bản sao, nhưng 'đặt lại tất cả các thay đổi sau lần cam kết cuối' phù hợp với nhiều tiêu chí tìm kiếm hơn (các từ được tìm kiếm trong google) so với 'cách hoàn nguyên kho git' tương ứng. Ít nhất là đối với những người như tôi không có tiếng Anh như tiếng mẹ đẻ của họ: d
Shirish Herwade

Câu trả lời:


561

Đầu tiên đặt lại các thay đổi

git reset HEAD --hard

sau đó dọn dẹp mọi thứ không bị theo dõi. Nếu bạn muốn giữ các tệp không được theo dõi do .gitignore, hãy cẩn thận với lệnh này.

git clean -fd

7
@Adam: Đôi khi bạn cũng có thể muốn -xtùy chọn này git clean, điều này cũng chỉ đạo nó loại bỏ các tệp bị bỏ qua.
Cascabel

31
Nếu bạn muốn giữ các tệp không được theo dõi do .gitignore, hãy cẩn thận với git clean -fdlệnh.
bitoflogic

3
@Levinaris: Đó là cách khác để git clean -fdkhông xóa các tập tin bị bỏ qua. -xsẽ.
Robert Siemer

5
@RobertSiemer Thật ra, nó có thể! Nếu bạn có bất kỳ thư mục nào bao gồm toàn bộ các tệp bị bỏ qua, nó sẽ xóa các thư mục đó do đó xóa các tệp bị bỏ qua. Hãy xem xét một tệp .gitignore giống như tệp ở đây: stackoverflow.com/q/25554504/456645 . Trong ví dụ này, giả sử một số thư mục không có tệp PHP. git clean -fdsẽ xóa các thư mục và các tập tin không bị theo dõi. Đã thử nghiệm với phiên bản git 1.9.1
bitsoflogic

3
Nhưng tại sao thứ hai 'dọn sạch' lại cần thiết?
Shirish Herwade

71

Làm cách nào tôi có thể hoàn tác mọi thay đổi được thực hiện cho thư mục của mình sau lần xác nhận cuối cùng, bao gồm xóa các tệp đã thêm, đặt lại các tệp đã sửa đổi và thêm lại các tệp đã xóa?

  1. Bạn có thể hoàn tác các thay đổi đối với các tệp được theo dõi bằng:

    git reset HEAD --hard
    
  2. Bạn có thể xóa các tệp không bị theo dõi với:

    git clean -f
    
  3. Bạn có thể loại bỏ untracked tập tin và thư mục với:

    git clean -fd
    

    nhưng bạn không thể hoàn tác thay đổi thành các tập tin chưa được theo dõi .

  4. Bạn có thể loại bỏ các tập tin và thư mục bị bỏ qua và không bị theo dõi

    git clean -fdx
    

    nhưng bạn không thể hoàn tác thay đổi thành các tập tin bị bỏ qua .

Bạn cũng có thể đặt clean.requireForcethành false:

git config --global --add clean.requireForce false

để tránh sử dụng -f( --force) khi bạn sử dụng git clean.


2
Tuyệt vời, chỉ là những gì tôi cần. Cảm ơn đã so sánh tất cả các lệnh có liên quan!
Marquee

-1

Có hai lệnh sẽ hoạt động trong tình huống này,

root> git reset - đầu trang ~ 1

root> git đẩy -f

Để biết thêm các lệnh git tham khảo trang này


1
git push -fkhông liên quan đến câu hỏi và, trong kịch bản này, rất nguy hiểm
ria mép1up
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.