2010-09-10 31 views

Trả lời

98
  1. git diff HEAD - Hiển thị những gì đã thay đổi kể từ lần commit cuối cùng.
  2. git diff HEAD^ - Hiển thị những gì đã thay đổi kể từ lần commit trước cam kết mới nhất là.
  3. git diff --cached - Hiển thị những gì đã được thêm vào chỉ mục qua git add nhưng chưa được cam kết.
  4. git diff - Hiển thị những gì đã thay đổi nhưng chưa được thêm vào chỉ mục qua git add.

Nó trông như thế này:

 Working 
    Directory <----+--------+------+ 
     |   |  |  |  
     |   |  |  | 
     V   |  |  |  
    "git add"  |  |  |  
     |   diff  |  |  
     |   |  |  |  
     V   |  |  |  
    Index  <----+ diff HEAD |    
     |   |  |  |  
     |   |  |  | 
     V   |  |  |  
    "git commit"  |  |  | 
     |  diff --cached |  | 
     |  diff --staged |  | 
     V   |  |  | 
     HEAD  <----+--------+  | 
     |       | 
     |      diff HEAD^ 
     V       | 
previous "git commit"    | 
     |       | 
     |       | 
     V       | 
     HEAD^ <--------------------+ 
+0

@Picasso Được vẽ tay hay bạn đã sử dụng một số công cụ nghệ thuật ASCII? Có lệnh git nào cho điều này không? ;) – takeshin

+0

@takeshin: Vẽ tay; nó không phải là khó. (Nhưng có một chế độ emacs cho vẽ ascii nghệ thuật, không phải là tôi sử dụng nó.) – Amber

+14

1 cho ascii-nghệ thuật một mình. Một hình ảnh = 1000 từ; Một ascii-art = 1025 ký tự. –

0

HEAD là hiện tại HEAD con trỏ trong cây, HEAD^ là cam kết trước HEAD. --cached Tôi không chắc chắn. --cached sẽ hiển thị cho bạn mọi thay đổi bạn đã thực hiện nhưng chưa thêm vào chỉ mục.

git tutorial trên kernal.org là một bài đọc rất hay.

+2

Bạn có '--cached' hơi sai: nó cho thấy bạn chỉ thay đổi mà bạn đã * * thêm vào chỉ mục (nhưng chưa cam kết). – Amber

9
  1. git diff HEAD: Khác biệt giữa HEAD và thư mục làm việc.
  2. git diff HEAD^: Khác biệt giữa tổ tiên trực tiếp của HEAD và thư mục làm việc.
  3. git diff --cached hoặc từ đồng nghĩa git diff --staged: Khác biệt giữa HEAD và chỉ mục.
  4. git diff: Khác biệt giữa chỉ mục và thư mục làm việc.
+4

Có ai có cách hay để nhớ điều này không? Tôi tiếp tục quay lại đây. –

+1

@kevin Tốt hơn là làm sudoku đúng không? – Samuel

9

Từ Git Community Book:

git diff

sẽ cho bạn thấy những thay đổi trong thư mục làm việc mà chưa được dàn dựng cho cam kết tiếp theo.

git diff --cached

sẽ cho bạn thấy sự khác biệt giữa chỉ số và bạn cam kết cuối cùng; những gì bạn sẽ cam kết nếu bạn chạy "git commit" mà không có tùy chọn "-a".

git diff HEAD

thấy những thay đổi trong thư mục làm việc kể từ lần cuối bạn cam kết; những gì bạn sẽ cam kết nếu bạn chạy "git commit -a".

4

Đây là một cách đơn giản để nhớ các lệnh này:

  • Theo mặc định, nguồn git diff 's được giả định là các thư mục làm việc, và mục tiêu của nó là chỉ số.
  • Thêm cờ --cached thay đổi nguồn thành chỉ mục. Nó không nhất thiết phải thay đổi mục tiêu khi bạn thêm nhiều đối số. Nhưng để thuận tiện, mục tiêu trở thành cam kết cuối cùng nếu không được cung cấp.
  • Thêm cam kết làm đối số thay đổi mục tiêu.
  • Thêm hai cam kết làm đối số thay đổi cả nguồn và mục tiêu tương ứng.

Hãy vui vẻ trộn chúng lên theo ý thích của riêng bạn :)

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