Git හි ශාඛාවක් මකා දැමීමෙන් පසු මට එය නැවත ලබා ගත හැකිද?


1097

මම දුවන්නේ නම් git branch -d XYZ, ශාඛාව නැවත ලබා ගැනීමට ක්‍රමයක් තිබේද? මම මකාදැමීමේ ශාඛා විධානය ක්‍රියාත්මක නොකළාක් මෙන් ආපසු යාමට ක්‍රමයක් තිබේද?


4
පිළිගත් පිළිතුර ගැන සැබවින්ම නියම සටහනක් නම්, ශාඛාව ආරම්භයේදීම මකා දැමුවද එය ක්‍රියාත්මක වන බවයි! දේශීය වශයෙන් මා සතුව නොතිබූ ශාඛා කිහිපයක් අහම්බෙන් මකා දැමීමෙන් පසුව මම සොයා ගතිමි.
theblang

Answers:


2019

ඔව්, ඔබ විසින් git reflog --no-abbrevමකාදැමූ ශාඛාවේ කෙළවරේ ඇති බැඳීම සඳහා SHA1 සොයා ගැනීමට ඔබට හැකි විය යුතුය git checkout [sha]. ඔබ එම කැපවීමෙන් පසු, ඔබට git checkout -b [branchname]එහි සිට ශාඛාව නැවත ප්‍රතිනිර්මාණය කළ හැකිය .


මෙම ensed නීභූත / එක්-ලයිනර් අනුවාදය සඳහා as කැස්කබෙල් වෙත ණය.

ඔබට එය එක් පියවරකින් කළ හැකිය:

git checkout -b <branch> <sha>

488
ඔබට එය එක් පියවරකින් කළ හැකිය : git checkout -b <branch> <sha>.
කැස්කබෙල්

201
ඉක්මන් ඉඟිය - ඔබ ශාඛාව මකා දැමුවහොත් ඔබේ පර්යන්තයේ මෙවැනි දෙයක් ඔබට පෙනෙනු ඇත - "මකාදැමුණු ශාඛාව <yur-branch> (<sha>)". එවිට එය ඉතා පහසුයි - එය භාවිතා කරන්න <sha>. උදා: ඉහත සඳහන් කළ පරිදි -git checkout -b <branch> <sha>
ස්නෝක්‍රෑෂ්

6
ඔව්, ඔබේ පර්යන්තය තුළට අනුචලනය කරන්න (ඔබ එසේ නොකළේ නම් CMD+K)
නියුමුසික්

43
පෙරනිමියෙන් කෙටියෙන් git reflog --no-abbrevදක්වා ඇති පූර්ණ දැකීමට භාවිතා කරන්න <sha>.
jkulak

6
මකා දැමූ ශාඛාවේ ෂා සොයා ගැනීමට අපහසු වූ මා වැනි වෙනත් ඕනෑම කෙනෙකුට: මට හැකි විය git checkout remotes/origin/deleted_branch.
ජෙෆ් අර්වින්

165

බොහෝ විට ළඟා විය නොහැකි කොමිස් ඇත්තේ ප්‍රත්‍යාවර්තයේ ය. එබැවින්, උත්සාහ කළ යුතු පළමු දෙය නම් විධානය භාවිතා කරමින් reflog දෙස බැලීමයිgit reflog (එමඟින් reflog පෙන්වයි HEAD).

කැපවීම නිශ්චිත ශාඛාවක කොටසක් නම් සමහර විට පහසු දෙයක් වන්නේ විධානය භාවිතා කිරීමයි git reflog name-of-my-branch. එය දුරස්ථයක් සමඟද ක්‍රියා කරයි, නිදසුනක් ලෙස ඔබ බලෙන් තල්ලු කරන්නේ නම් (අමතර උපදෙස්: සෑම විටමgit push --force-with-lease ඒ වෙනුවට කැමති වන්නේ වැරදි වළක්වා ගැනීම සහ නැවත ලබා ගත හැකි).


ඔබගේ කොමිස් ඔබගේ ප්‍රත්‍යාවර්තයේ නොමැති නම් (සමහර විට තුන්වන පාර්ශවීය මෙවලමක් මඟින් මකාදැමීම නිසා මකාදැමීම නිසා), මම එවැනි ශාඛාවක් සාර්ථකව සොයාගත්තේ එවැනි විධානයක් භාවිතා කර සොයාගත් බැඳීමේ ෂා වෙත මගේ ශාඛාව නැවත සකස් කිරීමෙන් (එය සියලු කරදරකාරී කොමිස් සමඟ ගොනුවක් සාදයි):

