Ada yang cepat Git perintah untuk melihat versi lama dari file?

Apakah ada perintah Git untuk melihat (baik dibuang ke stdout, atau di $PAGER atau $EDITOR) versi tertentu dari sebuah file tertentu?

Mengomentari pertanyaan (1)

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.

Komentar (32)

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".

Komentar (6)

Jika anda suka Gui, anda dapat menggunakan gitk:

  1. mulai gitk dengan:

gitk /path/ke/file

  1. 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).

  2. Untuk melihat file untuk revisi yang dipilih:

  • Klik pada "pohon" tombol radio. Ini akan menunjukkan akar dari pohon file di revisi.
  • Drill down untuk file anda.
Komentar (5)

Anda juga dapat menentukan melakukan hash (sering juga disebut komit ID) dengan git show command.


Singkatnya

git show <commitHash>:/path/ke/file


Langkah demi langkah

  1. Tampilkan log dari semua perubahan pada berkas yang diberikan dengan git log /path/ke/file
  2. Dalam daftar perubahan yang ditunjukkan, itu menunjukkan melakukan hash seperti melakukan 06c98... (06c98... yang melakukan hash)
  3. Menyalin melakukan hash
  4. Menjalankan perintah git show :/path/ke/filemenggunakanmelakukan 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.

Komentar (3)

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 :)

Komentar (0)

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.

Komentar (2)

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

Komentar (1)

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

Komentar (3)

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)

GitHub upstream.

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.

Komentar (4)