2016-12-12 24 views
19

Tôi luôn sử dụng git checkout -- . để xóa thư mục làm việc của mình. Tôi nghĩ rằng tôi đọc ở đâu đó rằng -- là cần thiết để tránh git nghĩ rằng bạn đang đi qua các thông số (hoặc một cái gì đó)git checkout -. vs git checkout

Bây giờ một đồng nghiệp đã nói với tôi rằng tôi có thể bỏ số --.

Có sự khác biệt nào giữa hai lệnh đó không?

PS: Yêu cầu ở đây vì git checkout -- . vs git checkout . là loại khó google ...

+0

Bạn đã đọc nội dung này ở đâu? Bạn đã đọc [tài liệu chính thức] chưa (https://git-scm.com/docs/git-checkout)? – axiac

Trả lời

27

tôi dường như nhớ lại rằng -- là một cách để nói với Git để điều trị những gì sau checkout như một tập tin và không phải là một chi nhánh. Giả sử bạn có cả tệp và chi nhánh được gọi là stuff. Sau đó, lệnh sau sẽ có vẻ mơ hồ:

git checkout stuff 

vì không rõ liệu bạn có yêu cầu thanh toán tệp hay chi nhánh hay không. Bằng cách sử dụng --, bạn nói rõ ràng với Git để kiểm tra tệp theo tên/đường dẫn đó. Vì vậy, trong trường hợp này các lệnh sau cho phép kiểm tra ra một chi nhánh và một tập tin gọi stuff:

git checkout stuff  # checkout the branch stuff 
git checkout -- stuff # checkout the file stuff 

Lưu ý rằng git checkout <name> thực sự có nghĩa là cho các chi nhánh, nhưng Git cú pháp là thoải mái, và nếu Git không thể tìm thấy một chi nhánh, sau đó nó sẽ tìm kiếm một tập tin.

Liên quan chặt chẽ: Git change branch when file of same name is present

+0

Tôi thực sự có nghĩa là 'git co .' aka' git reset HEAD --hard'. Nhưng tôi đoán tôi đã gõ hai dấu gạch ngang đó một cách siêu nhiên trong 2 năm qua :) – Laoujin

+0

@Laoujin 'git co'' chắc chắn không phải là * aka *' git reset --hard'. Hai lệnh đó làm những việc khác nhau. – poke

7

-- như một lập luận độc lập (ví dụ: không nằm trong lập luận khác) được sử dụng bởi nhiều chương trình dòng lệnh UNIX để cho biết rằng bất cứ điều gì mà sau nó không phải là một cuộc tranh cãi.

Tại sao? Vâng, trong trường hợp này, nó được sử dụng trong trường hợp bạn có một đường dẫn có tên bắt đầu bằng --, không nên được hiểu là đối số riêng của nó.

tức là git checkout -- --mydirectory mà không có -- sẽ phát sinh lỗi.

Các vấn đề liên quan