git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt

ඔබ එය එක් වරකට වඩා භාවිතා කළ යුතු නම් (හෝ එය කොහේ හෝ සුරැකීමට අවශ්‍ය නම්), ඔබට එම විධානය සමඟ අන්වර්ථයක් නිර්මාණය කළ හැකිය ...

git config --global alias.rescue '!git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt'

එය සමඟ භාවිතා කරන්න git rescue

සොයාගත් කොමිස් විමර්ශනය කිරීම සඳහා, එක් එක් විධානයන් ඒවා සොයා බැලීමට යම් විධානයන් භාවිතා කර පෙන්විය හැකිය.

බැඳීම් පාර-දත්ත ප්‍රදර්ශනය කිරීම සඳහා (කර්තෘ, නිර්මාණ දිනය සහ කැපවීමේ පණිවිඩය):

git cat-file -p 48540dfa438ad8e442b18e57a5a255c0ecad0560

වෙනස්කම් ද බැලීමට:

git log -p 48540dfa438ad8e442b18e57a5a255c0ecad0560

ඔබගේ කැපවීම සොයාගත් පසු, මෙම බැඳීම පිළිබඳ ශාඛාවක් සාදන්න:

git branch commit_rescued 48540dfa438ad8e442b18e57a5a255c0ecad0560

වින්ඩෝස් යටතේ ඇති සහ GUI වලට කැමති අය සඳහා, => => විශේෂාංගය භාවිතා කිරීමෙන් ඔබට පහසුවෙන් GitExtensions සමඟ කොමිස් (සහ නොගැලපෙන වේදිකාගත ගොනු) ආපසු ලබා ගත හැකිය.RepositoryGit maintenanceRecover lost objects...


මකාදැමූ ලිපිගොනු පහසුවෙන් ලබා ගැනීමට සමාන විධානයක්: https://stackoverflow.com/a/58853981/717372


2
විශාල උදව්වක්. මගේ ප්‍රාදේශීය ගබඩාවේ කිසි විටෙකත් නැති වූ කැපවීමක් මට තිබුණි. ඔබ එහි ඇති පළමු විධානය මට එය සේවාදායකයෙන් සොයා ගැනීමට උදව් විය. +1
ෂෝන් ඇඩ්කින්සන්

1
ඒ git ගලවා ගැනීමේ අන්වර්ථය දේවතාවියකි !!! දායක වීම ගැන ඔබට බොහෝම ස්තූතියි!
72A12F4E

2
ඔබ මගේ ජීවිතය බේරුවා.
ජෙඩ් ලින්ච්

පැට්‍රික් කුරේවාර්ගේ පිළිතුර මට උදව් විය, මන්ද මා විසින් අවසන් වරට මකාදැමූ අතු බෙදීම් මම නොදනිමි <ෂා>.
මොනීර් ඛාන්

@ මොනීර්-ඛාන් සහ? මා නිගමනය කළ යුත්තේ කුමක්ද? පැට්රික් පිළිතුර මගේ විධානයේ පිටපතක් / පේස්ට් එකක් පමණි (දෝෂයක් ඇත: ඔහුට කොමිස් මත පෙරීමට අමතක විය) ...
පිලිප්

46

ඔබ GUI එකක් භාවිතා කිරීමට කැමති නම්, ඔබට gitk සමඟ සම්පූර්ණ මෙහෙයුම කළ හැකිය.

gitk --reflog

ශාඛාව මකා නොදමා ඇති ආකාරයට ශාඛාවේ බැඳීම් ඉතිහාසය බැලීමට මෙය ඔබට ඉඩ සලසයි. දැන් ශාඛාවට ඇති නවතම කැපවීම මත රයිට් ක්ලික් කර මෙනු විකල්පය තෝරන්න Create new branch.


28

ඉහළම ඡන්දය දුන් විසඳුම ඇත්ත වශයෙන්ම ඉල්ලීමට වඩා වැඩි යමක් කරයි:

git checkout <sha>
git checkout -b <branch>

හෝ

git checkout -b <branch> <sha>

ඔබට සිදු කිරීමට අමතක වී ඇති මෑත කාලීන වෙනස්කම් සමඟ ඔබව නව ශාඛාවට ගෙන යන්න. මෙය ඔබේ අභිප්‍රාය නොවිය හැකිය, විශේෂයෙන් ශාඛාව අහිමි වීමෙන් පසු "භීතිකාව" තුළ.

