Có một lệnh trong Git để xem (được đổ vào thiết bị xuất chuẩn hoặc trong $PAGER
hoặc $EDITOR
) một phiên bản cụ thể của một tệp cụ thể không?
git checkout <sha1-of-the-commit-you-need>
, sau đó,git checkout HEAD
Có một lệnh trong Git để xem (được đổ vào thiết bị xuất chuẩn hoặc trong $PAGER
hoặc $EDITOR
) một phiên bản cụ thể của một tệp cụ thể không?
git checkout <sha1-of-the-commit-you-need>
, sau đó,git checkout HEAD
Câu trả lời:
Bạn có thể sử dụng git show
với một đường dẫn từ thư mục gốc của kho lưu trữ ( ./
hoặc ../
cho đường dẫn tương đối):
$ git show REVISION:path/to/file
Thay thế REVISION
bằng sửa đổi thực tế của bạn (có thể là Git commit SHA, tên thẻ, tên chi nhánh, tên cam kết tương đối hoặc bất kỳ cách nào khác để xác định một cam kết trong Git)
Ví dụ: để xem phiên bản của tệp <repository-root>/src/main.c
từ 4 lần xác nhận trước, hãy sử dụng:
$ git show HEAD~4:src/main.c
Git cho Windows yêu cầu gạch chéo về phía trước ngay cả trong các đường dẫn liên quan đến thư mục hiện tại. Để biết thêm thông tin, hãy kiểm tra trang người đàn ông cho git-show
.
Làm điều này theo ngày trông như thế này:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
Lưu ý rằng điều đó HEAD@{2013-02-25}
có nghĩa là "nơi ĐẦU TIÊN vào 2013 / 02-25" trong kho lưu trữ này (sử dụng reflog ), chứ không phải "cam kết cuối cùng trước 2013 / 02-25 trong chi nhánh này trong lịch sử".
master
thay vì HEAD@{2013-02-25}
, nếu bạn ở trong một chi nhánh
git log --since='2016-04-28 23:59:59 +0100'
?
Nếu bạn thích GUI, bạn có thể sử dụng gitk:
bắt đầu gitk với:
gitk /path/to/file
Chọn sửa đổi ở phần trên cùng của màn hình, ví dụ như theo mô tả hoặc ngày. Theo mặc định, phần dưới của màn hình hiển thị độ lệch cho phiên bản đó, (tương ứng với nút radio "vá").
Để xem tập tin cho phiên bản đã chọn:
gitk REVISION /path/to/file
. Điều này có thể có ích khi bạn muốn kiểm tra một phiên bản nhất định chẳng hạn.
Bạn cũng có thể chỉ định một commit hash
(thường được gọi là commit ID
) với git show
lệnh .
git show <commitHash>:/path/to/file
git log /path/to/file
commit hash
như commit 06c98...
(06c98 ... là hàm băm cam kết)commit hash
git show <commitHash>:/path/to/file
bằng cách sử dụng commit hash
bước 3 và path/to/file
bước 1.Lưu ý: việc thêm ./
khi chỉ định đường dẫn tương đối có vẻ quan trọng, nghĩa làgit show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
.
git show <SHA1> --name-only
để có được nó.
Ngoài câu trả lời của Jim Hunziker ,
bạn có thể xuất tệp từ bản sửa đổi thành,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
Hi vọng điêu nay co ich :)
Để nhanh chóng thấy sự khác biệt với các phiên bản cũ hơn của tệp:
git show -1 filename.txt
> để so sánh với lần sửa đổi cuối cùng của tập tin
git show -2 filename.txt
> để so sánh với lần sửa đổi thứ 2
git show -3 fielname.txt
> để so sánh với lần sửa đổi thứ 3 cuối cùng
git log -p
sẽ hiển thị cho bạn không chỉ các bản ghi cam kết mà còn cả độ lệch của từng cam kết (ngoại trừ các cam kết hợp nhất). Sau đó, bạn có thể nhấn /
, nhập tên tệp và nhấn enter
. Nhấn n
hoặc p
để đi đến lần xuất hiện tiếp theo / trước đó. Bằng cách này, bạn sẽ không chỉ nhìn thấy những thay đổi trong tệp mà còn cả thông tin cam kết.
git log -pm
cũng sẽ hiển thị các cam kết hợp nhất.
git log -p -- filename.txt
để hạn chế lịch sử chỉ với tệp mong muốn.
Bạn có thể sử dụng tập lệnh như thế này để kết xuất tất cả các phiên bản của tệp thành các tệp riêng biệt:
ví dụ
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
Lấy kịch bản ở đây làm câu trả lời cho một câu hỏi tương tự khác
git_root
, git_log_short
và git_log_message_for_commit
đang mất tích.
CÁCH 1: (Tôi thích cách này)
git reflog
git diff-tree --no-commit-id --name-only -r <commitHash>
ví dụ:
git diff-tree --no-commit-id --name-only -r d2f9ba4
// "d2f9ba4" là id xác nhận từ "1."
git show <commitHash>:/path/to/file
ví dụ:
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift
// "Src / ..." là đường dẫn tệp từ "2."
CÁCH 2:
git reflog
git reset --hard %commit ID%
thiết lập lại git - cho c14809fa
Giúp tìm nạp nhiều tệp từ một phiên bản nhất định
Khi cố gắng giải quyết xung đột hợp nhất, người trợ giúp này rất hữu ích:
#!/usr/bin/env python3
import argparse
import os
import subprocess
parser = argparse.ArgumentParser()
parser.add_argument('revision')
parser.add_argument('files', nargs='+')
args = parser.parse_args()
toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).rstrip().decode()
for path in args.files:
file_relative = os.path.relpath(os.path.abspath(path), toplevel)
base, ext = os.path.splitext(path)
new_path = base + '.old' + ext
with open(new_path, 'w') as f:
subprocess.call(['git', 'show', '{}:./{}'.format(args.revision, path)], stdout=f)
Sử dụng:
git-show-save other-branch file1.c path/to/file2.cpp
Kết quả: phần sau chứa các phiên bản thay thế của tệp:
file1.old.c
path/to/file2.old.cpp
Bằng cách này, bạn giữ phần mở rộng tệp để trình soạn thảo của bạn không phàn nàn và có thể dễ dàng tìm thấy tệp cũ ngay bên cạnh tệp mới hơn.