2013-01-22 30 views
22

chênh lệch giữa git lệnh tiếp theo gì:Git thanh toán với dấu chấm

git checkout branch 
git checkout branch . 
git checkout . #<-- used at the branch 

Tại sao khi tôi kiểm tra chi nhánh khác nhau vào các thư mục khác nhau với một đầu tiên tôi đã bỏ lỡ một số tập tin.
Nhưng khi tôi đang sử dụng lệnh thứ hai, mọi thứ đều ổn?

+0

Không được sử dụng "tại chi nhánh". Đối số đầu tiên chỉ được coi là một chi nhánh nếu nó thực sự đặt tên một, mà '.' không. Vì vậy, nó chỉ đơn giản là con đường. Nó sẽ chỉ là chi nhánh nếu bạn nói 'git checkout. --', khi mà git sẽ phàn nàn rằng không có bản sửa đổi nào có tên '.'. –

+0

Với hình thức đầu tiên, bạn hãy kiểm tra chi nhánh vào bản sao làm việc hiện tại. Vì vậy, bạn có ý nghĩa gì bởi "vào các thư mục khác nhau"? –

+0

Tôi có nghĩa là tôi có ví dụ 2 chi nhánh. Và đầu tiên sẽ được checkout thành công nhưng thứ hai bỏ lỡ một số tập tin. Nhưng nếu tôi sử dụng dòng thứ hai, mọi thứ sẽ là ok – Arseniy

Trả lời

30

git checkout(1) thực hiện những điều rất khác nhau cho dù có chỉ định đường dẫn cụ thể hay không.

  1. Với chi nhánh specifier chỉ (git checkout branch) nó sẽ chuyển thư mục làm việc hiện tại để chi nhánh theo quy định, giữ thay đổi địa phương nếu có thể và không khác. Nếu bạn đã ở trên branch, nó sẽ không làm gì cả. Nó chỉ sửa đổi các tệp trong thư mục làm việc khác nhau giữa HEADbranch và không thành công nếu bất kỳ tệp nào có sửa đổi cục bộ (được lập chỉ mục hay không).
  2. Với đường specifier nó sẽ ghi đè lên các tập tin tất cả phù hợp (tất cả các file phù hợp .) với nội dung cụ thể:
    1. Với đường specifier chỉ (git checkout .) nó viết nội dung từ chỉ mục. Rằng nó là undoes thay đổi địa phương unstaged. Để hoàn tác sửa đổi theo giai đoạn, hãy sử dụng git reset với thông số đường dẫn.
    2. Với cả thông số chi nhánh và đường dẫn (git checkout branch .) nó ghi nội dung trong bản sửa đổi được chỉ định. Nó sẽ không sửa đổi nơi HEAD điểm, vì vậy nếu branch khác với HEAD, sẽ có những thay đổi chưa được chỉnh sửa sau đó.

Lưu ý, rằng man page phân biệt trường hợp bổ sung cho việc sử dụng -b/- Tùy chọn chi nhánh và -p/- Tùy chọn vá, nhưng những người chủ yếu là mở rộng đơn giản của các trường hợp trên.

+0

Vui lòng cung cấp liên kết – Arseniy

+2

@Pepelac: Nó ở ngay trong trang người đàn ông; google tìm thấy một số phiên bản của điều đó trong trang kết quả đầu tiên. Bạn đã thử chưa? –

1

Giải thích ở trên là tốt nhưng hãy để tôi giải thích bằng các ví dụ.

git checkout có thể được sử dụng với các thư mục và thư mục tệp.

Giả sử có index.html tệp và dev thư mục.

Nếu tôi vô tình thay đổi index.html và tôi muốn hoàn tác, tôi chỉ cần chạy git checkout index.html. Nó sẽ nhận được tập tin của tôi trở lại hình thức ban đầu của nó.

Bây giờ hãy nói rằng tôi đã thực hiện một số thay đổi trong thư mục dev và muốn những thay đổi đó trở lại bên trong thư mục dev. Nếu tôi sẽ sử dụng git checkout dev và nếu có bất kỳ chi nhánh dev thì nó sẽ thanh toán rằng chi nhánh dev thay vì thư mục có tên dev.

Vì vậy, thay vì tôi sẽ chạy git checkout -- dev

Bây giờ đôi dash trần này là viết tắt của chi nhánh hiện hành. Vì vậy, trên lệnh là yêu cầu từ git là xin vui lòng cho tôi 'dev' tên thư mục từ chi nhánh hiện tại.

Cho phép nói về trường hợp sử dụng của bạn.

git checkout branch lệnh này sẽ chỉ đơn giản là kiểm tra các chi nhánh có tên là 'ngành'

git checkout branch . Lệnh thứ hai sẽ cho git đó xin vui lòng kiểm . hay hiện tên thư mục từ các chi nhánh có tên là 'ngành'

git checkout . #<-- used at the branch như bạn đang có Trước tiên, bạn chuyển sang nhánh có tên là 'branch' bằng cách sử dụng git checkout branch thì bạn chỉ cần thực hiện git checkout . Bây giờ không có chi nhánh nào có tên . do đó nó sẽ đơn giản kéo tên thư mục hiện tại từ nhánh hiện tại.

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