පිරිසිදු (හා සරල) විසඳුමක් එක්-ලයිනර් බව පෙනේ (ඔබ විසින් සොයා පසු <sha>සමග git reflog):

git branch <branch> <sha>

දැන් ඔබගේ වර්තමාන ශාඛාවට හෝ වෙනස් නොකළ වෙනස්කම් වලට බලපෑමක් නැත. ඒ වෙනුවට නව ශාඛාවක් පමණක් නිර්මාණය වනු ඇත <sha>.

එය ඉඟිය නොවේ නම්, එය තවමත් ක්‍රියාත්මක වන අතර ඔබට කෙටි ශාඛාවක් ලැබෙනු ඇත, එවිට ඔබට <sha>එය නිවැරදි වන තෙක් නව සහ නව ශාඛා නාමයෙන් නැවත උත්සාහ කළ හැකිය .

අවසාන වශයෙන් ඔබට සාර්ථකව ප්‍රතිෂ් ored ාපනය කරන ලද ශාඛාව නම් කරන ලද හෝ වෙනත් ඕනෑම දෙයකට නැවත නම් කළ හැකිය:

git branch -m <restored branch> <final branch>

සාර්ථකත්වයේ රහස වූයේ නිවැරදි කැපවීම සොයා ගැනීම බව අමුතුවෙන් කිව යුතු නැත <sha>, එබැවින් ඔබේ කැපවීම් wis ානවන්තව නම් කරන්න :)


14

Tfe පිළිතුරට එකතු කිරීම : ඔබට උදව් විය හැකි Git ප්‍රභවයන්හි (git.git නිධිය තුළ) git-resurrect.sh ස්ක්‍රිප්ට් ද contrib/ඇත.

git-resurrect <name>යනුවෙන් හැඳින්වෙන ශාඛා ඉඟියක හෝඩුවාවක් සොයා ගැනීමට <name>උත්සාහ කරන අතර එය නැවත නැඟිටුවීමට උත්සාහ කරයි. වර්තමානයේදී, පිරික්සුම් පණිවුඩ සඳහා පිරිපහදුව සොයනු ලබන අතර ඒකාබද්ධ පණිවිඩද -rඇත. සමග -mහා -t, සියලු ආශ්රේයන් ඉතිහාසය සඳහා ස්කෑන් ඇත Merge <name> into other/ Merge <other> into <name>(පිළිවෙළින්) සෙමින් නමුත් ඔබ අන් අයගේ මාතෘකාව ශාඛා නැවත උත්ථාන කිරීමට ඉඩ සලසා දෙයි විෂය, නසාගන්නවා.


