Tôi đã nhận thấy rằng trong khi làm việc trên một hoặc hai vé, nếu tôi bước đi, tôi không chắc mình đã làm gì, thay đổi gì, vân vân.
Có cách nào để xem các thay đổi được thực hiện cho một tệp nhất định trước khi git add và sau đó git commit không?
Tôi đã nhận thấy rằng trong khi làm việc trên một hoặc hai vé, nếu tôi bước đi, tôi không chắc mình đã làm gì, thay đổi gì, vân vân.
Có cách nào để xem các thay đổi được thực hiện cho một tệp nhất định trước khi git add và sau đó git commit không?
Câu trả lời:
Bạn đang tìm kiếm git diff
. Tùy thuộc vào tình huống chính xác của bạn, có ba cách hữu ích để sử dụng nó:
# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]
Nó sẽ hoạt động đệ quy trên các thư mục và nếu không có đường dẫn nào được đưa ra, nó sẽ hiển thị tất cả các thay đổi.
git add -p
là một cách thay thế để kiểm tra tất cả các tệp.
git diff --staged [filename]
vào câu trả lời chính của bạn vì đó là tình huống thường xuyên hơn.
Đối với tôi git add -p
là cách hữu ích nhất (và dự định mà tôi nghĩ bởi các nhà phát triển git?) Để xem xét tất cả các thay đổi chưa được thực hiện (nó hiển thị độ lệch cho mỗi tệp), chọn một tập hợp thay đổi tốt phải thực hiện theo cam kết, sau đó khi bạn có dàn dựng tất cả những thứ đó, sau đó sử dụng git commit
và lặp lại cho lần xác nhận tiếp theo. Sau đó, bạn có thể làm cho mỗi cam kết là một tập hợp thay đổi hữu ích hoặc có ý nghĩa ngay cả khi chúng diễn ra trong các tệp khác nhau. Tôi cũng đề nghị tạo một chi nhánh mới cho mỗi vé hoặc hoạt động tương tự và chuyển đổi giữa chúng bằng cách sử dụng checkout
(có thể sử dụng git stash
nếu bạn không muốn cam kết trước khi chuyển đổi), mặc dù nếu bạn đang thực hiện nhiều thay đổi nhanh thì điều này có thể gây khó khăn. Đừng quên hợp nhất thường xuyên.
Hãy nhớ rằng, bạn đang cam kết thay đổi , không phải tệp.
Vì lý do này, rất hiếm khi tôi không sử dụng git add -p
(hoặc tương đương với pháp sư) để thêm các thay đổi của mình.
git diff <path>/filename
đường dẫn của bạn có thể là đường dẫn hệ thống hoàn chỉnh cho đến tệp hoặc
nếu bạn đang ở trong dự án, bạn cũng dán đường dẫn tệp đã sửa đổi
cho các tệp đã sửa đổi với đường dẫn sử dụng:git status
Vâng, trường hợp của tôi khi bạn không muốn quan tâm đến danh sách tập tin. Chỉ cần hiển thị tất cả.
Khi bạn đã chạy git add
với danh sách tập tin của bạn:
$ git diff --cached $(git diff --cached --name-only)
Trong các phiên bản gần đây hơn git
, bạn cũng có thể sử dụng --staged
, đó là từ đồng nghĩa của --cached
.
Điều tương tự có thể được sử dụng cho các tập tin chưa được thêm nhưng không có --cached
tùy chọn.
$ git diff $(git diff --name-only)
Bí danh lệnh Git cho tùy chọn "lưu trữ":
$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'
Chuyển đến repo git tương ứng của bạn, sau đó chạy lệnh dưới đây:
tên tập tin git diff
Nó sẽ mở tệp với các thay đổi được đánh dấu, nhấn phím return / enter để cuộn xuống tệp.
Tên tệp PS phải bao gồm đường dẫn đầy đủ của tệp hoặc nếu không bạn có thể chạy mà không có đường dẫn tệp đầy đủ bằng cách vào thư mục / thư mục tương ứng của tệp
Bạn cũng có thể sử dụng trình soạn thảo văn bản thân thiện với git. Chúng hiển thị màu trên các dòng đã được sửa đổi, một màu khác cho các dòng được thêm vào, một màu khác cho các dòng bị xóa, v.v.
Một trình soạn thảo văn bản tốt thực hiện điều này là GitHub's Atom 1.0 .
[filename]
biểu thị một đối số tùy chọn.) Với việc*
bạn cho phép shell liệt kê tất cả các tệp, vì vậy nếu bạn ở trong thư mục con, bạn sẽ chỉ nhận được những thứ trong thư mục con đó (không phải toàn bộ repo) và bạn ' sẽ bỏ lỡ những thay đổi trong các tập tin ẩn.