Git'te belirli bir dosyanın belirli bir sürümünü ( stdout'a ya da $PAGER
veya içine $EDITOR
) görmek için bir komut var mı ?
git checkout <sha1-of-the-commit-you-need>
, sonradan,git checkout HEAD
Git'te belirli bir dosyanın belirli bir sürümünü ( stdout'a ya da $PAGER
veya içine $EDITOR
) görmek için bir komut var mı ?
git checkout <sha1-of-the-commit-you-need>
, sonradan,git checkout HEAD
Yanıtlar:
Sen kullanabilirsiniz git show
(depo kökünden bir yol ile ./
ya da ../
göreli pathing için):
$ git show REVISION:path/to/file
REVISION
Gerçek düzeltmenizle değiştirin (Git taahhüdü SHA'sı, etiket adı, şube adı, göreli taahhüt adı veya Git'teki taahhüdü tanımlamanın başka bir yolu olabilir)
Örneğin, <repository-root>/src/main.c
4 işlemden önceki dosya sürümünü görüntülemek için şunu kullanın:
$ git show HEAD~4:src/main.c
Windows için Git , geçerli dizine göre yollarda bile eğik çizgi gerektirir . Daha fazla bilgi için kılavuz sayfasına göz atın git-show
.
Bunu tarihe göre yapmak şöyle görünür:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
Bunun HEAD@{2013-02-25}
, "depoda tarihin bu dalında 2013-02-25 tarihinden önceki son taahhüt" değil, " depoda" HEAD'in 2013-02-25'te olduğu yer "anlamına geldiğini unutmayın .
master
HEAD@{2013-02-25}
git log --since='2016-04-28 23:59:59 +0100'
misiniz?
GUI'leri beğendiyseniz, gitk'i kullanabilirsiniz:
gitk ile şununla başla:
gitk /path/to/file
Ekranın üst kısmındaki düzeltmeyi, örneğin açıklama veya tarihe göre seçin. Varsayılan olarak, ekranın alt kısmı bu revizyonun farkını gösterir ("yama" radyo düğmesine karşılık gelir).
Seçilen düzeltmenin dosyasını görmek için:
gitk REVISION /path/to/file
. Bu, örneğin belirli bir sürüme karşı kontrol etmek istediğinizde kullanışlı olabilir.
Ayrıca komutla bir commit hash
(genellikle de denir commit ID
) belirtebilirsiniz .git show
git show <commitHash>:/path/to/file
git log /path/to/file
commit hash
gibi commit 06c98...
(06c98 ... karma tamamlama olmak üzere)commit hash
git show <commitHash>:/path/to/file
kullanarak commit hash
3. adımda & ait path/to/file
aşama 1.Not:./
göreceli bir yol belirtirken eklenmesi önemli gibi görünür git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
.
git show <SHA1> --name-only
almak için kullanın .
Jim Hunziker'in cevabına ek olarak ,
dosyayı revizyondan dışa aktarabilirsiniz,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
Bu yardımcı olur umarım :)
Bir dosyanın eski sürümlerindeki farkları hızlı bir şekilde görmek için:
git show -1 filename.txt
> dosyanın son revizyonuyla karşılaştırmak için
git show -2 filename.txt
> son revizyon ile karşılaştırmak
git show -3 fielname.txt
> son 3. son düzeltmeyle karşılaştırmak
git log -p
yalnızca taahhüt günlüklerini değil, aynı zamanda her bir taahhüdün farkını da gösterir (birleştirme taahhütleri hariç). Ardından tuşuna /
basıp dosya adını girebilir ve tuşuna basabilirsiniz enter
. Sonraki / önceki tekrarlamaya gitmek için n
veya tuşuna basın p
. Bu şekilde sadece dosyadaki değişiklikleri değil, aynı zamanda taahhüt bilgisini de göreceksiniz.
git log -pm
Birleştirme taahhütlerini de gösterecek gibi görünüyor .
git log -p -- filename.txt
Geçmişi yalnızca istenen dosyayla sınırlamak için de çalıştırabilirsiniz .
Bir dosyanın tüm sürümlerini dosyaları ayırmak için dökmek için şöyle bir komut dosyası kullanabilirsiniz:
Örneğin
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
Komut dosyasını benzer başka bir sorunun cevabı olarak buradan alın
git_root
, git_log_short
Ve git_log_message_for_commit
eksik.
YOL 1: (Bu yolu tercih ederim)
git reflog
git diff-tree --no-commit-id --name-only -r <commitHash>
örnek:
git diff-tree --no-commit-id --name-only -r d2f9ba4
// "d2f9ba4", "1" öğesinden taahhütlü kimliktir.
git show <commitHash>:/path/to/file
örnek:
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift
// "Src / ...", "2" nin dosya yoludur.
YOL 2:
git reflog
git reset --hard %commit ID%
git reset --hard c14809fa
Belirli bir düzeltmeden birden fazla dosya almak için yardımcı
Birleştirme çakışmalarını çözmeye çalışırken, bu yardımcı çok faydalıdır:
#!/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)
Kullanımı:
git-show-save other-branch file1.c path/to/file2.cpp
Sonuç: aşağıdakiler dosyaların alternatif sürümlerini içerir:
file1.old.c
path/to/file2.old.cpp
Bu şekilde, dosya uzantısını editörünüz şikayet etmeyecek ve eski dosyayı daha yenisinin hemen yanında bulabilecek şekilde tutarsınız.