Git: Xem cam kết cuối cùng của tôi


390

Tôi chỉ muốn xem các tệp đã được cam kết trong lần xác nhận cuối cùng chính xác như tôi đã thấy danh sách khi tôi làm git commit. Không may tìm kiếm

git "last commit" log

trong Google không đưa tôi đến đâu. Và

git diff HEAD^..HEAD

tất nhiên không phải là thứ tôi cần, vì nó cũng tạo ra sự thay đổi.


35
Cảm ơn, tôi thực sự chỉ cần git diff HEAD^..HEAD!
Ameen

Câu trả lời:


376

Như được xác định thông qua ý kiến, có vẻ như OP đang tìm kiếm

$ git log --name-status HEAD^..HEAD

Điều này cũng rất gần với đầu ra mà bạn nhận được từ svn statushoặc svn log -v, điều mà nhiều người từ lật đổ sang git đã quen thuộc.

--name-statuslà chìa khóa ở đây; như ghi nhận của folks khác trong câu hỏi này, bạn có thể sử dụng git log -1, git showgit diffđể có được cùng một loại đầu ra. Cá nhân, tôi có xu hướng sử dụng git show <rev>khi xem xét các phiên bản cá nhân.


Tôi thừa nhận, ý kiến ​​không phải là cách tốt nhất để tôi đưa ra câu hỏi của mình :) cảm ơn MikeSep
Dan Rosenstark

4
Tôi nghĩ rằng điều này mang lại cho cam kết cuối cùng, không? Vì vậy, lần cuối cùng tôi sẽ làmgit log --stat --author nroose -n 1
nroose

1
Và có thể được viết tắt và rút gọn với git show --name-status --oneline
jasonleonhard 8/1/2015

Điều đó quá rõ ràng! Tôi đã đoán nó là một cái gì đó rất đơn giản vì đây là loại truy vấn xảy ra mọi lúc.
Scott Biggie

1
Trong trường hợp sử dụng vũ lực, comand này sẽ hiển thị cho bạn bản vá cuối cùng thay vì cam kết (thời gian) mới nhất ... có thể khó khăn trong một số trường hợp sử dụng
Olix 8/12/2016

208

Sử dụng chương trình git :

git show --summary

Điều này sẽ hiển thị tên của các tệp được tạo hoặc loại bỏ, nhưng không hiển thị tên của các tệp đã thay đổi . Các git showlệnh hỗ trợ một loạt các định dạng đầu ra cho thấy nhiều loại hình thông tin về cam kết.


1
@jamessan git show --statgần, nhưng không có chế độ xem từ 'sửa đổi' hoặc 'thêm' xuất hiện bên cạnh tệp?
Dan Rosenstark

3
Nếu bạn chỉ muốn tên của các tệp (thậm chí ít hơn --stat), bạn cũng có thể muốn xem --name-status--name-onlychuyển đổi.
Mike Seplowitz

1
@MikeSep, đó thực sự là những gì tôi cần. Nếu bạn làm cho nó một câu trả lời tôi sẽ đánh dấu nó là câu trả lời tốt nhất, vì với tôi nó là. Tôi đang sử dụnggit log --name-status HEAD^..HEAD
Dan Rosenstark

Đây là giải pháp đơn giản nhất trong số những giải pháp được đưa ra.
Matthew


44

Để xem cam kết cuối cùng

git log -1

Để xem 2 cam kết cuối cùng

git log -2

Vân vân....


1
Nhưng câu hỏi cho biết "... muốn xem các tệp đã được cam kết trong lần xác nhận cuối cùng" .
Peter Mortensen

42

Cho đến nay, lệnh đơn giản nhất cho việc này là:

git show --name-only

Vì nó chỉ liệt kê các tệp trong lần xác nhận cuối cùng và không cung cấp cho bạn toàn bộ can đảm

Một ví dụ về đầu ra là:

commit  fkh889hiuhb069e44254b4925d2b580a602
Author: Kylo Ren <Kylo@darkside.empire.gov>
Date:   Sat May 4 16:50:32 2168 -0700

Changed shield frequencies to prevent Millennium Falcon landing

 www/controllers/landing_ba_controller.js             
 www/controllers/landing_b_controller.js            
 www/controllers/landing_bp_controller.js          
 www/controllers/landing_h_controller.js          
 www/controllers/landing_w_controller.js  
 www/htdocs/robots.txt                        
 www/htdocs/templates/shields_FAQ.html       

7
Hãy xem xét --name-statusthay vì --name-only.
Acumenus

5
Có vấn đề ngay tại đó .. đế chế đang sử dụng php cho lưới phòng thủ!
ptim

3
Ví dụ tốt nhất tôi từng thấy trên stackoverflow! "Đó không phải là những cam kết mà bạn đang tìm kiếm."
Scott Biggie

22
git log -1 --name-status

Có công việc cho tôi.


21

Để xem các thay đổi cam kết cuối cùng

git show HEAD

Hoặc để xem thay đổi cam kết cuối cùng thứ hai

git show HEAD~1