1
මගේ PATH වෙත / usr / lib / git-core / එකතු කිරීමට සිදු වුවද එය දැන් මට වැඩ කර ඇත. නමුත් එය මා බලාපොරොත්තු වූ ප්‍රාතිහාර්යය සිදු කළේ නැත :(
AmanicA

10

මගේ මකා දැමූ ශාඛාව සොයා ගැනීමට සහ ලබා ගැනීමට මම පහත විධානයන් භාවිතා කළෙමි. පළමු පියවර gcb විස්තරයෙන් ය.

$ git fsck --full --no-reflogs --unreachable --lost-found > lost
$ cat lost | cut -d\  -f3 > commits
$ cat commits | xargs -n 1 git log -n 1 --pretty=oneline

දැන් බැඳීම් අදහස් මත පදනම්ව git commit id (GIT-SHA) සොයා එය පහත විධානයෙහි භාවිතා කරන්න. කලින් සොයාගත් GIT-SHA සමඟ NEW-BRANCH නමින් නව ශාඛාවක් පරීක්ෂා කරන්න:

$ git checkout -b NEW-BRANCH GIT-SHA

බොහොම ස්තූතියි. නම සෙවීමට මඳ වේලාවක් ගත කළ නමුත් එය වටින කාලය. කැපවීමේ පණිවිඩ පෙළක් සෙවීමට ක්‍රමයක් තිබේ නම්, වඩා හොඳ වනු ඇත.
මොනීර් ඛාන්

9

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

.git/objectsනාමාවලිය තුළ සිට ධාවනය:

find . -ctime -12h -type f | sed 's/[./]//g' | git cat-file --batch-check | grep commit

මෙය පසුගිය පැය 12 තුළ නිර්මාණය කරන ලද සියලුම වස්තු (කොමිට්, ලිපිගොනු, ටැග් ආදිය) සොයාගෙන ඒවා පමණක් පෙන්වීමට පෙරහන් කරයි. මේවා පරීක්ෂා කිරීම ඉක්මන් ක්‍රියාවලියකි.

මම සඳහන් git-ressurect.sh තිර රචනය උත්සාහ කියලා Jakub පිළිතුර පළමු නමුත්.


1
හොඳ විකල්ප අදහසක්! ඔබේ විධානය දෝෂයක් ඇති කරයි. ගැටළුව වන්නේ "12h" කොටස (ඇත්ත වශයෙන්ම "h") ය. මම "h" ඉවත් කළ පසු එය හොඳින් ක්‍රියාත්මක විය. සිට man find: "-ctime n - ගොනුවේ තත්වය අවසන් වරට වෙනස් කරන ලද්දේ n * පැය 24 කට පෙරය." එබැවින් අවසාන පැය 12 තුළ අපේක්ෂිත හැසිරීම ලබා ගැනීම සඳහා අප 12 සිට 0.5 දක්වා වෙනස් කළ යුතුය.
pagliuca

1
මම මෙහි OS X 10.8 භාවිතා කරමි, එබැවින් ඉහත 'සොයාගන්න' ධජ පදනම් වන්නේ එය නැව්ගත කරන අනුවාදය මත ය.
රොබට් නයිට්

1
ඔව්, ගැටලුව අනුවාදයන් සමඟ ඇති බව විශ්වාසයි! ඒ නිසයි මම ඔබේ පිළිතුර මුලින් ඉහළට ඔසවා තැබුවේ! මා අදහස් දැක්වූයේ පරාමිතීන් වෙනස් විය හැකි බව ජනතාව වටහා ගනිමිනි.
pagliuca

9

සඳහා GitHub Git තොරව භාවිතා කරන්නන් ස්ථාපනය:

ඔබට එය GitHub වෙබ් අඩවියෙන් ප්‍රතිස්ථාපනය කිරීමට අවශ්‍ය නම්, නැවත සම්බන්ධිත සිදුවීම් ලැයිස්තුවක් ලබා ගැනීමට ඔබට ඔවුන්ගේ API භාවිතා කළ හැකිය :

පලමු

  • එම SHAs සොයා ගන්න (හැෂ් කරන්න):

    curl -i https://api.github.com/repos/PublicUser/PublicRepo/events

    ... හෝ පුද්ගලික ගබඩාවන් සඳහා:

    curl -su YourUserName https://api.github.com/repos/YourUserName/YourProject/events

    (GitHub මුරපදය සඳහා විමසනු ඇත)

    • (Repo මඟින් සාධක දෙකක සත්‍යාපනය අවශ්‍ය නම්, මෙම පිළිතුර පිළිබඳ අදහස් පහතින් බලන්න.)

ඊලඟ

  • GitHub වෙත ගොස් නව තාවකාලික ශාඛාවක් සාදන්න, එය සදහටම මකා දැමෙනු ඇත ( Chrome වඩාත් සුදුසුය).

   Branches ශාඛා වෙත ගොස් එය මකා දමන්න.

   Page   එකම පිටුවේ, නැවත පූරණය නොකර , DevTools, ජාල පැනලය විවෘත කරන්න. දැන් සූදානම් වන්න ...

   Rest පිහිටුවීම ක්ලික් කරන්න. ඔබ නව "රේඛාවක්" දකිනු ඇත. එය මත දකුණු-ක්ලික් කර "CURL ලෙස පිටපත් කරන්න" තෝරන්න සහ මෙම පා some ය සමහර සංස්කාරකයේ සුරකින්න.

   Code පිටපත් කරන ලද කේත රේඛාවේ අවසානයට එකතු කරන්න, මෙය : -H "Cookie=".

ඔබ දැන් මෙවැනි දෙයක් ලබා ගත යුතුය:

    curl 'https://github.com/UserName/ProjectName/branches?branch=BranchSHA&name=BranchName' -H 'Cookie:' -H 'Origin: https://github.com' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US' -H 'User-Agent: User-Agent' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Accept: */*' -H 'Referer: https://github.com/UserName/ProjectName/branches' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' --data 'utf8=%E2%9C%93&authenticity_token=token' --compressed

අවසාන පියවර

  • "BranchSHA" ඔබේ SHA-hash හා BranchName සමඟ අපේක්ෂිත නමින් ආදේශ කරන්න (BTW, වෙබ් සිට ශාඛාව නැවත නම් කිරීම මහත් කරදරයකි). ඔබ ප්‍රමාද නොවූයේ නම්, කෙසේ හෝ මෙම ඉල්ලීම කළ යුතුය. උදාහරණයක් ලෙස, ටර්මිනලයකට පිටපත් කරන්න.

පීඑස්

මෙය "සරලම විසඳුම" හෝ "නිවැරදි" විසඳුම නොවන බව මට වැටහී ඇත, නමුත් යමෙකු එය ප්‍රයෝජනවත් යැයි සිතන්නේ නම් එය පිරිනමනු ලැබේ.


1
ඉහත සඳහන් දෑ මත රඳා නොපවතින අතළොස්සක් අතුරින් එකක් වන git reflogඅතර එම නිසා දුරස්ථ ශාඛාවක් මකා දමා පරිගණකයට ප්‍රවේශය අහිමි වූ විට ප්‍රයෝජනවත් සීතලෙන් කිසිවක් ලබා ගත reflogනොහැක. ගිතුබ් හි OAuth හෝ ද්වි-සාධක සත්‍යාපනය භාවිතා කරන විට සටහන curlවිධානය බවට පත්වේ: curl -u username:token https://api.github.com/userහෝcurl -H "Authorization: token TOKEN" https://api.github.com/repos/USER_OR_ORG_NAME/REPO_NAME/events
TT--

@ TT-- වාව්, එය උදව් කිරීම ගැන මට සතුටුයි! සත්‍යාපන ටෝකනය සම්බන්ධයෙන් ඔබගේ දායකත්වයට ස්තූතියි :)
මැක්සිම් මැසුරෝක්

