වරෙක, මගේ ව්යාපෘතියේ ලිපිගොනුවක් තිබුනි, දැන් මට ලබා ගැනීමට හැකි වනු ඇත.
ගැටලුව වන්නේ: මම එය මකා දැමුවේ කවදාද සහ කුමන මාවතේද යන්න ගැන මට කිසිම අදහසක් නැත.
මෙම ගොනුව පවතින විට එහි කොමිස් සොයා ගන්නේ කෙසේද?
වරෙක, මගේ ව්යාපෘතියේ ලිපිගොනුවක් තිබුනි, දැන් මට ලබා ගැනීමට හැකි වනු ඇත.
ගැටලුව වන්නේ: මම එය මකා දැමුවේ කවදාද සහ කුමන මාවතේද යන්න ගැන මට කිසිම අදහසක් නැත.
මෙම ගොනුව පවතින විට එහි කොමිස් සොයා ගන්නේ කෙසේද?
Answers:
ඔබ භාවිතා කළ හැකි නිශ්චිත මාර්ගය ඔබ නොදන්නේ නම්
git log --all --full-history -- "**/thefile.*"
ගොනුව තිබූ මාර්ගය ඔබ දන්නවා නම්, ඔබට මෙය කළ හැකිය:
git log --all --full-history -- <path-to-file>
මෙම ගොනුව ස්පර්ශ කළ සියලුම ශාඛා වල කොමිස් ලැයිස්තුවක් මෙයින් පෙන්විය යුතුය. එවිට ඔබට අවශ්ය ගොනුවේ අනුවාදය සොයාගත හැකි අතර එය සමඟ ප්රදර්ශනය කරන්න ...
git show <SHA> -- <path-to-file>
නැතහොත් එය ඔබගේ වැඩ කරන පිටපතට නැවත පිහිටුවන්න:
git checkout <SHA>^ -- <path-to-file>
හඳුනාගත් තැනැත්තාට පෙර පිටවීම ලබා ගන්නා කැරට් සංකේතය ( ^
) සැලකිල්ලට ගන්න , මන්දයත් ගොනුව මකාදැමීමේ මොහොතේදී , මකාදැමුණු ගොනුවේ අන්තර්ගතය ලබා ගැනීම සඳහා අප කළ පෙර කැපවීම දෙස බැලිය යුතුය.<SHA>
git log -- <path>
ගොනුව කිසි විටෙකත් නොතිබූ ශාඛාවක සිටින විට edPedroMorteRolo හට ප්රතිදානයක් නොලැබේ. git log --all -- <path>
වෙනත් ශාඛා වල සිදු වූ වෙනස්කම් ඔබ අතපසු නොකිරීමට ඔබ සැමවිටම භාවිතා කළ යුතුය . git log -- <path>
ඔබට එක් ශාඛාවකට වඩා තිබේ නම් සහ මාර්ග සහ අතු (මා වැනි) අමතක කිරීමට නැඹුරු නම් විධානය ඉතා භයානක විය හැකි අතර ඔබ වෙනත් සංවර්ධකයින් සමඟ වැඩ කරන්නේ නම් එය ද භයානක ය.
git checkout <SHA>^ -- <path-to-file>
මකා දැමූ ලිපිගොනු ලැයිස්තුවක් ලබාගෙන මකා දැමූ ගොනුවේ සම්පූර්ණ මාර්ගය පිටපත් කරන්න
git log --diff-filter=D --summary | grep delete
ඊළඟ විධානය ක්රියාත්මක කර එම කැපවීමේ හැඳුනුම්පත සොයා ගැනීමට සහ බැඳීම් හැඳුනුම්පත පිටපත් කරන්න
git log --all -- FILEPATH
මකා දැමූ ගොනුවේ වෙනස පෙන්වන්න
git show COMMIT_ID -- FILE_PATH
මතක තබා ගන්න, ඔබට >
වැනි භාවිතා කරමින් ගොනුවකට ප්රතිදානය ලිවිය හැකිය
git show COMMIT_ID -- FILE_PATH > deleted.diff
unknown revision or path not in the working tree
.
git log --diff-filter=D --summary | grep -E 'delete|^commit\s+\S+'
git-grep-latest(){ result_path=$(git log --diff-filter=D --summary | grep $1 | head -1 | awk '{print $4;}'); latest_commit=$(git log --all -- $result_path | head -1 | awk '{print $2;}'); git show $latest_commit -- $result_path; }
දැන් ඔබට මෙය කළ හැකිය:git-grep-latest some_text
linux pipes
.. ඔබ එයට කැමති වනු ඇත.
ඔබට නමින් ගොනුවක් නැවත ලබා ගැනීමට අවශ්ය යැයි සිතමු MyFile
, නමුත් එහි ගමන් මාර්ගය ගැන අවිනිශ්චිත යැයි සිතමු (හෝ ඒ සඳහා එහි දිගුව):
මූලික: git root වෙත පියවර තැබීමෙන් ව්යාකූලත්වයෙන් වළකින්න
නොන්ට්රිවියල් ව්යාපෘතියකට සමාන හෝ සමාන නම් සහිත බහලුම් තිබිය හැකිය.
> cd <project-root>
සම්පූර්ණ මාර්ගය සොයා ගන්න
git log --diff-filter = D - සාරාංශය | grep delete | grep MyFile
delete mode 100644 full/path/to/MyFile.js
full/path/to/MyFile.js
යනු ඔබ සොයන මාර්ගය සහ ගොනුවයි.
එම ගොනුවට බලපාන සියලු කොමිස් තීරණය කරන්න
git log --oneline --follow - full / path / to / MyFile.js
bd8374c Some helpful commit message
ba8d20e Another prior commit message affecting that file
cfea812 The first message for a commit in which that file appeared.
ගොනුව පරීක්ෂා කරන්න
ඔබ පළමු ලැයිස්තුගත කළ බැඳීම තෝරා ගන්නේ නම් (අවසාන කාලානුක්රමිකව, මෙහි bd8374c), එම බැඳීම මකා දැමූ බැවින් ගොනුව සොයාගත නොහැක.
> git checkout bd8374c -- full/path/to/MyFile.js
`error: pathspec 'full/path/to/MyFile.js' did not match any file(s) known to git.`
පූර්වයෙන් තෝරන්න (භාරයක් එකතු කරන්න) බැඳීම:
> git checkout bd8374c^ -- full/path/to/MyFile.js
git log --diff-filter=D --summary | find "delete" | find "MyFile"
සහ පියවර 3 , හැෂ් වටා ඇති මිල ගණන් සටහන් කරන්න:git checkout "bd8374c^" -- full/path/to/MyFile.js
පිළිගත් ප්රතිචාරය සංස්කරණය කිරීමට නොහැකි වූ බැවින් එය පිළිතුරක් ලෙස මෙහි එක් කිරීම,
ගොනුව යථා තත්වයට පත් කිරීම සඳහා, පහත සඳහන් දෑ භාවිතා කරන්න (SHA ට පසුව '^' ලකුණ සටහන් කරන්න)
git checkout <SHA>^ -- /path/to/file
<SHA>~1
එය මිල ගණන් වලින් ඔතා අවශ්යතාවයකින් තොරව ක්රියා කළ යුතුය.
ඇම්බර් නිවැරදි පිළිතුරක් දුන්නා! තවත් එක් එකතු කිරීමක් පමණක්, ගොනුවේ නිශ්චිත මාර්ගය ඔබ නොදන්නේ නම් ඔබට ආදේශක කාඩ් භාවිතා කළ හැකිය! මෙය මට වැඩ කළා.
git log --all -- **/thefile.*
පහත දැක්වෙන්නේ සරල විධානයකි, එහිදී dev හෝ git පරිශීලකයෙකුට නිධි මූල නාමාවලියෙන් මකාදැමුණු ගොනු නාමයක් ලබා දී ඉතිහාසය ලබා ගත හැකිය:
git log --diff-filter=D --summary | grep filename | awk '{print $4; exit}' | xargs git log --all --
ඕනෑම කෙනෙකුට, විධානය වැඩි දියුණු කළ හැකි නම්, කරුණාකර කරන්න.
gitk
අඩක් මතක තබා ගත් ගොනුව සොයා ගැනීමට ඔබට ඉතිහාසය පුරා සැරිසැරීමට හැකි වන පරිදි නරඹන්නන්ගෙන් එකක් භාවිතා කිරීමට උත්සාහ කරන්න . ( gitk --all
සියලුම ශාඛා සඳහා අවශ්ය නම් භාවිතා කරන්න )
--all
ඔබේ පිළිතුර සහ පිළිගත් පිළිතුර යන දෙකම සඳහා එම විකල්පය ඉතා වැදගත් වේ.
සාරාංශය:
මකාදැමූ ලිපිගොනු ඉතිහාසයේ ඔබේ ගොනුවේ සම්පූර්ණ මාර්ගය සොයන්න git log --diff-filter=D --summary | grep filename
ඔබගේ ගොනුව මකා දැමීමට පෙර ඔබ එය ප්රතිෂ් restore ාපනය කරයි
restore () {
filepath="$@"
last_commit=$(git log --all --full-history -- $filepath | grep commit | head -1 | awk '{print $2; exit}')
echo "Restoring file from commit before $last_commit"
git checkout $last_commit^ -- $filepath
}
restore my/file_path
මෙන්න මගේ විසඳුම:
git log --all --full-history --oneline -- <RELATIVE_FILE_PATH>
git checkout <COMMIT_SHA>^ -- <RELATIVE_FILE_PATH>