Apakah ada perintah di Git untuk melihat (baik dibuang ke stdout, atau di $PAGER
atau $EDITOR
) versi tertentu dari file tertentu?
git checkout <sha1-of-the-commit-you-need>
, setelahnya,git checkout HEAD
Apakah ada perintah di Git untuk melihat (baik dibuang ke stdout, atau di $PAGER
atau $EDITOR
) versi tertentu dari file tertentu?
git checkout <sha1-of-the-commit-you-need>
, setelahnya,git checkout HEAD
Jawaban:
Anda dapat menggunakan git show
lintasan dari akar repositori ( ./
atau ../
untuk lintasan relatif):
$ git show REVISION:path/to/file
Ganti REVISION
dengan revisi Anda yang sebenarnya (bisa berupa Git commit SHA, nama tag, nama cabang, nama komit relatif, atau cara lain untuk mengidentifikasi komit di Git)
Misalnya, untuk melihat versi file <repository-root>/src/main.c
dari 4 komit yang lalu, gunakan:
$ git show HEAD~4:src/main.c
Git untuk Windows memerlukan garis miring maju bahkan di jalur relatif ke direktori saat ini. Untuk informasi lebih lanjut, lihat halaman manual untuk git-show
.
Melakukan ini berdasarkan tanggal terlihat seperti ini:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
Catatan itu HEAD@{2013-02-25}
berarti "di mana HEAD berada pada 2013-02-25" di repositori ini (menggunakan reflog ), bukan "komit terakhir sebelum 2013-02-25 di cabang ini dalam sejarah".
master
sebagai ganti HEAD@{2013-02-25}
, jika Anda berada di cabang
git log --since='2016-04-28 23:59:59 +0100'
?
Jika Anda menyukai GUI, Anda dapat menggunakan gitk:
mulai gitk dengan:
gitk /path/to/file
Pilih revisi di bagian atas layar, mis. Dengan deskripsi atau tanggal. Secara default, bagian bawah layar menunjukkan perbedaan untuk revisi itu, (sesuai dengan tombol radio "tambalan").
Untuk melihat file untuk revisi yang dipilih:
gitk REVISION /path/to/file
. Ini bisa berguna ketika Anda ingin memeriksa versi tertentu misalnya.
Anda juga dapat menentukan commit hash
(sering juga disebut commit ID
) dengan git show
perintah .
git show <commitHash>:/path/to/file
git log /path/to/file
commit hash
seperti commit 06c98...
(06c98 ... menjadi hash komit)commit hash
git show <commitHash>:/path/to/file
menggunakan commit hash
langkah 3 & path/to/file
langkah 1.Catatan: menambahkan ./
ketika menentukan jalur relatif tampaknya penting, yaitu git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
.
git show <SHA1> --name-only
untuk mendapatkannya.
Selain jawaban Jim Hunziker ,
Anda dapat mengekspor file dari revisi sebagai,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
Semoga ini membantu :)
Untuk dengan cepat melihat perbedaan dengan revisi file yang lebih lama:
git show -1 filename.txt
> untuk membandingkan dengan revisi file terakhir
git show -2 filename.txt
> untuk membandingkan dengan revisi terakhir ke-2
git show -3 fielname.txt
> untuk membandingkan dengan revisi terakhir 3 terakhir
git log -p
akan menunjukkan kepada Anda tidak hanya log komit tetapi juga diff dari setiap komit (kecuali gabungan komit). Kemudian Anda dapat menekan /
, masukkan nama file dan tekan enter
. Tekan n
atau p
untuk pergi ke kejadian berikutnya / sebelumnya. Dengan cara ini Anda tidak hanya akan melihat perubahan dalam file tetapi juga informasi komit.
git log -pm
juga akan menampilkan komit gabungan.
git log -p -- filename.txt
untuk membatasi riwayat hanya file yang diinginkan.
Anda dapat menggunakan skrip seperti ini untuk membuang semua versi file ke file yang terpisah:
misalnya
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
Dapatkan skrip di sini sebagai jawaban untuk pertanyaan serupa lainnya
git_root
, git_log_short
dan git_log_message_for_commit
hilang.
CARA 1: (Saya lebih suka cara ini)
git reflog
git diff-tree --no-commit-id --name-only -r <commitHash>
contoh:
git diff-tree --no-commit-id --name-only -r d2f9ba4
// "d2f9ba4" adalah commit dari "1."
git show <commitHash>:/path/to/file
contoh:
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift
// "Src / ..." adalah path file dari "2."
CARA 2:
git reflog
git reset --hard %commit ID%
git reset --hard c14809fa
Membantu mengambil beberapa file dari revisi yang diberikan
Saat mencoba menyelesaikan konflik gabungan, pembantu ini sangat berguna:
#!/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)
Pemakaian:
git-show-save other-branch file1.c path/to/file2.cpp
Hasil: berikut ini berisi versi alternatif dari file:
file1.old.c
path/to/file2.old.cpp
Dengan cara ini, Anda menyimpan ekstensi file sehingga editor Anda tidak akan mengeluh, dan dapat dengan mudah menemukan file lama tepat di sebelah yang lebih baru.