Làm thế nào để xem lịch sử tập tin trong Git?


133

Với Subversion tôi có thể sử dụng TortoiseSVN để xem lịch sử / nhật ký của tệp.

Làm thế nào tôi có thể làm điều này với Git?

Chỉ cần tìm bản ghi lịch sử cho một tệp cụ thể, và sau đó khả năng so sánh các phiên bản khác nhau.

Câu trả lời:


156

Sử dụng git logđể xem lịch sử cam kết. Mỗi cam kết có một công cụ xác định sửa đổi liên quan là khóa băm (ví dụ 14b8d0982044b0c49f7a855e396206ee65c0e787b410ad4619d296f9d37f0db3d0ff5b9066838b39). Để xem sự khác biệt giữa hai cam kết khác nhau, hãy sử dụng git diffvới một vài ký tự đầu tiên của các chỉ định sửa đổi của cả hai cam kết, như vậy:

# diff between commits 14b8... and b410...
git diff 14b8..b410
# only include diff of specified files
git diff 14b8..b410 path/to/file/a path/to/file/b

Nếu bạn muốn có được cái nhìn tổng quan về tất cả những khác biệt xảy ra từ cam kết đến cam kết, hãy sử dụng git loghoặc git whatchangedvới tùy chọn vá:

# include patch displays in the commit history
git log -p
git whatchanged -p
# only get history of those commits that touch specified paths
git log path/a path/b
git whatchanged path/c path/d

7
Cảm ơn mẹo -p, điều đó cực kỳ hữu ích cho việc tìm kiếm các bản sửa đổi liên quan đến một chút mã.
Christopher Pickslay

100

Có vẻ như bạn muốn git diff và / hoặc git log . Ngoài ra hãy kiểm tra gitk

gitk path/to/file
git diff path/to/file
git log path/to/file

3
Đây là một cái gật đầu khác cho gitk, cung cấp một cách tuyệt vời để duyệt tất cả các ảnh chụp nhanh của một tệp trong một repo git.
Ray Brown

1
Theo mặc định, gitk hiển thị khác biệt với 10 dòng ngữ cảnh, nhưng nếu bạn muốn xem ảnh chụp nhanh của toàn bộ tệp thì sao? Chỉ cần đặt "Dòng bối cảnh" thành một giá trị lớn (ví dụ: 100000). Sau đó, bạn có thể lật qua lại giữa các lần xác nhận và xem toàn bộ tệp tại các thời điểm khác nhau. (Bạn cũng có thể tìm kiếm trong tệp.)
antinome

35

Tôi thích sử dụng gitk name_of_file

Điều này cho thấy một danh sách tốt đẹp về những thay đổi đã xảy ra với một tệp tại mỗi cam kết, thay vì hiển thị các thay đổi cho tất cả các tệp. Làm cho nó dễ dàng hơn để theo dõi một cái gì đó đã xảy ra.


30

bạn cũng có thể sử dụng tig cho một trình duyệt kho git đẹp, dựa trên ncurses. Để xem lịch sử của một tập tin:

tig path/to/file

29

Yêu thích của tôi là git log -p <filename>, nó sẽ cung cấp cho bạn một lịch sử của tất cả các cam kết của tệp đã cho cũng như các khác biệt cho mỗi cam kết.


11

Nhiều trình duyệt lịch sử Git, bao gồm git log(và 'git log --graph'), gitk (trong Tcl / Tk, một phần của Git), QGit (trong Qt), tig (giao diện chế độ văn bản để git, sử dụng ncurses), Cười khúc khích Giới hạn đường dẫn hỗ trợ GTK +), TortoiseGit và git-cheetah (ví dụ gitk path/to/file).


@ RobertVuković Tôi biết đây là một câu hỏi cũ ... nhưng hãy xem câu trả lời của tôi dưới đây!
brianc

4

Tất nhiên, nếu bạn muốn thứ gì đó càng gần rùaSVN càng tốt, bạn chỉ cần sử dụng TortoiseGit .


Ngoại trừ việc các tiện ích mở rộng shell TortoiseSvn chứa một lệnh để hiển thị lịch sử của một tệp, trong khi đó TortoiseGit thì không.
Neutrino

3

git log --all -- path/to/file nên làm việc


Không có liên kết trong câu trả lời của tôi @ineersa
Edson Medina

1
Đây phải là câu trả lời hàng đầu. Tôi không thích sử dụng các công cụ gui crappy
Grobi


2

TortoiseGit cũng cung cấp một công cụ dòng lệnh để xem lịch sử của một tập tin. Sử dụng PowerShell:

C:\Program` Files\TortoiseGit\bin\TortoiseGitProc.exe /command:log /path:"c:\path\to\your\file.txt"
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.