มีคำสั่งใน Git เพื่อดู (ไม่ว่าจะถูกดัมพ์ไปยัง stdout หรือใน$PAGER
หรือ$EDITOR
) ไฟล์เฉพาะรุ่นใดรุ่นหนึ่ง?
git checkout <sha1-of-the-commit-you-need>
หลังจากนั้นทำอย่างนั้นgit checkout HEAD
มีคำสั่งใน Git เพื่อดู (ไม่ว่าจะถูกดัมพ์ไปยัง stdout หรือใน$PAGER
หรือ$EDITOR
) ไฟล์เฉพาะรุ่นใดรุ่นหนึ่ง?
git checkout <sha1-of-the-commit-you-need>
หลังจากนั้นทำอย่างนั้นgit checkout HEAD
คำตอบ:
คุณสามารถใช้git show
กับพา ธ จากรูทของที่เก็บ ( ./
หรือ../
สำหรับการจัดเส้นทางสัมพันธ์):
$ git show REVISION:path/to/file
แทนที่REVISION
ด้วยการแก้ไขที่แท้จริงของคุณ (อาจเป็น Git การกระทำ SHA, ชื่อแท็ก, ชื่อสาขา, ชื่อการส่งญาติหรือวิธีอื่น ๆ ในการระบุการกระทำใน Git)
ตัวอย่างเช่นหากต้องการดูเวอร์ชันของไฟล์<repository-root>/src/main.c
ตั้งแต่ 4 คอมมิชชันให้ใช้:
$ git show HEAD~4:src/main.c
Git สำหรับ Windows ต้องการเครื่องหมายสแลชแม้ในเส้นทางที่สัมพันธ์กับไดเรกทอรีปัจจุบัน git-show
สำหรับข้อมูลเพิ่มเติมโปรดดูที่หน้าคนสำหรับ
ทำสิ่งนี้ตามวันที่มีลักษณะเช่นนี้:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
โปรดทราบว่าHEAD@{2013-02-25}
หมายถึง "ตำแหน่งที่ HEAD อยู่ใน 2013-02-25" ในที่เก็บนี้ (ใช้reflog ) ไม่ใช่ "การคอมมิทครั้งสุดท้ายก่อน 2013-02-25 ในสาขานี้ในประวัติศาสตร์"
master
แทนHEAD@{2013-02-25}
ถ้าคุณอยู่ในสาขา
git log --since='2016-04-28 23:59:59 +0100'
?
ถ้าคุณชอบ GUI คุณสามารถใช้ gitk:
เริ่มต้น gitk ด้วย:
gitk /path/to/file
เลือกการแก้ไขในส่วนด้านบนของหน้าจอเช่นตามคำอธิบายหรือวันที่ ตามค่าเริ่มต้นส่วนล่างของหน้าจอจะแสดง diff สำหรับการแก้ไขนั้น (ตรงกับปุ่มตัวเลือก "แพทช์")
หากต้องการดูไฟล์สำหรับการแก้ไขที่เลือก:
gitk REVISION /path/to/file
คุณยังสามารถใช้ทางลัดนี้: สิ่งนี้มีประโยชน์เมื่อคุณต้องการตรวจสอบกับบางเวอร์ชันเช่น
นอกจากนี้คุณยังสามารถระบุcommit hash
(มักเรียกว่ายังcommit ID
) กับคำสั่งgit show
git show <commitHash>:/path/to/file
git log /path/to/file
commit hash
เช่นcommit 06c98...
(06c98 ... เป็นแฮชการกระทำ)commit hash
git show <commitHash>:/path/to/file
โดยใช้commit hash
ขั้นตอนที่ 3 และpath/to/file
ขั้นตอนที่ 1หมายเหตุ:การเพิ่มเมื่อระบุเส้นทางสัมพันธ์ดูเหมือนว่าสิ่งที่สำคัญคือ./
git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
git show <SHA1> --name-only
เพื่อรับมัน
นอกจากคำตอบของJim Hunzikerแล้ว
คุณสามารถส่งออกไฟล์จากการแก้ไขเป็น
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
หวังว่าจะช่วย :)
วิธีดูความแตกต่างอย่างรวดเร็วด้วยการแก้ไขไฟล์แบบเก่า:
git show -1 filename.txt
> เพื่อเปรียบเทียบกับการแก้ไขครั้งล่าสุดของไฟล์
git show -2 filename.txt
> เพื่อเปรียบเทียบกับการแก้ไขล่าสุดครั้งที่ 2
git show -3 fielname.txt
> เพื่อเปรียบเทียบกับการแก้ไขล่าสุดครั้งที่ 3
git log -p
จะแสดงให้คุณเห็นไม่ใช่แค่บันทึกการกระทำ แต่ยังแสดงความแตกต่างของการส่งข้อมูลแต่ละข้อ (ยกเว้นการกระทำที่ผสาน) จากนั้นคุณสามารถกดใส่ชื่อไฟล์และกด/
enter
กดn
หรือp
เพื่อไปยังเหตุการณ์ถัดไป / ก่อนหน้า วิธีนี้คุณจะไม่เพียง แต่เห็นการเปลี่ยนแปลงในไฟล์ แต่ยังรวมถึงข้อมูลการส่งมอบด้วย
git log -pm
จะแสดงการรวมการกระทำ
git log -p -- filename.txt
เพื่อยับยั้งประวัติเฉพาะไฟล์ที่ต้องการ
คุณสามารถใช้สคริปต์เช่นนี้เพื่อดัมพ์ไฟล์ทุกเวอร์ชันเพื่อแยกไฟล์:
เช่น
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
รับสคริปต์ที่นี่เป็นคำตอบของคำถามที่คล้ายกันอีกข้อ
git_root
, git_log_short
และgit_log_message_for_commit
จะหายไป
วิธีที่ 1: (ฉันชอบวิธีนี้)
git reflog
git diff-tree --no-commit-id --name-only -r <commitHash>
ตัวอย่าง:
git diff-tree --no-commit-id --name-only -r d2f9ba4
// "d2f9ba4" กำลังส่ง id จาก "1. "
git show <commitHash>:/path/to/file
ตัวอย่าง:
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift
// "Src / ... " คือพา ธ ไฟล์จาก "2. "
วิธีที่ 2:
git reflog
git reset --hard %commit ID%
รีเซ็ต git - ฮาร์ด c14809fa
ผู้ช่วยในการดึงไฟล์หลายไฟล์จากการแก้ไขที่กำหนด
เมื่อพยายามแก้ไขข้อขัดแย้งในการผสานผู้ช่วยนี้มีประโยชน์มาก:
#!/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 ต้นน้ำ
การใช้งาน:
git-show-save other-branch file1.c path/to/file2.cpp
ผลลัพธ์: ข้อมูลต่อไปนี้มีไฟล์ทางเลือกอื่น:
file1.old.c
path/to/file2.old.cpp
ด้วยวิธีนี้คุณจะรักษานามสกุลไฟล์ไว้เพื่อให้ตัวแก้ไขของคุณไม่บ่นและสามารถค้นหาไฟล์เก่าที่อยู่ถัดจากที่ใหม่กว่าได้อย่างง่ายดาย