8

මගේ අවබෝධයෙන් මකා දැමිය යුතු ශාඛාව වෙනත් ශාඛාවකට ළඟා විය හැකි නම්, ඔබට එය ආරක්ෂිතව මකා දැමිය හැකිය

git branch -d [branch]

ඔබේ වැඩ නැති නොවේ. ශාඛාවක් යනු සැණෙළියක් නොවන බව මතක තබා ගන්න. එබැවින් ඔබ ශාඛාවක් මකා දැමූ විට ඔබ දර්ශකයක් මකා දමයි.

ඔබ වෙනත් ශාඛාවකට ළඟා විය නොහැකි ශාඛාවක් මකා දැමුවහොත් ඔබට වැඩ පවා අහිමි නොවනු ඇත. ඇත්ත වශයෙන්ම එය බැඳීම් හෑෂ් පරීක්ෂා කිරීම තරම් පහසු නොවනු ඇත, නමුත් ඔබට තවමත් එය කළ හැකිය. භාවිතයෙන් ළඟා විය නොහැකි ශාඛාවක් මකා දැමීමට Git හට නොහැකි වන්නේ එබැවිනි -d. ඒ වෙනුවට ඔබ භාවිතා කළ යුතුය

git branch -D [branch]

මෙය ස්කොට් චකොන් විසින් Git ගැන අනිවාර්යෙන්ම නැරඹිය යුතු වීඩියෝවක කොටසකි. ඔහු ශාඛා ගැන කතා කරන විට සහ ඒවා මකා දැමූ ආකාරය 58:00 මිනිත්තුව පරීක්ෂා කරන්න.

GitHub හි ස්කොට් චකොන් සමඟ Git හැඳින්වීම


7
ප්‍රශ්නයට පිළිතුරු දීමට මෙය උපකාරී වන්නේ කෙසේද?
දිමිත්‍රි සයිට්සෙව්

6
අතු අන්තර්ගතය රඳවා නොගන්නා නමුත් ඇත්ත වශයෙන්ම දර්ශකයන් බව අසන්නාට පැවසීම. ශාඛා මකා දැමීමට ඔබ බිය විය යුතු නැත .. මකා දැමූ තැනැත්තාට සමාන කැපවීමකට යොමු කරමින් ඔබට නව ඒවා නිර්මාණය කළ හැකිය .... වාව්! මම තවමත් මෙම ප්‍රශ්නය ඇසූ විට මට මතකයි. 2012 දක්වා හොඳ කාලයක්!
fabiopagoti

1
AT තිරයට තිර තුනක් අනුචලනය කිරීමට සිදුවිය, ගැටලුව විසඳන පිළිතුරක් සොයා ගන්න: ශාඛාවක් මකා දැමීම යනු හුදෙක් දර්ශකයක් මකා දැමීමයි. මෙහි දත්ත නැතිවීමේ තත්වයක් නොමැත, නැවත ලබා ගත හැකි එකම දෙය එය පෙන්වා දුන් ස්ථානයයි. කෙලින්ම යන පිළිතුරු reflogඅතිරික්තය.
රොමේන් වලරි

