Sự khác biệt giữa các lệnh git sau đây là gì?Sự khác biệt giữa các lệnh git diff này là gì?
git diff HEAD
git diff HEAD^
git diff --cached
hoặc từ đồng nghĩagit diff --staged
git diff
Sự khác biệt giữa các lệnh git sau đây là gì?Sự khác biệt giữa các lệnh git diff này là gì?
git diff HEAD
git diff HEAD^
git diff --cached
hoặc từ đồng nghĩa git diff --staged
git diff
git diff HEAD
- Hiển thị những gì đã thay đổi kể từ lần commit cuối cùng.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à.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.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^ <--------------------+
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.
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
git diff HEAD
: Khác biệt giữa HEAD và thư mục làm việc.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.git diff --cached
hoặc từ đồng nghĩa git diff --staged
: Khác biệt giữa HEAD và chỉ mục.git diff
: Khác biệt giữa chỉ mục và thư mục làm việc.Có ai có cách hay để nhớ điều này không? Tôi tiếp tục quay lại đây. –
@kevin Tốt hơn là làm sudoku đúng không? – Samuel
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".
Đây là một cách đơn giản để nhớ các lệnh này:
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ố.--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.Hãy vui vẻ trộn chúng lên theo ý thích của riêng bạn :)
@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
@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
1 cho ascii-nghệ thuật một mình. Một hình ảnh = 1000 từ; Một ascii-art = 1025 ký tự. –