Và để biết thêm, chỉ cần thay thế '1' ở trên bằng số thứ tự cam kết được yêu cầu.


15

Sau khi bạn thực hiện một số cam kết hoặc sao chép / kéo một kho lưu trữ, bạn có thể muốn xem những cam kết nào đã được thực hiện. Chỉ cần kiểm tra các giải pháp đơn giản này để xem lịch sử cam kết của bạn (từ lần cam kết cuối cùng / gần đây đến lần đầu tiên).

Đối với lần xác nhận cuối cùng, chỉ cần thực hiện lệnh này : git log -1. Để biết thêm những điều thú vị, xem bên dưới -

  1. Để xem ID cam kết (tổng kiểm tra SHA-1), Tên tác giả <ID mail>, Ngày cùng với thời gian và thông báo cam kết -

    git log
    
  2. Để xem thêm một số thống kê, chẳng hạn như tên của tất cả các tệp đã thay đổi trong cam kết đó và số lần chèn / xóa. Điều này rất hữu ích trong khi xem xét mã -

    git log --stat
    
  3. Để xem lịch sử cam kết trong một số định dạng đẹp :) (Điều này được theo sau bởi một số tùy chọn dựng sẵn) -

    • Nếu bạn có quá nhiều cam kết để xem xét, lệnh này sẽ hiển thị chúng trong một dòng duy nhất:

      git log --pretty=oneline
      
    • Để xem chi tiết ngắn, trung bình, đầy đủ hoặc thậm chí nhiều chi tiết hơn về cam kết của bạn, hãy sử dụng theo sau, tương ứng -

      git log --pretty=short
      git log --pretty=medium
      git log --pretty=full
      git log --pretty=fuller
      
  4. Bạn thậm chí có thể sử dụng định dạng đầu ra của riêng bạn bằng cách sử dụng formattùy chọn -

    git log --pretty=format:"%an, %ae - %s"
    

    trong đó% an - tên tác giả,% ae - email tác giả,% s - chủ đề của cam kết, v.v.

Điều này có thể giúp bạn với lịch sử cam kết của bạn. Để biết thêm thông tin, bấm vào đây .


11
$ git diff - ĐẦU chỉ có tên ^ .. ĐẦU

hoặc là

$ git log - ĐẦU TIÊN chỉ có tên ^ .. ĐẦU

Đó là những gì tôi cần khá nhiều. Làm thế nào về một cái gì đó nói liệu nó đã được sửa đổi, thêm hoặc xóa? Có lẽ với một lá thư, svn-style?
Dan Rosenstark

1
Giờ đã hiểu. git log --name-status HEAD^..HEAD
Dan Rosenstark

2
Thay vì git log ... HEAD^..HEAD, nó không đơn giản để sử dụng git log ... -1 HEAD, hay tốt hơn git show ... HEAD?
Jakub Narębski

Sau khi duyệt qua một vài bài đăng Stackoverflow, đây là câu trả lời tôi cần. Tôi chỉ muốn các tập tin và không có gì khác. Không có bản tóm tắt cam kết, chỉ các tệp từ cam kết mới nhất. CẢM ƠN!
luckytaxi

6

git diff --stat HEAD

Điều này cho thấy sự khác biệt tương tự như cam kết cuối cùng của bạn.


4

Một cách khác để chỉ liệt kê các tệp là sử dụng:
git diff-tree --no-commit-id --name-only -r HEAD^..HEAD
Hoặc bạn có thể sử dụng bất kỳ hai ID cam kết nào


lợi thế của điều này để log ?
Dan Rosenstark

Nó về cơ bản là một cách khác nhau để liệt kê các tập tin. Tôi thường kết hợp điều này với rsync để triển khai
Ismail Cherri

0

Nếu bạn đang nói về việc tìm kiếm cam kết mới nhất và lớn nhất sau khi bạn thực hiện kiểm tra git của một số cam kết trước đó ( và quên ghi lại hàm băm của TRƯỚC trước khi thực hiện thanh toán ), hầu hết những điều trên sẽ không đưa bạn trở lại nơi bạn đã bắt đầu. git log - [some #] chỉ hiển thị nhật ký từ vị trí HIỆN TẠI của HEAD , đây không nhất thiết là cam kết cuối cùng (trạng thái của dự án). Checkout sẽ ngắt kết nối CHÍNH và chỉ nó vào bất cứ điều gì bạn đã kiểm tra.

Bạn có thể xem toàn bộ refit git , cho đến khi đạt được mục tham chiếu bản sao gốc. BTW, điều này cũng sẽ không hoạt động nếu bất kỳ cam kết nào được thực hiện giữa thời gian bạn nhân bản dự án và khi bạn thực hiện thanh toán. Nếu không, bạn có thể hy vọng tất cả các cam kết của mình trên máy cục bộ của bạn nằm trên máy chủ và sau đó sao chép lại toàn bộ dự án.

Hi vọng điêu nay co ich.


Cảm ơn, đó là một điểm tốt nhưng câu hỏi ban đầu đơn giản hơn nhiều và đã được trả lời tốt nhiều lần.
Dan Rosenstark
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.