කිසියම් ගොනුවක විශේෂිත අනුවාදයක් බැලීමට (එක්කෝ stdout වෙතට හෝ, $PAGER
හෝ $EDITOR
) බැලීමට Git හි විධානයක් තිබේද?
git checkout <sha1-of-the-commit-you-need>
, පසුව කරන්න,git checkout HEAD
කිසියම් ගොනුවක විශේෂිත අනුවාදයක් බැලීමට (එක්කෝ stdout වෙතට හෝ, $PAGER
හෝ $EDITOR
) බැලීමට Git හි විධානයක් තිබේද?
git checkout <sha1-of-the-commit-you-need>
, පසුව කරන්න,git checkout HEAD
Answers:
ඔබට git show
නිධියේ මුල සිට මාර්ගයක් භාවිතා කළ හැකිය ( ./
හෝ ../
සාපේක්ෂ ව්යායාම සඳහා):
$ git show REVISION:path/to/file
REVISION
ඔබගේ සත්ය සංශෝධනය සමඟ ප්රතිස්ථාපනය කරන්න (Git commit SHA, ටැග් නාමයක්, ශාඛා නාමයක්, සාපේක්ෂ බැඳීම් නාමයක් හෝ Git හි බැඳීමක් හඳුනා ගැනීමේ වෙනත් ක්රමයක් විය හැකිය)
උදාහරණයක් ලෙස, <repository-root>/src/main.c
කොමිස් 4 කට පෙර සිට ගොනුවේ අනුවාදය බැලීමට , භාවිතා කරන්න:
$ git show HEAD~4:src/main.c
වින්ඩෝස් සඳහා වන Git වත්මන් නාමාවලියට සාපේක්ෂව මාර්ගවල පවා ඉදිරි කප්පාදුවක් අවශ්ය වේ . වැඩි විස්තර සඳහා, man පිටුව බලන්න git-show
.
දිනය අනුව මෙය කිරීම පෙනේ:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
බව සටහන HEAD@{2013-02-25}
මාර්ගයෙන් මෙම නිධිය තුල "හිස 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
තිරයේ ඉහළ කොටසේ සංශෝධනය තෝරන්න, උදා: විස්තරය හෝ දිනය අනුව. පෙරනිමියෙන්, තිරයේ පහළ කොටස එම සංශෝධනය සඳහා වෙනස පෙන්වයි, ("පැච්" රේඩියෝ බොත්තමට අනුරූප වේ).
තෝරාගත් සංශෝධනය සඳහා ගොනුව බැලීමට:
gitk REVISION /path/to/file
. නිදසුනක් ලෙස ඔබට යම් අනුවාදයක් පරීක්ෂා කිරීමට අවශ්ය වූ විට මෙය ප්රයෝජනවත් වේ.
ඔබට විධානය සමඟ a 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
> 2 වන අවසාන සංශෝධනයට සාපේක්ෂව
git show -3 fielname.txt
> අවසාන 3 වන අවසාන සංශෝධනයට සාපේක්ෂව
git log -p
බැඳීම් ල logs ු-සටහන් පමණක් නොව, එක් එක් බැඳීම්වල වෙනස ද ඔබට පෙන්වනු ඇත (ඒකාබද්ධ කිරීමේ කොමිස් හැර). එවිට ඔබට එබිය හැකිය /
, ගොනු නාමය ඇතුළත් කර ඔබන්න 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" යනු "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 reset --hard 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
ප්රති come ලය: පහත දැක්වෙන්නේ ලිපිගොනු වල විකල්ප අනුවාදයන් ය:
file1.old.c
path/to/file2.old.cpp
මේ ආකාරයෙන්, ඔබ ගොනු දිගුව තබා ගන්නා බැවින් ඔබේ සංස්කාරකවරයා පැමිණිලි නොකරනු ඇති අතර පැරණි ගොනුව නවතම ගොනුවට යාබදව පහසුවෙන් සොයාගත හැකිය.