Answers:
ඔයාට පාවිච්චි කරන්න පුළුවන්
git checkout -- file
--
(නිම්රොඩ්ම් විසින් යෝජනා කර ඇති පරිදි) ඔබට එය කළ හැකිය , නමුත් ගොනු නාමය ශාඛාවක් හෝ ටැගයක් (හෝ වෙනත් සංශෝධන හඳුනාගැනීමක්) මෙන් පෙනේ නම්, එය ව්යාකූල විය හැකිය, එබැවින් භාවිතා --
කිරීම වඩාත් සුදුසුය.
ගොනුවක විශේෂිත අනුවාදයක් ද ඔබට පරීක්ෂා කළ හැකිය:
git checkout v1.2.3 -- file # tag v1.2.3
git checkout stable -- file # stable branch
git checkout origin/master -- file # upstream master
git checkout HEAD -- file # the version from the most recent commit
git checkout HEAD^ -- file # the version before the most recent commit
git reset HEAD <filename> ; git checkout -- <filename>
HEAD^^
2 ක් හෝ HEAD^^^
නැවත කොමිස් 3 ක් සඳහා කළ හැකිය . ඔබට නැවත භාවිතා කිරීමට අවශ්ය නම් වඩාත් පහසු වන ඔබට භාවිතා කළ හැකිය HEAD~2
, නැතහොත් "මෙම කැපවීමේ දෙවන මාපිය" යන්නයි. ඒකාබද්ධ කිරීමේ බැඳීම් නිසා, බැඳීමකට පෙර බැඳීම් එකකට වඩා තිබිය හැකිය, එබැවින් සංඛ්යාවක් සමඟ එම දෙමව්පියන්ගෙන් කවරෙකු තෝරා ගන්නේද, සංඛ්යාවක් සමඟ සෑම විටම පළමු දෙමව්පියන් තෝරා ගන්නා නමුත් එම වාර ගණන නැවත ලබා ගනී. බලන්න වැඩි විස්තර සඳහා. HEAD~3
HEAD^2
HEAD^
HEAD~
git help rev-parse
භාවිතා කරන්න
git checkout filename
මෙය ගොනු නාමය වත්මන් ශාඛාවේ නවතම අනුවාදය සමඟ ප්රතිස්ථාපනය කරයි.
අවවාදයයි: ඔබගේ වෙනස්කම් ඉවතලනු ඇත - උපස්ථයක් තබා නොගනී.
git checkout x
සහ x යනු ශාඛා නාමයක් මෙන්ම ගොනු නාමයක් වේ නම්, පෙරනිමි හැසිරීම යනු කුමක්දැයි මට විශ්වාස නැත, නමුත් මම සිතන්නේ ඔබට x ශාඛාවට මාරුවීමට අවශ්ය යැයි git උපකල්පනය කරනු ඇත. ඔබ භාවිතා කරන විට ඔබ --
කියන්නේ පහත දැක්වෙන්නේ ගොනු නාමයයි.
--
එයින් ඉවත් කිරීම සඳහා පිළිතුර සංස්කරණය කළ බව පෙනේ. @ නිවැරදින් පෙන්වා දෙන පරිදි, තවමත් නිවැරදි වුවත්, ගොනු නාමය සහ ශාඛා නම් අතර අපැහැදිලි බවක් තිබේ නම්, ඔබට මෙහි ඉතා නුසුදුසු හැසිරීම් වලින් අවසන් විය හැකිය!
--
, ලස්සන හා පහසුයි. ගොනු නාම භාවිතා කරමින් ඔබ ශාඛා නම් කරන විට, කොතැනක හෝ නරක චින්තනයක් තිබිය යුතුය ...
git checkout <commit> <filename>
මම අද මෙය භාවිතා කළේ 6.10 ඩ්රැපූල් දක්වා ඉහළ නංවන විට මගේ ෆේවිකොන් කොමිස් කිහිපයකට පෙර නැවත ලියා ඇති බව මට වැටහුණු නිසා මට එය නැවත ලබා ගැනීමට සිදු විය. මෙන්න මම කළ දේ:
git checkout 088ecd favicon.ico
git log --oneline <filename>
ඔබට වඩාත් සංයුක්ත
git reflog <filename>
ඔබගේ ගොනුව දැනටමත් වේදිකා ගත කර ඇත්නම් (ගොනුව සංස්කරණය කිරීමෙන් පසු ඔබ git add යනාදිය සිදු කරන විට) ඔබගේ වෙනස්කම් අස්ථිර කිරීමට.
භාවිත
git reset HEAD <file>
ඉන්පසු
git checkout <file>
දැනටමත් වේදිකා ගත කර නොමැති නම්, භාවිතා කරන්න
git checkout <file>
එම එක් ගොනුවකට පෙර සිදු කළ වෙනස්කම් අහෝසි කිරීමට ඔබට අවශ්ය නම්, ඔබට මෙය උත්සාහ කළ හැකිය:
git checkout branchname^ filename
මෙය අවසාන කැපවීමට පෙර තිබූ පරිදි ගොනුව පරීක්ෂා කරනු ඇත. ඔබට තවත් කිහිපයක් ආපසු යාමට අවශ්ය නම්, branchname~n
අංකනය භාවිතා කරන්න .
branchname^
මට Git bash හරහා සිදු විය:
(use "git checkout -- <file>..." to discard changes in working directory)
මම සෑම විටම මේ සමඟ ව්යාකූල වී සිටිමි, එබැවින් මෙන්න මතක් කිරීමේ පරීක්ෂණ අවස්ථාවක්; bash
පරීක්ෂා කිරීමට මෙම පිටපත අප සතුව ඇතැයි කියමු git
:
set -x
rm -rf test
mkdir test
cd test
git init
git config user.name test
git config user.email test@test.com
echo 1 > a.txt
echo 1 > b.txt
git add *
git commit -m "initial commit"
echo 2 >> b.txt
git add b.txt
git commit -m "second commit"
echo 3 >> b.txt
මෙම අවස්ථාවෙහිදී, වෙනස හැඹිලියේ වේදිකා ගත නොකෙරේ, එසේ git status
ය:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: b.txt
no changes added to commit (use "git add" and/or "git commit -a")
මෙතැන් සිට, අපි කරන්නේ නම් git checkout
, ප්රති result ලය මෙයයි:
$ git checkout HEAD -- b.txt
$ git status
On branch master
nothing to commit, working directory clean
ඒ වෙනුවට අප එසේ කරන්නේ නම් git reset
, ප්රති result ලය වනුයේ:
$ git reset HEAD -- b.txt
Unstaged changes after reset:
M b.txt
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: b.txt
no changes added to commit (use "git add" and/or "git commit -a")
ඉතින්, මෙම අවස්ථාවේ දී - වෙනස්කම් වේදිකා ගත නොකළේ නම්, git reset
කිසිදු වෙනසක් සිදු නොකරන අතර git checkout
වෙනස්කම් නැවත ලියයි.
දැන් අපි කියමු, ඉහත පිටපතෙහි අවසාන වෙනස වේදිකාගත කර / හැඹිලිගත කර ඇති බව, එනම් අපි ද එසේ කළෙමු git add b.txt
අවසානයේ දී කළ .
මෙම අවස්ථාවේ git status
දී, මෙම අවස්ථාවෙහිදී:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: b.txt
මෙතැන් සිට, අපි කරන්නේ නම් git checkout
, ප්රති result ලය මෙයයි:
$ git checkout HEAD -- b.txt
$ git status
On branch master
nothing to commit, working directory clean
ඒ වෙනුවට අප එසේ කරන්නේ නම් git reset
, ප්රති result ලය වනුයේ:
$ git reset HEAD -- b.txt
Unstaged changes after reset:
M b.txt
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: b.txt
no changes added to commit (use "git add" and/or "git commit -a")
ඉතින්, මෙම අවස්ථාවේ දී - වෙනස්කම් වේදිකාගත කර git reset
ඇත්නම්, මූලික වශයෙන් වේදිකාගත කරන ලද වෙනස්කම් අස්ථායී වෙනස්කම් බවට පත් git checkout
කරනු ඇත - වෙනස්කම් සම්පූර්ණයෙන්ම නැවත ලියයි .
මෙම පිළිතුරු එකම හෝ බහු ෆෝල්ඩරවල (හෝ නාමාවලිවල) විශේෂිත ලිපිගොනු වල ඇති දේශීය වෙනස්කම් අහෝසි කිරීම සඳහා අවශ්ය විධානය සඳහා වේ. මෙම පිළිතුරු මගින් පරිශීලකයාට එක් ගොනුවකට වඩා ඇති නමුත් විශේෂයෙන් දේශීය වෙනස්කම් සියල්ල අහෝසි කිරීමට අවශ්ය නොවන ප්රශ්නයට ආමන්ත්රණය කරයි:
ඔබට ලිපිගොනු එකක් හෝ වැඩි ගණනක් තිබේ නම්, එම එක් එක් ලිපිගොනු වලට එකම විධානයක් යෙදිය හැකිය
git checkout -- file
.
git checkout -- name1/name2/fileOne.ext nameA/subFolder/fileTwo.ext
name1 / name2 / fileOne.ext nameA / subFolder / fileTwo.ext අතර ඇති අවකාශය මතක තබා ගන්න
එකම ෆෝල්ඩරයේ ඇති ගොනු කිහිපයක් සඳහා:
කිසියම් නාමාවලියක ඇති සියලුම ලිපිගොනු වල වෙනස්කම් ඉවත දැමීමට ඔබට අවශ්ය නම්, පහත දැක්වෙන පරිදි git checkout භාවිතා කරන්න:
git checkout -- name1/name2/*
ඉහත දැක්වෙන තරු ලකුණු මඟින් නම 1 / name2 යටතේ එම ස්ථානයේ ඇති සියලුම ලිපිගොනු අහෝසි කිරීමේ උපක්රමය කරයි.
ඒ හා සමානව, පහත දැක්වෙන පරිදි බහු ෆෝල්ඩර සඳහා සියලුම ලිපිගොනු වල වෙනස්කම් අහෝසි කළ හැකිය:
git checkout -- name1/name2/* nameA/subFolder/*
ඉහත සඳහන් නම් 1 / name2 / * nameA / subFolder / * අතර ඇති අවකාශය නැවත මතක තබා ගන්න.
සටහන: name1, name2, nameA, subFolder - මෙම සියලු උදාහරණ ෆෝල්ඩර නාම වලින් දැක්වෙන්නේ ගොනුව (ය) වාසය කළ හැකි ෆෝල්ඩරය හෝ පැකේජයයි.
ඔබ තවමත් ඔබගේ කැපවීම තල්ලු කර හෝ වෙනත් ආකාරයකින් බෙදාගෙන නොමැති නම්:
git diff --stat HEAD^...HEAD | \
fgrep filename_snippet_to_revert | cut -d' ' -f2 | xargs git checkout HEAD^ --
git commit -a --amend