Sử dụng Git, làm thế nào bạn có thể tìm thấy sự khác biệt giữa phiên bản hiện tại và phiên bản cuối cùng?
git diff last version:HEAD
Sử dụng Git, làm thế nào bạn có thể tìm thấy sự khác biệt giữa phiên bản hiện tại và phiên bản cuối cùng?
git diff last version:HEAD
Câu trả lời:
Tôi không thực sự hiểu ý nghĩa của "phiên bản cuối".
Vì cam kết trước đó có thể được truy cập bằng CHÍNH ^, tôi nghĩ rằng bạn đang tìm kiếm thứ gì đó như:
git diff HEAD^ HEAD
Kể từ Git 1.8.5, @
là bí danh HEAD
, vì vậy bạn có thể sử dụng:
git diff @~..@
Sau đây cũng sẽ làm việc:
git show
Nếu bạn muốn biết khác biệt giữa đầu và bất kỳ cam kết nào bạn có thể sử dụng:
git diff commit_id HEAD
Và điều này sẽ khởi chạy công cụ tìm khác biệt trực quan của bạn (nếu được định cấu hình):
git difftool HEAD^ HEAD
Vì so sánh với HEAD là mặc định, bạn có thể bỏ qua nó (như được chỉ ra bởi Orient ):
git diff @^
git diff HEAD^
git diff commit_id
~
nhân vật phải được sử dụng thay vì ^
.@
là một bí danh cho HEAD
. Và vì ~
và ^
giống nhau khi chỉ quay lại một lần, tôi thấy git diff @~..@
việc gõ dễ dàng hơn nhiều.
git show
vẫn dễ dàng hơn, vì đó @~..@
là điều mặc định hiển thị.
git show
Chỉ in thông điệp cam kết, nó không tạo ra khác biệt về các thay đổi cụ thể, ít nhất là trong Git 2.5.4 (Apple Git-61), vì vậy nó thực sự sẽ không phải là câu trả lời cho câu hỏi của OP.
git show
là nếu HEAD
là một cam kết hợp nhất, bạn sẽ không nhận được những gì bạn mong đợi vì bản thân cam kết hợp nhất có thể không có bất kỳ thay đổi nào. git diff HEAD^ HEAD
sẽ hiển thị những thay đổi thực tế giữa các phiên bản
Giả sử "phiên bản hiện tại" là thư mục làm việc (sửa đổi không được cam kết) và "phiên bản cuối cùng" là HEAD
(sửa đổi cam kết cuối cùng cho chi nhánh hiện tại), chỉ cần làm
git diff HEAD
Tín dụng cho những người sau đây đi đến người dùng Cerran
.
Và nếu bạn luôn bỏ qua khu vực dàn dựng -a
khi bạn cam kết, thì bạn có thể chỉ cần sử dụng git diff
.
Tóm lược
git diff
cho thấy những thay đổi không có căn cứ.git diff --cached
cho thấy những thay đổi theo giai đoạn.git diff HEAD
hiển thị tất cả các thay đổi (cả dàn dựng và không dàn dựng).Nguồn: git-diff (1) Trang hướng dẫn - Cerran
-a
khi bạn cam kết, thì bạn có thể chỉ cần sử dụng git diff
. <1> git diff
show unstaged thay đổi. <2> git diff --cached
hiển thị các thay đổi theo giai đoạn . <3> git diff HEAD
hiển thị tất cả các thay đổi (cả được dàn dựng và không được dàn dựng). Nguồn: git-diff (1) Trang hướng dẫn sử dụng
Như đã chỉ ra trên một nhận xét của amalloy , nếu theo "phiên bản hiện tại và phiên bản cuối", bạn có nghĩa là cam kết cuối cùng và cam kết trước đó, bạn chỉ cần sử dụng
git show
git show HEAD~1
để hiển thị cam kết cuối cùng, và git show HEAD~2
, v.v. cho các cam kết cũ hơn. Chỉ hiển thị một tập tin duy nhất thông qua git show HEAD~2 my_file
.
Sự khác biệt giữa cam kết cuối cùng nhưng một cam kết cuối cùng (cộng với trạng thái hiện tại, nếu có):
git diff HEAD~
hoặc thậm chí (dễ gõ hơn)
git diff @~
nơi @
là synonim cho HEAD
các chi nhánh và hiện tại ~
có nghĩa là "cho tôi phụ huynh sửa đổi nêu trên".
git diff HEAD^
(hơn là HEAD~
hình thức tương đương ). Nó dễ nhớ hơn đối với một "git cũ" như tôi ;-)
~
và @
ý nghĩa.
diff HEAD^ HEAD
nên được git diff @^!
. Xem git-scm.com/docs/gitrevutions chor1^!
Chỉ sử dụng cached
cờ nếu bạn đã thêm nhưng chưa cam kết:
git diff --cached --color
Đầu tiên, sử dụng " git log
" để liệt kê các bản ghi cho kho lưu trữ.
Bây giờ, chọn hai ID cam kết, liên quan đến hai cam kết. Bạn muốn thấy sự khác biệt ( ví dụ - Cam kết nhiều nhất và một số cam kết cũ hơn (theo kỳ vọng của bạn về phiên bản hiện tại và một số phiên bản cũ) ).
Tiếp theo, sử dụng:
git diff <commit_id1> <commit_id2>
hoặc là
git difftool <commit_id1> <commit_id2>
Nếu cam kết hàng đầu được chỉ ra bởi HEAD thì bạn có thể làm một cái gì đó như thế này:
commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2
Khác nhau giữa cam kết thứ nhất và thứ hai:
git diff HEAD~1 HEAD
Khác nhau giữa cam kết thứ nhất và thứ ba:
git diff HEAD~2 HEAD
Khác nhau giữa cam kết thứ hai và thứ ba:
git diff HEAD~2 HEAD~1
Và như thế...
Tôi sử dụng Bitbucket với IDE Eclipse với cài đặt plugin Eclipse EGit .
Tôi so sánh một tệp từ bất kỳ phiên bản nào trong lịch sử của nó (như SVN ).
Menu Project Explorer → Tệp → nhấp chuột phải → Nhóm → Hiển thị trong lịch sử .
Điều này sẽ mang lại lịch sử của tất cả các thay đổi trên tập tin đó. Bây giờ Ctrlbấm vào và chọn bất kỳ hai phiên bản → "So sánh với nhau" .
Điều này cũng sẽ hoạt động cho các thẻ (loại bỏ 'uniq' bên dưới và các phần khác nếu bạn cần xem tất cả các thay đổi):
git diff v1.58 HEAD
Dưới đây là giống nhau và có thể hữu ích cho việc tích hợp liên tục (CI) cho các dịch vụ siêu nhỏ trong kho lưu trữ nguyên khối:
git diff v1.58 HEAD --name-only | sort -u | awk 'BEGIN {FS="/"} {print $1}' | uniq
<Folder Name>
(Tín dụng - https://dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo )