තනි ගොනුවක් නැවත සකස් කිරීම


1041

මගේ වැඩ කරන නාමාවලියෙහි දැනට නවීකරණය කරන ලද ගොනු තුනක් තිබේ. කෙසේ වෙතත් මට අවශ්‍ය වන්නේ ඔවුන්ගෙන් එක් අයෙකු හෙඩ් තත්වයට නැවත සකස් කිරීමයි.

SVN හි, මම භාවිතා කරමි svn revert <filename>( svn update <filename>අවශ්‍ය නම් අනුගමනය කරනු ලැබේ ) නමුත් Git හි මම භාවිතා කළ යුතුය git reset --hard. කෙසේ වෙතත් මෙම විධානය තනි ගොනුවක ක්‍රියාත්මක විය නොහැක.

තනි ගොනුවක වෙනස්කම් බැහැර කර නැවුම් HEAD පිටපතක් සමඟ නැවත ලිවීමට Git හි ක්‍රමයක් තිබේද?


3
git checkoutපහත දැක්වෙන්නේ පිළිතුරයි. Git හි, "ආපසු හැරවීම" යනු ඔබ කළ යුතු දෙයකි. Rever තිහාසික කැපවීමක ප්‍රතිලෝම ඔබගේ ක්‍රියාකාරී නාමාවලියට “ප්‍රතිවර්තනය” නැවත ප්‍රතිස්ථාපනය කරයි, එවිට ඔබට ආපසු හරවන ලද බැඳීම “අහෝසි” කරන නව බැඳීමක් කළ හැකිය. Svn වෙතින් git වෙත පැමිණෙන පුද්ගලයින්ට මෙය නිරන්තරයෙන් ව්‍යාකූල වන බව මට පෙනේ.
ඩෑන් රේ


ඔබට මාර්ග සමඟ අමාරුවෙන් යළි පිහිටුවිය නොහැක්කේ මන්දැයි ඔබ උනන්දු වන්නේ නම්, මගේ පිළිතුර එහි බලන්න .
පරිශීලක

මෙම ප්‍රශ්නය උපකල්පනය කරන්නේ, දෘ reset යළි පිහිටුවීම යනු කුමක්දැයි යමෙක් දන්නා බවයි.

Answers:


1873

ඔබට පහත විධානය භාවිතා කළ හැකිය:

git checkout HEAD -- my-file.txt

... එමඟින් my-file.txtHEAD වෙතින් දර්ශකයේ වැඩ කරන පිටපත සහ එහි තත්වය යාවත්කාලීන කරනු ඇත .

--මූලික වශයෙන් අදහස් කරන්නේ: මෙම ලක්ෂ්‍යයෙන් පසුව ඇති සෑම තර්කයක්ම ගොනු නාමයක් ලෙස සලකන්න . මෙම පිළිතුරේ වැඩි විස්තර . මෙය පෙන්වා දීම ගැන VonC ට ස්තූතියි .


60
වඩාත් සම්පූර්ණ පිළිතුර. +1;) '-' සඳහා, stackoverflow.com/questions/6561142/… (සහ, වඩාත් සාමාන්‍යයෙන්, stackoverflow.com/questions/1192180/… ) ද බලන්න
VonC

8
HEAD~1අවසාන කැපවීම දැක්වීමට පෙර කළ කැපවීමක් සඳහන් කළ හැකි බව අමතක නොකරන්න .
රයන්ට්

14
ඔබ පිටතට තැබිය හැක HEADබලන්න - ඔබ දැනට ශාඛා නායකයා නම් norbauer.com/rails-consulting/notes/...
cxw

4
resetවිධානය (එය පවසන පරිදි) "මාර්ග සමඟ අමාරුවෙන් යළි පිහිටුවීම කළ නොහැක්කේ ඇයි" යන්න පිළිබඳ යම් අවබෝධයක් ලබා දී , පසුව checkoutමුළු කට්ටලයම නැවත සකස් කිරීම සඳහා විධානය භාවිතා කළ නොහැක්කේ ඇයි? (මම අදහස් කළේ එය එසේ නිර්මාණය කර ඇත්තේ මන්ද යන්නයි.)
එස්.

1
xcxw අවාසනාවකට මෙන් මෙය සත්‍යයක් නොවේ. හි මෑන් පිටුවෙන් git checkout: "දර්ශකයේ හෝ <tree-ish> හි අන්තර්ගතය ආදේශ කිරීමෙන් වැඩ කරන ගසෙහි මාර්ග නැවත ලියන්න". එනම්, <tree-ish>මඟ හැරී ඇත්නම් , වැඩ කරන ගස යාවත්කාලීන කිරීම සඳහා දර්ශකයේ ඇති ඕනෑම අන්තර්ගතයක් භාවිතා කරනු ඇත. මෙය HEAD ට වඩා වෙනස් විය හැකිය.
tuntap

141

හිසට නැවත සකසන්න:

එක් ගොනුවක් HEAD වෙත නැවත සැකසීමට:

