वहाँ 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-show
।
तिथि के अनुसार ऐसा करना इस तरह दिखता है:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
ध्यान दें कि HEAD@{2013-02-25}
इस रिपॉजिटरी में "जहां HEAD 2013-02-25 था" ( रिफ्लग का उपयोग करते हुए ), "इतिहास में इस शाखा में 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
विवरण या तिथि के अनुसार, स्क्रीन के ऊपरी भाग में संशोधन चुनें। डिफ़ॉल्ट रूप से, स्क्रीन का निचला हिस्सा उस संशोधन के लिए भिन्न दिखाता है, ("पैच" रेडियो बटन के अनुरूप)।
चयनित संशोधन के लिए फाइल देखने के लिए:
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
path/to/file
नोट:./
जब एक रिश्तेदार पथ निर्दिष्ट करना जोड़ना महत्वपूर्ण लगता है, अर्थात git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
।
git show <SHA1> --name-only
इसे पाने के लिए उपयोग करें।
के अलावा जिम Hunziker के जवाब है,
आप संशोधन के रूप में फ़ाइल को निर्यात कर सकते हैं,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
उम्मीद है की यह मदद करेगा :)
किसी फ़ाइल के पुराने संशोधन के साथ अंतर को जल्दी से देखने के लिए:
git show -1 filename.txt
> फ़ाइल के अंतिम संशोधन के खिलाफ तुलना करने के लिए
git show -2 filename.txt
> दूसरे अंतिम संशोधन के खिलाफ तुलना करने के लिए
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
गायब हैं।
WAY 1: (मैं इस तरह से पसंद करता हूं)
git reflog
git diff-tree --no-commit-id --name-only -r <commitHash>
उदाहरण:
git diff-tree --no-commit-id --name-only -r d2f9ba4
// "d2f9ba4", "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%
जीआईटी रीसेट - भार 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)
उपयोग:
git-show-save other-branch file1.c path/to/file2.cpp
परिणाम: निम्न में फ़ाइलों के वैकल्पिक संस्करण हैं:
file1.old.c
path/to/file2.old.cpp
इस तरह, आप फ़ाइल एक्सटेंशन को रखते हैं ताकि आपके संपादक को शिकायत न हो, और आसानी से पुरानी फ़ाइल को नए के बगल में ढूंढा जा सके।