Làm cách nào để bạn hoàn nguyên tệp git về phiên bản khu vực dàn dựng của nó?


80

Giả sử tôi có một tệp có tên a.txt. Tôi thêm nó vào khu vực dàn dựng, và sau đó tôi sửa đổi nó. Làm thế nào tôi có thể trả lại nó như cũ khi tôi thêm nó?

Câu trả lời:


77
  • Trước Git 2.23: git checkout a.txt
  • Bắt đầu từ Git 2.23: git restore a.txt

Git cho bạn biết điều này nếu bạn nhập git status.

Trước Git 2.23:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   a
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified:   a
#

Bắt đầu từ Git 2.23:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   a

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   a

3
@Daenyth Tôi đã kiểm tra nó trước khi gửi bài, và bạn có thể thấy các chương trình đầu ra cách khác nhau để thiết lập lại các tập tin trong tiểu bang khác nhau (tổ chức vs unstaged)
abyx

1
@Daenyth - bạn đang nghĩ đến việc 'git checkout ngành tên đường dẫn' hoặc 'con đường thanh toán ĐẦU git'
William Pursell

@William: Cảm ơn! Bây giờ có ý nghĩa hơn nhiều.
Daenyth

Không hoạt động với các tệp mới, vì vậy nó không thực sự kiểm tra từ việc dàn dựng, vì nó yêu cầu một đối tượng. Làm cách nào để thanh toán khỏi dàn dựng? chỉnh sửa Nó đã hoạt động với --trạng thái như nói.
Rudie

30

git checkout -- a.txt

Câu trả lời khác trên trang này không có --, và dẫn đến một số nhầm lẫn.

Đây là những gì Git cho bạn biết khi bạn nhập git status:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   a
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified:   a
#

4
Tốt hơn hết bạn nên cho chúng tôi biết sự khác biệt, thay vì đăng những gì đã được trích dẫn trước đây.
Bachsau

2

Bỏ sắp xếp tệp theo giai đoạn

Hai phần tiếp theo trình bày cách làm việc với các thay đổi về khu vực dàn dựng và thư mục làm việc của bạn. Phần hay là lệnh bạn sử dụng để xác định trạng thái của hai khu vực đó cũng nhắc bạn cách hoàn tác các thay đổi đối với chúng. Ví dụ: giả sử bạn đã thay đổi hai tệp và muốn cam kết chúng dưới dạng hai thay đổi riêng biệt, nhưng bạn vô tình nhập git add * và đặt cả hai tệp. Làm thế nào bạn có thể loại bỏ một trong hai? Lệnh git status nhắc bạn:

$ git add *
$ git status

On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

renamed:    README.md -> README
modified:   CONTRIBUTING.md

Ngay bên dưới dòng chữ "Các thay đổi cần được cam kết", nó cho biết sử dụng git reset HEAD ... để loại bỏ. Vì vậy, hãy sử dụng lời khuyên đó để loại bỏ tệp CONTRIBUTING.md:

$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M   CONTRIBUTING.md

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

renamed:    README.md -> README

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified:   CONTRIBUTING.md

Lệnh này hơi lạ, nhưng nó hoạt động. Tệp CONTRIBUTING.md được sửa đổi nhưng một lần nữa được bỏ đánh dấu.

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.