Apakah ada perintah Git untuk melihat (baik dibuang ke stdout, atau di $PAGER
atau $EDITOR
) versi tertentu dari sebuah file tertentu?
Anda dapat menggunakan git show
:
$ git show REVISION:path/to/file
Mengganti REVISI dengan revisi yang sebenarnya (bisa Git commit SHA, tag nama, nama cabang, relatif komit nama, atau dengan cara lain mengidentifikasi komit dalam Git)
Misalnya, untuk melihat versi dari file src/main.c
dari 4 melakukan yang lalu, menggunakan:
$ git show HEAD~4:src/main.c
Perhatikan bahwa jalur dari akar repositori kecuali dimulai dengan ./ atau ../ untuk menunjukkan path relatif. Git untuk Windows membutuhkan garis miring ke depan bahkan di path relatif ke direktori saat ini. Untuk informasi lebih lanjut, lihat man page untuk git-show
.
Lakukan ini dengan upload akan terlihat seperti ini:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
Perhatikan bahwa KEPALA@{2013-02-25}
berarti "di mana KEPALA pada 2013-02-25" dalam repositori ini (menggunakan yang reflog), bukan "komit terakhir sebelum 2013-02-25 di cabang ini dalam sejarah".
Jika anda suka Gui, anda dapat menggunakan gitk:
gitk /path/ke/file
Memilih revisi di bagian atas layar, misalnya dengan deskripsi, atau tanggal. Secara default, bagian bawah layar menunjukkan diff untuk yang revisi, (sesuai dengan "patch" tombol radio).
Untuk melihat file untuk revisi yang dipilih:
Anda juga dapat menentukan melakukan hash
(sering juga disebut komit ID
) dengan git show
command.
git show <commitHash>:/path/ke/file
git log /path/ke/file
melakukan hash
seperti melakukan 06c98...
(06c98... yang melakukan hash)melakukan hash
menggunakan
melakukan hash tentu langkah 3 & path/ke/file
dari langkah 1.Catatan: menambahkan ./
ketika menentukan path relatif tampaknya penting, yaitu git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
.
Selain untuk Jim Hunziker's jawaban,
anda dapat mengekspor file dari revisi sebagai,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
Semoga ini bisa membantu :)
git log -p
akan menunjukkan anda tidak hanya melakukan log tetapi juga perbedaan dari masing-masing melakukan (kecuali menggabungkan melakukan). Kemudian anda dapat menekan /
, masukkan nama file dan tekan enter
. Tekan n
atau p
untuk pergi ke berikutnya/sebelumnya kejadian tersebut. Dengan cara ini anda tidak akan hanya melihat perubahan dalam file, tetapi juga melakukan informasi.
Untuk dengan cepat melihat perbedaan dengan yang lebih tua revisi file:
git show -1 filename.txt
> untuk membandingkan terhadap revisi terakhir dari file
git show -2 filename.txt
> untuk membandingkan terhadap 2 revisi terakhir
git show -3 fielname.txt
> untuk membandingkan terhadap lalu 3rd revisi terakhir
Anda dapat menggunakan script seperti ini untuk membuang semua versi dari file ke file terpisah:
misalnya
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
Mendapatkan script berikut ini sebagai jawaban untuk pertanyaan lain yang serupa
Helper untuk mengambil beberapa file dari suatu revisi
Ketika mencoba untuk menyelesaikan menggabungkan konflik, 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)
Penggunaan:
git-show-save other-branch file1.c path/to/file2.cpp
Hasil: berikut berisi versi alternatif dari file:
file1.old.c
path/to/file2.old.cpp
Dengan cara ini, anda tetap ekstensi file jadi editor anda tidak't mengeluh, dan dapat dengan mudah menemukan file lama, hanya baru satu.