5

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

  1. ඔබ ශාඛාව මකා දැමුවහොත්, ඔබේ පර්යන්තයේ මෙවැනි දෙයක් ඔබට පෙනෙනු ඇත:
    Deleted branch <your-branch> (was <sha>)

2. ශාඛාව යථා තත්වයට පත් කිරීම සඳහා, භාවිතා කරන්න:

    git checkout -b <branch> <sha>

ඔබේ හිස මුදුනේ ඇති 'ෂා' ඔබ නොදන්නේ නම්, ඔබට:

  1. ඔබගේ මකාදැමූ ශාඛාවේ කෙළවරේ ඇති කැපවීම සඳහා 'ෂා' සොයා ගන්න:
    git reflog
  1. ශාඛාව යථා තත්වයට පත් කිරීම සඳහා, භාවිතා කරන්න:
    git checkout -b <branch> <sha>

ඔබගේ කොමිස් ඔබගේ ප්‍රත්‍යාවර්තයේ නොමැති නම්:

  1. පහත දැක්වෙන විධානයක් භාවිතා කර සොයාගත් බැඳීමේ ෂා වෙත ඔබේ ශාඛාව නැවත සකස් කිරීමෙන් ඔබට ශාඛාවක් නැවත ලබා ගැනීමට උත්සාහ කළ හැකිය:
    git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt

2. එවිට ඔබට මේවායින් එකක් භාවිතා කර එක් එක් කැපවීම ප්‍රදර්ශනය කළ හැකිය:

    git log -p <commit>
    git cat-file -p <commit>

4

මකා දැමූ ශාඛාවක් නැවත ලබා ගැනීම සඳහා, පළමුව reflog ඉතිහාසය හරහා යන්න,

git reflog -n 60

මෙහි n යන්නෙන් අදහස් කරන්නේ අන්තිම n කොමිස් ය. ඉන්පසු නිසි හිස සොයාගෙන එම හිස සමඟ අත්තක් සාදන්න.

git branch testbranch HEAD@{30}

4

මට අවශ්‍ය නොවූ කොමිස් කිහිපයක් ඉවත් කිරීමට මම දුරස්ථ සිට ශාඛාවක් ප්‍රතිනිර්මාණය කළ අතර මට අවශ්‍ය නිවැරදි දේ චෙරිපික් කිරීමට ගියෙමි. ඇත්ත වශයෙන්ම මම SHAs ලිවීම වැරදියි ...

මෙන්න මම ඒවා සොයාගත් ආකාරයයි (බොහෝ විට මෙහි ඇති පිළිතුරු වලින් පහසු අතුරු මුහුණතක් / අන්තර්ක්‍රියාකාරිත්වයක්):

පළමුව, ඔබේ ලොගයේ ලිහිල් කොමිස් ලැයිස්තුවක් ජනනය කරන්න. කසළ එකතු කරන්නා විසින් ඉවත දැමිය හැකි බැවින් හැකි ඉක්මනින් මෙය කර වැඩ කිරීම නවත්වන්න.

git fsck --full --no-reflogs --unreachable --lost-found > lost

මෙය lostඔබ බැලීමට සිදුවන සියලු කොමිස් සමඟ ගොනුවක් සාදයි . අපගේ ජීවිතය සරල කිරීම සඳහා, අපි එයින් SHA පමණක් කපා ගනිමු:

cat lost | cut -d\  -f3 > commits

දැන් ඔබ commitsසොයා බැලිය යුතු සියලු කොමිස් සහිත ගොනුවක් තිබේ.

ඔබ Bash භාවිතා කරන බව උපකල්පනය කිරීම, අවසාන පියවර:

for c in `cat commits`; do  git show $c; read; done

මෙය ඔබට වෙනස පෙන්වන අතර ඒ සෑම එකක් සඳහාම තොරතුරු කැප කරයි. ඔබ එබෙන තෙක් බලා සිටින්න Enter. දැන් ඔබට අවශ්‍ය සියල්ල ලියා, ඉන්පසු ඒවා චෙරි-තෝරන්න. ඔබ අවසන් වූ පසු, එය Ctrl-C කරන්න.


2

ලොකු ඔව්

ඔබ GIT භාවිතා කරන්නේ නම් මෙම සරල පියවර අනුගමනය කරන්න https://confluence.atlassian.com/bbkb/how-to-restore-a-deleted-branch-765757540.html