git checkout @ -- myfile.ext

@සඳහා කෙටි බව සලකන්න HEAD. Git හි පැරණි අනුවාදයක් කෙටි ආකෘතියට සහය නොදක්වයි.

දර්ශකයට යළි පිහිටුවන්න:

තනි ගොනුවක් දර්ශකයට නැවත සැකසීමට , දර්ශකය හිස් නොවන බව උපකල්පනය කර, එසේ නොමැතිනම් HEAD වෙත:

git checkout -- myfile.ext

කාරණය වන්නේ ආරක්ෂිතව සිටීම සඳහා, ඔබ විශේෂයෙන් දර්ශකයට පමණක් නැවත සැකසීමට අදහස් කරන්නේ නම් මිස, විධානයෙන් ඉවත් වීමට @හෝ HEADඉවත් වීමට ඔබට අවශ්‍ය නැත .


1
Myfile.ext ට පෙර "-" සමඟ ඇති සම්බන්ධය කුමක්ද?
ලාන්ස් කරුණාව

3
AnceLanceKind මට තේරෙන පරිදි, එය අනුගමනය කරන්නේ ගොනු නාම ලැයිස්තුවක් වෙන්කර හඳුනා ගැනීම සඳහා ය. එය නොමැතිව, git විසින් තර්ක වැරදි ලෙස අර්ථ නිරූපණය කරන අවස්ථා තිබේ.
Acumenus

3
ගොනු නාම පමණක් නොවේ. බහුලව භාවිතා වන සම්මුතිය බොහෝ උපයෝගිතා වල ස්ථානීය තර්ක වලින් විකල්ප වෙන් කරයි. man bashපිටුව බලන්න . මෙම පිළිතුරෙහි ද සඳහන් කර ඇත: unix.stackexchange.com/a/187548/142855
boweeb

2
සාම්ප්‍රදායිකව, --වැඩසටහන භාවිතා කිරීමට භාවිතා කරයි I've finished specifying "options", and from here on, everything will be a positional argument.. සාම්ප්‍රදායිකව, “විකල්ප” යනු --recursiveඕනෑම අනුපිළිවෙලකින් දිස්විය හැකි හෝ ඒවායේ කෙටි ස්වරූපයෙන් එකට එකතු කළ හැකි ටෝකන rm -rfවේ. ඊට පටහැනිව, “ස්ථානීය තර්ක” යනු ක්‍රමලේඛන භාෂාවක ශ්‍රිතයක් වෙත ඉදිරිපත් කරන ලද තර්ක හා සමාන ය: ටෝකන ලැයිස්තුවේ ඔවුන්ගේ පිහිටීම මඟින් වැඩසටහන ඔවුන් සමඟ හරියටම කරන්නේ කුමක්ද යන්න නිර්වචනය කරයි (මේවා බොහෝ විට ගොනු නාමයන් වේ). --කුමක්ද යන්න පිළිබඳ අපැහැදිලි බව ඉවත් කරයි.
iono

48

උඩුමහලට / මාස්ටර් වෙත ආපසු යාමට:

git checkout upstream/master -- myfile.txt

29

සිට Git 2.23 (අගෝස්තු 2019) ඔබ භාවිතා කළ හැකිය restore( වැඩි තොරතුරු ):

git restore pathTo/MyFile

ඉහත නැවතත් යථා තත්වයට පත් කරනු ලබන MyFileමත HEAD(පසුගිය සිදු) වර්තමාන ශාඛා මත.

ඔබට වෙනත් බැඳීම් වලින් වෙනස්කම් ලබා ගැනීමට අවශ්‍ය නම්, බැඳීම් ඉතිහාසය වෙත පසුපසට යා හැකිය. පහත දැක්වෙන විධානයට MyFileඅන්තිම එකට පෙර කොමිස් දෙකක් ලැබෙනු ඇත . ඔබට දැන් -s( --source) විකල්පය අවශ්‍ය වන්නේ ඔබ භාවිතා කරන මූලාශ්‍රය ප්‍රතිෂ් restore ාපනය කරන විට master~2නොවේ master(පෙරනිමිය):

git restore -s master~2 pathTo/MyFile

ඔබට වෙනත් ශාඛාවකින් ගොනුව ලබා ගත හැකිය!

git restore -s my-feature-branch pathTo/MyFile

2
මෙතෙක් ඇති පහසුම ක්‍රමය. අවාසනාවට මෙම පිළිතුර ප්‍රමාණවත් අවධානයක් නොලැබේ.
singrium


4

තනි ගොනුවක් නැවත සැකසීම සඳහා ඔබට පහත විධානය භාවිතා කළ හැකිය

git checkout HEAD -- path_to_file/file_name

path_to_file/filenameපහත දැක්වෙන විධානය සමඟ ලබා ගැනීම සඳහා වෙනස් කළ සියලුම ගොනු ලැයිස්තුගත කරන්න

git status

1