ඔබ ස්මාර්ට්ගිට් භාවිතා කරන්නේ නම් සහ දැනටමත් එම ශාඛාව මූලාරම්භයට තල්ලු කරන්නේ නම්, එම ශාඛාව සොයාගෙන දකුණු ක්ලික් කර පරීක්ෂා කරන්න


1

පළමුවෙන්ම ඔබේ ව්‍යාපෘතියට ගෙනයාමට git batch වෙත යන්න:

cd android studio project
cd Myproject
then type :
git reflog

ඔබ සැමට වෙනස්කම් ලැයිස්තුවක් ඇති අතර යොමු අංකය ref අංකය
ගෙන ඇන්ඩ්‍රොයිඩ් චිත්‍රාගාරයෙන් හෝ git betcha වෙතින් ඉවත් වන්න. තවත් විසඳුමක් ref අංකය ගෙන ඇන්ඩ්‍රොයිඩ් ස්ටුඩියෝ වෙත ගොස් git ශාඛා මත ක්ලික් කරන්න, පසුව පිරික්සුම් ටැගය මත ක්ලික් කරන්න හෝ යොමු අංකය පසු කර සංශෝධනය කරන්න, එවිට ඔබට ශාඛා තිබේ.


1

Tfe හි පිළිතුරට එකතු කරමින්, සඳහන් කර ඇති මෙම ක්‍රියාවලියෙන් ඔබට සුවය ලබා ගත හැකිය. Git ශාඛාව යනු හුදෙක් කැපවීමේ ගසෙහි විශේෂිත කැපවීමකට යොමු කිරීමකි. නමුත් ඔබ දර්ශකය මකා දැමුවහොත් සහ එම ශාඛාවේ ඇති කොමිස් වෙනත් පවත්නා ශාඛා සමඟ ඒකාබද්ධ නොවන්නේ නම්, git එය කරදරකාරී ලෙස සලකන අතර කසළ එකතු කිරීමේදී ඒවා ඉවත් කරයි, එය වරින් වර ස්වයංක්‍රීයව ක්‍රියාත්මක විය හැකිය.

ඔබේ ශාඛාව පවත්නා ශාඛාවකට ඒකාබද්ධ නොකළේ නම් සහ එය කසළ එකතු කරනු ලැබුවේ නම්, පවතින ශාඛාවකින් ශාඛාව ලබා ගන්නා ස්ථානය දක්වා ඔබ සියලු කැපවීම් ලිහිල් කරනු ඇත.


1

ආශ්‍රිත ගැටළුවක්: “මකා දැමූ ශාඛා මොනවාදැයි දැන ගන්නේ කෙසේද” යන්න සෙවීමෙන් පසුව මම මෙම පිටුවට පැමිණියෙමි.

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

මෑතකදී මකා දැමූ ශාඛා මොනවාදැයි දැන ගැනීමට, පහත දේ කරන්න:

ඔබ ඔබගේ Git URL වෙත ගියහොත්, එය මේ වගේ දෙයක් වනු ඇත:

https://your-website-name/orgs/your-org-name/dashboard

එවිට ඔබට අතීතයේ දී, මකාදැමූ, කවුරුන් විසින්, සංග්‍රහය දැක ගත හැකිය.


ෂුවර්. ඉහත පිළිතුර GitHub සඳහා ය. අපි දේශීයව GitHub ස්ථාපනය කළෙමු. ප්රශ්නය ඇසීමට ස්තූතියි.
මනෝහර් රෙඩ්ඩි පෝරෙඩි

1

මම ශාඛාව මකා දැමූ පරිගණකයෙන් මෙය කළෙමි:

git reflog

ප්‍රතිචාරය:

74b2383 (develope) HEAD@{1}: checkout: moving from master to develope
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{2}: checkout: moving from develope to master
74b2383 (develope) HEAD@{3}: checkout: moving from master to develope
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{4}: reset: moving to HEAD
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{5}: clone: from http://LOCALGITSERVER/myBigProject/Android.git

මම මෙම විධානය සමඟ ශාඛාව ලබා ගනිමි:

git checkout -b newBranchName 74b2383


0

භාවිතා කිරීම මා වෙනුවෙන් git reflogආපසු shaලබා දුන්නේ නැත . එකම commit id(8 chars දිගු වන අතර ෂා මාර්ගය තවදුරටත් වන)

ඒ නිසා මම පාවිච්චි කළා git reflog --no-abbrev

ඉන්පසු ඉහත සඳහන් කළ ආකාරයටම කරන්න: git checkout -b <branch> <sha>


ඔබට සෑම විටම කෙටියෙන් අක්ෂර 8 භාවිතා කළ හැකිය, ඔබට සම්පූර්ණ ෂා භාවිතා කිරීමට අවශ්‍ය නැත
මයිකල් ඩ්‍රෙහර්

0

ඔබ VSCode භාවිතා කරන්නේ නම් ... සහ ඔබ එය මකාදැමීමට පෙර, යම් අවස්ථාවක දී සේවාදායකය සමඟ ඔබේ ශාඛා සමමුහුර්ත ...

Git ශාඛා මකාදැමීම මකන්නේ දේශීය පිටපත මිස සේවාදායකයේ පිටපත නොවන බව සලකන්න. පළමුව, Git පුවරුවේ (වම් මෙවලම් තීරුවේ ඇති git නිරූපකය), ශාඛා හරහා ගොස් ඔබේ ශාඛාව තවමත් "සම්භවය / ඔබේ_බ්‍රාන්ච්_ නාමය" යටතේ තිබේදැයි බලන්න. එසේ නම්, එය තෝරන්න, ඔබ ඔබේ කේතය නැවත ලබා ගත යුතුය (ඔබ වහාම එය වෙනත් තැනක පිටපත් කිරීමට / ඇලවීමට / සුරැකීමට යෝජනා කරන්න).

ඔබ "සම්භවය / ඔබේ_භාෂා නාමය" දුටුවේ නැත්නම්, GitLens දිගුව ස්ථාපනය කරන්න. මෙය ඔබට සේවාදායක ගබඩාවල දෘශ්‍යමානව බැලීමට සහ ඔබ සේවාදායකයට සමමුහුර්ත කළ පිටපත සොයා ගැනීමට ඉඩ සලසයි. ඔබට බහුවිධ ගබඩාවන් තිබේ නම්, ගබඩාව GitLens හි දර්ශනය වීම සඳහා අපේක්ෂිත ගබඩාවෙන් අවම වශයෙන් එක් ගොනුවක්වත් විවෘත කිරීම අවශ්‍ය විය හැකි බව සලකන්න. ඉන්පසු:

  1. GitLens පැනලය විවෘත කරන්න

  2. නිධිය පුළුල් කරන්න

  3. ඔබ කාණ්ඩ ලැයිස්තුවක් දැකිය යුතුය: ශාඛා / දායකයින් / දුරස්ථ / තොග / යනාදිය

ඔබ ඔබේ ශාඛාව "ශාඛා" යටතේ හෝ සමහර විට "දුරස්ථ -> මූලාරම්භය" යටතේ සොයාගත යුතුය. අපේක්ෂිත නම සහිත ශාඛාවක් ඔබට පෙනෙනු ඇතැයි අපේක්‍ෂා කරමු - ඔබ එය පුළුල් කරන්නේ නම්, ඔබ එම ශාඛාවේ වෙනස් කළ ලිපිගොනු දැකිය යුතුය. ගොනු නාම විවෘත කිරීමට දෙවරක් ක්ලික් කර වහාම එම කේතය උපස්ථ කරන්න.

ඔබගේ නැතිවූ ශාඛාව ඔබට වහාම නොපෙනේ නම්, වටේට ගොස් ඔබට පොරොන්දු වූ යමක් පෙනේ නම්, වහාම එය විවෘත කර කේතය අල්ලා ගන්න. TheGoldenBranch සොයා ගන්නා තෙක් මට තරමක් දුරට ඇනීමට සිදු විය, එවිට පවා කේතයේ අන්තිම ඉතිරිකිරීම් එකක් හෝ දෙකක් නොතිබුණි (සමහර විට ශාඛාවක්-ඒකාබද්ධ කිරීමට උත්සාහ කිරීමට පෙර සේවාදායකයට සමමුහුර්ත කිරීමට මා අසමත් වූ නිසා විය හැකි නමුත් අහම්බෙන් ක්ලික් කිරීම- ශාඛාව මකන්න). මගේ සෙවීම අනවශ්‍ය ලෙස දීර් ed වූයේ මා ශාඛාව මුලින්ම සොයාගත් විට නම නිවැරදි යැයි මට සම්පුර්ණයෙන්ම විශ්වාස නැති නිසා දිගින් දිගටම බලා සිටි අතර එම පළමු ශාඛාව නැවත සොයා ගැනීමට යම් කාලයක් ගත වූ බැවිනි. (මේ අනුව, කාපේ කාපම් සහ පසුව බලා සිටින්න.)

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.