ඔබට පහත විධානය භාවිතා කළ හැකිය:

git reset -- my-file.txt

my-file.txtඑකතු කරන විට වැඩ කරන පිටපත දෙකම යාවත්කාලීන කරයි.


ඉල්ලූ පරිදි වෙනස් කළ ගොනුවේ අන්තර්ගතය වෙනස් නොකරයි.
රෆායෙල්

1
එය විශේෂයෙන් @ADDQU කාරණය නොවේ. ප්‍රශ්නය වන්නේ ගොනුවක් “දෘ reset යළි පිහිටුවීම” මිස එය වේදිකාගත කළ ලැයිස්තුවෙන් ඉවත් නොකිරීමයි.
රෆායෙල්

Af රෆායෙල් ඔබ නිවැරදියි, නමුත් මට ක්‍රමයක් ද ඇති බව ඔබට දැනුම් දීමට කැමැත්තෙමි.
ADDYQU

0

ඔබට පහත විධානය භාවිතා කළ හැකිය:

git checkout filename

ඔබට එකම ගොනු නාමයක් සහිත ශාඛාවක් තිබේ නම් ඔබට මෙම විධානය භාවිතා කළ යුතුය:

git checkout -- filename

1
මෙය ගොනුව "දෘ reset යළි පිහිටුවීම" නොකරනු ඇත - එය දර්ශක තත්වය වැඩ කරන ගසට පමණක් පිටපත් කරයි. “දෘ reset යළි පිහිටුවීම” මඟින් පළමුව දර්ශකය යළි පිහිටුවනු ඇත.
ඒඑච්

-21

සරල, පහසු, අත්-උණුසුම්, ඔබව උණු වතුරෙන් ගලවා ගැනීමේ ක්‍රමයක්, විශේෂයෙන් ඔබ git සමඟ එතරම් සැපපහසු නොවේ නම්:

  1. ඔබගේ ගොනුවේ ලොගය බලන්න

    git log myFile.js

    commit 1023057173029091u23f01w276931f7f42595f84f කර්තෘ: kmiklas දිනය: අඟහරුවාදා අගෝස්තු 7 09:29:34 2018 -0400

    ජිරා -12345 - නව ගෘහ නිර්මාණ ශිල්පය සමඟ ප්‍රතික්‍රියාකාරකය.

  2. ගොනුවේ හැෂ් සටහන:

    1023057173029091u23f01w276931f7f42595f84f

  3. හැෂ් භාවිතයෙන් ගොනුව පෙන්වන්න. එය ඔබට අවශ්‍ය දේ බවට වග බලා ගන්න:

    git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js

  4. ගොනුව දේශීය පිටපතකට හරවා යැවීම

    git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js> myFile.07aug2018.js

  5. ඔබගේ වත්මන් ගොනුව උපස්ථ කරන්න.

    cp myFile.js myFile.bak.js

  6. ඔබගේ ප්‍රියතම පෙළ සංස්කාරකයේ ගොනු දෙකම විවෘත කරන්න.

    vim myFile.js
    vim myFile.07aug2018.js

  7. N 'පේස්ට් කේතය myFile.07aug2018.js සිට myFile.js වෙත පිටපත් කර සුරකින්න.

  8. කැපවී myFile.js තල්ලු කරන්න

  9. නැවතත් ලොගය බලන්න, සහ ඔබේ ගොනුව නිසි පරිදි ක්‍රියාත්මක වන බව තහවුරු කරන්න.

  10. ඔබේ ගනුදෙනුකරුවන්ට නවතම දේ ඇද ගැනීමට කියන්න, එය පැරණි අනුවාදය සමඟ ක්‍රියා කරන ආකාරය සතුටින් බලන්න.

සරාගී, හෝ බොහෝ git- කේන්ද්‍රීය විසඳුමක් නොවේ, සහ අනිවාර්යයෙන්ම "අත්පොත" යළි පිහිටුවීම / ආපසු හැරවීම, නමුත් එය ක්‍රියාත්මක වේ. එයට git පිළිබඳ අවම දැනුමක් අවශ්‍ය වන අතර කැපවීමේ ඉතිහාසයට බාධා නොකරයි.


2
මෙම පිළිතුර වසර ගණනාවකට පෙර ඉදිරිපත් කරන ඕනෑම විසඳුමකට වඩා බෙහෙවින් සංකීර්ණ හා දෝෂ සහිත වේ.
Artif3x

2
කිසිවෙකු මෙම විසඳුම භාවිතා කළ යුත්තේ ඇයි? සත්‍ය පිළිතුර සරල විධානයක් පමණි.
මිලාඩ් රහමි

1
ඇතැම් තත්වයන් සඳහා ප්‍රශස්ත විසඳුම මෙයයි. එය බන්ධනයක සිටින අයට, git ක්‍රියා විරහිතව සිටින අයට සහ වැඩ කිරීමට අවශ්‍ය අයට සුදුසුකම් ඇත.
kmiklas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.