දුරස්ථ නිධිය HEAD මෙන් දේශීය නිධිය ශාඛාව නැවත සකසන්න


3870

දුරස්ථ ගබඩාවේ ඇති ශාඛාව මෙන් මගේ ප්‍රාදේශීය ශාඛාව නැවත සකස් කරන්නේ කෙසේද?

මම කලා:

git reset --hard HEAD

නමුත් මම ධාවනය කරන විට git status,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

කරුණාකර මට කියන්න පුළුවන්ද මම මේ 'නවීකරණය' කළේ? මම මෙම ලිපිගොනු ස්පර්ශ කර නැද්ද? මම කළා නම්, මට ඒවා ඉවත් කිරීමට අවශ්‍යයි.


8
git statusඔබගේ දෙවන විධානයේ ප්‍රතිදානය අනුව git reset --hard HEADඅසමත් විය. ඔබ එහි ප්‍රතිදානය අලවා නැත. . අසම්පූර්ණ ප්‍රශ්නය.
රොබට් සීමර්

2
ඔබ මෙහි කරුණු දෙකක් මිශ්ර කර ඇත: 1) දුරස්ථ කරනු ලබන ස්ථානය හා 2 දේශීය ශාඛා නැවත සකස් කරන්නේ කෙසේද යන්න) ඔබගේ අනුක්රමික ප්රදේශයේ (හා සමහරවිට වැඩකරන බහලුම ඉවත් කිරීමට ආකාරය), එසේ බව git statusපවසයි nothing to commit, working directory clean. - කරුණාකර සඳහන් කරන්න!
රොබට් සීමර්

Answers:


6722

දුරස්ථ ශාඛාවට හරියටම ගැලපෙන පරිදි ඔබේ ශාඛාව සැකසීම පියවර දෙකකින් කළ හැකිය:

git fetch origin
git reset --hard origin/master

මෙය කිරීමට පෙර ඔබේ වර්තමාන ශාඛාවේ තත්වය සුරැකීමට ඔබට අවශ්‍ය නම් (ඔබට එය කළ හැකිය),

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

ඔබට එය නැවත අවශ්‍ය යැයි ඔබ තීරණය කළහොත් (හෝ පසුව බැලීමට හෝ ඔබගේ යාවත්කාලීන කළ ශාඛාවට වඩා වෙනස් කිරීමට අවශ්‍ය නම්) දැන් ඔබේ වැඩ කටයුතු "මගේ-සුරකින ලද වැඩ" ශාඛාවේ සුරකිනු ලැබේ.

පළමු උදාහරණය දුරස්ථ repo හි නම "සම්භවය" යැයි උපකල්පනය කරන අතර දුරස්ථ repo හි "මාස්ටර්" නම් වූ ශාඛාව ඔබගේ දේශීය repo හි දැනට පරීක්ෂා කර ඇති ශාඛාවට ගැලපේ.

බී.ටී.ඩබ්ලිව්, ඔබ සිටින මෙම තත්වය, දැනට පරික්‍ෂා කර ඇති හිස් ගබඩාවක ශාඛාව තුළට තල්ලුවක් ලබා දී ඇති පොදු සිද්ධියක් මෙන් පෙනේ. ඔබ මෑතකදී ඔබේ දේශීය ගබඩාවට තල්ලු කළාද? එසේ නොවේ නම්, කරදර නොවන්න - වෙනත් යමක් මෙම ලිපිගොනු අනපේක්ෂිත ලෙස වෙනස් කිරීමට හේතු විය යුතුය. එසේ නොමැතිනම්, හිස් නොවන ගබඩාවකට තල්ලු කිරීම නිර්දේශ නොකරන බව ඔබ දැන සිටිය යුතුය (විශේෂයෙන් දැනට පරීක්ෂා කර ඇති ශාඛාවට නොවේ).


4
ඔබගේ පිළිතුරට ස්තූතියි. ඔබ පැවසුවේ 'පළමු උදාහරණයෙන් දුරස්ථ repo හි නම "සම්භවය" බවත් දුරස්ථ repo හි "මාස්ටර්" නම් වූ ශාඛාව ඔබේ දේශීය repo හි ශාඛාවට ගැලපෙන බවත් උපකල්පනය කරයි.' මම 'git reset --hard' ක්‍රියාත්මක කිරීමට පෙර මගේ දුරස්ථ repo හි නම සහ මගේ ශාඛාවේ නම දෙවරක් පරීක්ෂා කරන්නේ කෙසේද? නැවත ස්තූතියි.
hap497

21
ඔබ දුරස්ථව නිශ්චිතවම නම් නොකළේ නම්, එහි නම “සම්භවය” (පෙරනිමිය) විය හැකිය. සියලුම දුරස්ථ නම් ලැයිස්තුවක් ලබා ගැනීමට ඔබට "git remote" භාවිතා කළ හැකිය. එවිට ඔබට "git remote <name>" භාවිතා කළ හැක්කේ කුමන ශාඛා එකිනෙක තල්ලු කරන්නේද යන්නද (උදා: ඔබේ "මාස්ටර්" ශාඛාව "මාස්ටර්" වෙතින් ක්ලෝන කර ඇත්තේ දුරස්ථව "සම්භවය" නම් නම්, එවිට ඔබට රේඛාවක් ලැබෙනු ඇත. එනම් "මාස්ටර් දුරස්ථ මාස්ටර් සමඟ ඒකාබද්ධ වේ").
ඩෑන් මෝල්ඩින්

6
"හිස් නොවන ගබඩාවකට තල්ලු කිරීම රෙකමදාරු කරනු නොලැබේ (සහ දැනට පරීක්ෂා කර ඇති ශාඛාවට නොවේ, විශේෂයෙන්" එය එසේ වන්නේ ඇයි?
ලීගී

27
ලබා ගැනීමෙන් පසුව, ඔබට ඒ git reset FETCH_HEAD --hardවෙනුවට කළ හැකි යැයි මම විශ්වාස කරමි .
ජීන්

6
එය මා එකතු කළ ගොනු ඉවත් කළේ නැත.
Trismegistos

418

මට අවශ්‍ය වූයේ (පිළිගත් පිළිතුරේ විසඳුම):

git fetch origin
git reset --hard origin/master

අනුගත:

git clean -f

දේශීය ගොනු ඉවත් කිරීමට

ඉවත් කරනු ලබන ගොනු මොනවාදැයි බැලීමට (ඇත්ත වශයෙන්ම ඒවා ඉවත් නොකර):

git clean -n -f

89
ද, git clean -d -fවර්තමාන untracked බහලුම් තිබේ නම්,.
garg


14
ඔබට දුරස්ථ ශාඛාවේ නිශ්චිත පිටපතක් අවශ්‍ය නම් git clean -ffdx මගින් අනුගමනය කළ යුතුය. තාරේ යනු f දෙකක් බව සලකන්න.
ට්‍රිස්මෙගිස්ටෝස්

6
මෙම git clean -fමම අවශ්ය අත්යවශ්ය කෑල්ලක් විය. ස්තූතියි!
dgo

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

307

පළමුව, HEADඅනුරූප උඩු මහලේ ශාඛාව කලින් ලබාගත් වෙත නැවත සකසන්න :

git reset --hard @{u}

නියම කිරීමේ වාසිය @{u}හෝ එහි වාචික ස්වරූපය @{upstream}නම් දුරස්ථ repo සහ ශාඛාවේ නම පැහැදිලිව සඳහන් කිරීම අවශ්‍ය නොවේ.

ඊළඟට, අවශ්‍ය පරිදි, නොකැඩූ ගොනු ඉවත් කරන්න, විකල්පයක් ලෙස -x:

git clean -df

අවසාන වශයෙන්, අවශ්‍ය පරිදි, නවතම වෙනස්කම් ලබා ගන්න:

git pull

54
මෙය පිළිගත් පිළිතුරට වඩා හොඳ පිළිතුරක් සේ පෙනේ, මන්ද එය සෑම විටම ස්ථිතික එකක් නොව වත්මන් උඩු මහලේ ශාඛාවට ගතිකව යලි origin/master
ජෝන් z

On ජෝන්ස් ස්ථානය @{upstream}ඉතා පහසු වන අතර අන්වර්ථ නාමවලද භාවිතා කළ හැකිය:alias resetthisbranch="git reset --hard @{upstream}"
සිද්ධාර්ථ

1
G ගංගධර් ජන්නුට කැපවීමක් git reset --hardඅවශ්‍යයි, එසේ නොමැතිනම් ඔබව නැවත සකස් කළ යුත්තේ කුමක් දැයි එය නොදනී. @{u}නිශ්චිත කැපවීමකට යොමු කරයි - ලුහුබැඳ ගිය ශාඛාවේ ප්‍රධානියා, ඔබ අවසන් වරට කළ අවස්ථාවේ සිට git fetch.
ක්‍රිස්ටෝෆර් බක්ජෝර්ඩ්

1
Rist ක්‍රිස්ටෝෆර් බකෙජෝර්ඩ් පැහැදිලි කිරීම සඳහා ස්තූතියි, නමුත් හැෂ් නොමැතිව වුවද අපට එය කළ හැක්කේ git reset --hardඑය දුරස්ථ ශාඛාවකට යලි
සකසන්නේ නැත

4
මෙහි නව ප්‍රශ්නයක් පාහේ විවෘත කළ වෙනත් ඕනෑම කෙනෙකුට, ඔබ පවර්ෂෙල් වෙතින් ලබා ගන්නේ නම්, උපුටා දැක්වීම් ( git reset --hard "@{u}") භාවිතා කරන්න . එය තේරුම් ගැනීමට මට ටික වේලාවක් ගත විය.
MPStoering

112

git reset --hard HEADසැබවින්ම යළි පිහිටුවන්නේ අවසන් කැපවූ තත්වයට පමණි. මෙම අවස්ථාවේ දී HEAD යනු ඔබේ ශාඛාවේ HEAD යන්නයි.

ඔබට කොමිස් කිහිපයක් තිබේ නම්, මෙය ක්‍රියා නොකරනු ඇත ..

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

git reset --hard origin/HEAD

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


2
මගේ පිළිතුරේ වැරදි යෝජනාවක් ඩෑන් කලින් අල්ලා ගත්තේය. කිසිවෙකු නොමඟ යැවීමට මට අවශ්‍ය නැති නිසා මම එය සංස්කරණය කළෙමි. මූලාරම්භය / ස්වාමියා හෝ සම්භවය / හෙඩ් දේවල් සම්බන්ධයෙන් ගත් කල, එය ඔබ මුලින්ම ලබා ගන්නේද නැද්ද යන්න මත රඳා පවතී. ඔබ සම්භවය ක්ලෝන කර ඇත්නම් සහ එයට වෙනත් අතු නොමැති නම්, එය සාමාන්‍ය දෙයක් ලෙස මා සලකන්නේ නම්, එය හොඳින් නැවත සකස් කළ යුතුය. නමුත් ඇත්ත වශයෙන්ම, ඩෑන් හරි.
මයිකල් ඕල්සන්

73

ඉහත සියලු අයිතිය ඇත, නමුත් බොහෝ විට යෝජනා ඇත්තටම ඔබගේ ව්යාපෘතිය නැවත සකස්, ඔබ ද ඔබේ සිටින බව පවා ගොනු ඉවත් කිරීමට අවශ්ය .gitignore.

ඔබේ ව්‍යාපෘති නාමාවලිය මකා දැමීම සහ දුරස්ථයෙන් නැවත ක්ලෝන කිරීම වැනි සදාචාරාත්මක සමානකම් ලබා ගැනීම සඳහා :

git fetch
git reset --hard
git clean -x -d -f

අවවාදයයි : git clean -x -d -fවේ ආපසු හැරවිය නොහැකි අතර ඔබ ගොනු හා දත්ත (ඔබ භාවිතා නොතකා හැර තිබේ උදා: දේවල් අහිමි විය හැක .gitignore).


12
අවවාදයයි: "git clean -x -d -f" ආපසු හැරවිය නොහැකි අතර ඔබට .gitignore හි ලිපිගොනු සහ දත්ත ලිහිල් කළ හැකිය
ආකර්ෂ් සතිජා

ටිකක් කෙටි: git clean -xdfඑය සමාන වේ git clean -x -d -f.
කිරිල්

git clean -ffxd repo හි නැති සියල්ල ඉවත් කිරීමට
Trismegistos

44

පහත විධානයන් භාවිතා කරන්න. මෙම විධානයන් විසින් දේශීය git වෙතින් ඉවත් නොකළ සියලුම ගොනු ඉවත් කරනු ඇත

git fetch origin
git reset --hard origin/master
git clean -d -f

6
මෙය වඩාත් සම්පූර්ණ ප්‍රතිචාරයකි, මන්ද git clean -d -fඅප නොමැතිව පැරණි ශාඛාවේ සමහර දේවල් දේශීය නාමාවලියෙහි තවමත් අපට ඇත. ස්තූතියි මචං.
ෆ්ලේවියෝ

3
ඇත්ත වශයෙන්ම එය දුරස්ථය මෙන් වීමට මෙය හේතු වේ. පිරිසිදු කිරීම වැදගත් ය.
ඩේවිඩ් එස්.

1
සෑම දෙයක්ම සත්‍ය ලෙස ඉවත් කිරීමට git clean -ffxd
Trismegistos

1
මට අවශ්‍ය වූයේ මෙයයි. ස්තූතියි
AllJs

38

ප්‍රශ්නය මෙහි ගැටළු දෙකක් මිශ්‍ර කරයි:

  1. දුරස්ථය පවතින ස්ථානයට ප්‍රාදේශීය ශාඛාවක් නැවත සකසන්නේ කෙසේද
  2. ඔබේ වේදිකා ප්‍රදේශය (සහ සමහර විට වැඩ කරන නාමාවලිය) ඉවත් කරන්නේ කෙසේද, එවිට එය git statusකියනු ලැබේnothing to commit, working directory clean.

එක්-පිළිතුරක් නම්:

  1. git fetch --prune (අත්‍යවශ්‍ය නොවේ) දුරස්ථ repo හි දේශීය ඡායාරූපය යාවත්කාලීන කරයි. තවදුරටත් විධාන දේශීය පමණි.
    git reset --hard @{upstream}දේශීය ශාඛා දර්ශකය දුරස්ථයේ සැණින් ඡායාරූප ගත කරන ස්ථානයට දමයි, එමෙන්ම එම කැපවීමේ ලිපිගොනු වලට දර්ශකය සහ වැඩ කරන නාමාවලිය සකසන්න.
  2. git clean -d --force “වැඩ කරන නාමාවලිය පිරිසිදුව” යැයි පැවසීමට බාධා වන, සොයා නොගත් ලිපිගොනු සහ නාමාවලි ඉවත් කරයි.

1
මෙම @{upstream}කාරක රීති ඔබ නම් පෙරනිමියෙන් සිදුවන, කට්ටලයක් විය ඉහළින් උමාඔයේ අවශ්ය git checkout <branchname>. - නැතිනම් එය ප්රතිස්ථාපනය කරන්න origin/<branchname>.
රොබට් සීමර්

එකතු -xකිරීමට git clean(එනම් පවා .gitignore යාන්ත්රණයක් සමග නොසලකා ගොනු) එම සිදු නොවන සියල්ල ඉවත් කිරීමට.
රොබට් සීමර්

22

මෙය මම නිතිපතා මුහුණ දෙන දෙයක් වන අතර ඕනෑම ශාඛාවක් සමඟ වැඩ කිරීම සඳහා ඉහත ලබා දී ඇති වුල්ෆ්ගැන්ග් පිටපත සාමාන්‍යකරණය කර ඇත්තෙමි

මම "ඔබට විශ්වාසද" විමසුමක් සහ ප්‍රතිපෝෂණ ප්‍රතිදානයක්ද එක් කළෙමි

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

3
දුරස්ථයේ නම ලබා ගැනීමට ඔබට "git remote" භාවිතා කිරීමට අවශ්‍ය විය හැකිය. සමහර අවස්ථාවල එය "සම්භවය" නොවනු ඇත
යූරික්

17

දුරස්ථ ගබඩාව originසහ ඔබ උනන්දු වන්නේ නම් branch_name:

git fetch origin
git reset --hard origin/<branch_name>

එසේම, ඔබ නැවත සකස් කිරීම සඳහා වත්මන් ශාඛා යන්න originකිරීමට HEAD.

git fetch origin
git reset --hard origin/HEAD

එය ක්‍රියාත්මක වන ආකාරය:

git fetch origin කිසිවක් ඒකාබද්ධ කිරීමට හෝ නැවත ප්‍රතිස්ථාපනය කිරීමට උත්සාහ නොකර දුරස්ථ සිට නවතම බාගත කරයි.

ඉන්පසු ඔබ ලබාගත් දෙයට ශාඛාව git resetනැවත <branch_name>සකසයි. මෙම --hardවිකල්පය ඔබේ කම්කරු ගසක් සියලු ගොනු ගොනු ගැලපෙන වෙනස් origin/branch_name.


14

මම කලා:

git branch -D master
git checkout master

ශාඛාව මුළුමනින්ම යළි පිහිටුවීමට


සටහන, අවශ්‍ය ශාඛාව මකා දැමීමට ඔබ වෙනත් ශාඛාවකට පිවිසිය යුතුය


5
ඔබ නැවත වරක් ප්‍රශ්නය කියවිය යුතුය, දුරස්ථයට බලපාන කිසිවක් නැත, නමුත් දුරස්ථයට සමාන ලෙස සැකසීම, එබැවින් ඔබ දුරස්ථව කිසිවක් නොකළ යුතුය, මෙය මගේ කාරණයට සහ ඉහත නොවන දේට උපකාරී විය.
user2846569

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

2
ඔබ අවම වශයෙන් මෙය උත්සාහ කළ යුතුය හෝ
ලියකියවිලි

යා යුතු මාර්ගය, මට ශාඛාවේ දූෂිත .pck ගොනුවක් තිබූ අතර ඉතිරි විකල්ප ක්‍රියාත්මක නොවීය, ස්තූතියි !!
ලකීබ්‍රේන්

14

වඩාත්ම ජනප්‍රිය පිළිතුර යෝජනා කරන දේ ස්වයංක්‍රීය කරන ස්ක්‍රිප්ට් එකක් මෙන්න ... ශාඛා සඳහා සහය දක්වන වැඩි දියුණු කළ අනුවාදයක් සඳහා https://stackoverflow.com/a/13308579/1497139 බලන්න.

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see /programming/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master

10

ඔබට මා වැනි ගැටලුවක් තිබේ නම්, ඔබ දැනටමත් යම් යම් වෙනස්කම් සිදු කර ඇති නමුත් දැන්, ඕනෑම හේතුවක් නිසා ඔබට එයින් මිදීමට අවශ්‍ය නම්, ඉක්මන්ම ක්‍රමය මෙයයි git reset:

git reset --hard HEAD~2

මට අවශ්‍ය නොවන කොමිස් 2 ක් තිබුනි, එබැවින් අංක 2 නැවත සැකසීමට ඔබට එය ඔබගේම කොමිස් ගණනකට වෙනස් කළ හැකිය.

එබැවින් ඔබේ ප්‍රශ්නයට පිළිතුරු සැපයීම - ඔබ දුරස්ථ නිධිය හෙඩ්ට වඩා 5 ක් ඉදිරියෙන් සිටී නම්, ඔබ මෙම විධානය ක්‍රියාත්මක කළ යුතුය:

git reset --hard HEAD~5

ඔබ විසින් සිදු කරන ලද වෙනස්කම් ඔබට අහිමි වන බව සැලකිල්ලට ගන්න, එබැවින් ප්‍රවේශම් වන්න!


7

පෙර පිළිතුරු උපකල්පනය කරන්නේ නැවත සකස් කළ යුතු ශාඛාව වත්මන් ශාඛාව බවයි (පරීක්ෂා කර ඇත). අදහස් දැක්වීමේදී, OP hap497 ශාඛාව සැබවින්ම පරීක්ෂා කර ඇති බව පැහැදිලි කළ නමුත් මුල් ප්‍රශ්නයට මෙය පැහැදිලිවම අවශ්‍ය නොවේ. අවම වශයෙන් එක් "අනුපිටපත්" ප්‍රශ්නයක්වත් ඇති බැවින්, ශාඛාව පරික්‍ෂා කර ඇතැයි උපකල්පනය නොකරන, ශාඛාව සම්පූර්ණයෙන්ම නිධිය තත්වයට යලි සකසන්න , මෙන්න විකල්පයක්:

ශාඛා "mybranch" නම් නොවේ දැනට අතර, දුරස්ථ ශාඛා එය නැවත සකස් කිරීමට "myremote / mybranch" ඔළුව පරීක්ෂා, ඔබට මෙම භාවිත කළ හැක පහළ මට්ටමේ විධාන:

git update-ref refs/heads/mybranch myremote/mybranch

මෙම ක්‍රමය මඟින් පරීක්ෂා කරන ලද ශාඛාව පවතින ආකාරයටම ක්‍රියාත්මක වන අතර වැඩ කරන ගස ස්පර්ශ නොකෙරේ. දෙවන තර්කය ලෙස දක්වා ඇති ඕනෑම දෙයක් එය මයිබ්‍රාන්ච්ගේ හිස වෙනත් බැඳීමකට යොමු කරයි. නව දුරස්ථ ප්‍රධානීන් වෙත බහු ශාඛා යාවත්කාලීන කිරීමට අවශ්‍ය නම් මෙය විශේෂයෙන් උපකාරී වේ.

මෙය සිදු කිරීමේදී ප්‍රවේශම් වන්න, නමුත් gitkප්‍රභවය සහ ගමනාන්තය දෙවරක් පරීක්ෂා කිරීමට සමාන මෙවලමක් භාවිතා කරන්න. ඔබ වත්මන් ශාඛාවේ අහම්බෙන් මෙය කළහොත් (සහ git ඔබව මෙයින් වළක්වන්නේ නැත), ඔබ ව්‍යාකූල විය හැකිය, මන්ද නව ශාඛා අන්තර්ගතය වැඩ කරන ගසට නොගැලපෙන අතර එය වෙනස් නොවූ (ශාඛාව නැවත සවි කිරීමට, යාවත්කාලීන කිරීමට, එය පෙර තිබූ තැනට).


7

මම බොහෝ විට භාවිතා කරන්නේ මෙයයි:

git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;

එය ඔබගේ දේශීය ස්වාමියා වෙනස්කම් / සංවර්ධනය ශාඛා නොකරන හොඳ ක්රමයක් වන්නේ, එහෙත් ඒ වෙනුවට ලොව පුරාවටම ඕනෑම වෙනසක් සඳහා තවත් ශාඛා කිරීමට, වෙනස් වර්ගය විසින් prepended ශාඛා නම සමඟ, උදා: බව සටහන feat/, chore/, fix/, ආදිය ඒ නිසා ඔබ පමණක් අවශ්ය වෙනස්කම් අදින්න, ස්වාමියාගෙන් කිසිදු වෙනසක් තල්ලු නොකරන්න. අනෙක් අය දායක වන වෙනත් ශාඛා සඳහා එකම දේ. එබැවින් ඉහත සඳහන් කළ යුත්තේ ඔබ අන් අය කැපවී ඇති ශාඛාවකට වෙනස්කම් කිරීමට සිදුවී ඇත්නම් සහ නැවත සැකසීමට අවශ්‍ය නම් පමණි. එසේ නොමැතිනම් අනාගතයේ දී අනෙක් අය තල්ලු කරන ශාඛාවකට තල්ලු වීමෙන් වළකින්න, ඒ වෙනුවට පරීක්ෂා කර බලා පරීක්ෂා කළ ශාඛාව හරහා එම ශාඛාවට තල්ලු කරන්න.

ඔබේ ප්‍රාදේශීය ශාඛාව උඩුමහලේ ශාඛාවේ නවතම බැඳීම වෙත නැවත සැකසීමට ඔබට අවශ්‍ය නම්, මෙතෙක් මා වෙනුවෙන් ක්‍රියාත්මක වූයේ:

ඔබගේ දුරස්ථ පරික්ෂා කරන්න, ඔබේ උඩු යටිකුරු සහ සම්භවය ඔබ අපේක්ෂා කරන දේ බවට වග බලා ගන්න, අපේක්ෂා කළ පරිදි නොවේ නම් භාවිතා කරන්න git remote add upstream <insert URL>, උදා: ඔබ විසින් ලබා දුන් මුල් GitHub repo හි සහ / හෝ git remote add origin <insert URL of the forked GitHub repo>.

git remote --verbose

git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force

GitHub හි, ඔබට එහි වැඩ සුරැකීම සඳහා, ප්‍රාදේශීය නම මෙන් එකම ශාඛාව පිරික්සා බැලිය හැකිය, මූලාරම්භක සංවර්ධනය දේශීය සුරැකුම්-වැඩ ශාඛාවට සමාන වෙනස්කම් තිබේ නම් මෙය අවශ්‍ය නොවේ. මම සංවර්ධිත ශාඛාව උදාහරණයක් ලෙස භාවිතා කරමි, නමුත් එය දැනට පවතින ඕනෑම ශාඛා නාමයක් විය හැකිය.

git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop

යම් යම් ගැටුම් පවතින විට මෙම වෙනස්කම් වෙනත් ශාඛාවක් සමඟ ඒකාබද්ධ කිරීමට ඔබට අවශ්‍ය නම්, සංවර්ධනයේ වෙනස්කම් ආරක්ෂා කර ගැනීමට, භාවිතා කරන්න:

git merge -s recursive -X theirs develop

භාවිතා කරන අතරතුර

git merge -s recursive -X ours develop

ශාඛා නාමයේ පරස්පර වෙනස්කම් ආරක්ෂා කිරීමට. එසේ නොමැතිනම් mergetool භාවිතා කරන්නgit mergetool .

සියලු වෙනස්කම් එකට:

git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;

උඩු යටිකුරු කිරීම / සංවර්ධනය කිරීම වෙනුවට ඔබට කැපකිරීමේ හැෂ්, වෙනත් ශාඛා නාමයක් භාවිතා කළ හැකි බව සලකන්න. ඔබේ ශාඛාව හරිතද යන්න පරීක්ෂා කිරීමට ඕ මයි ස්ෂ් වැනි CLI මෙවලමක් භාවිතා කරන්න. එය සනාථ කර හෝ සත්‍යාපනය කළ හැකි git status). කැපවීමකින් ස්වයංක්‍රීයව යමක් එකතු වී ඇත්නම් මෙය උඩුමහලේ සංවර්ධනයට සාපේක්ෂව කොමිස් එකතු කළ හැකි බව සලකන්න, උදා: යූඑම්එල් රූප සටහන්, බලපත්‍ර ශීර්ෂ යනාදිය. එබැවින් එවැනි අවස්ථාවකදී ඔබට අවශ්‍ය නම් වෙනස්කම් වෙත origin developයොමු කළ හැකිය upstream develop.


6

පිළිතුර

git clean -d -f

( ඩිරෙක්ටරි ඉවත් කිරීමට -d ) අවතක්සේරු කරන ලදි . ස්තූතියි!


අමතර ලිපිගොනු නොමැති සම්පූර්ණ 100% පිරිසිදු repo ෆෝල්ඩරයක් සඳහා ධාවනය කරන්න git clean -xdf. මෙමඟින් git නොදන්නා ඕනෑම හා සියලුම ලිපිගොනු මකා දැමෙනු ඇති අතර ඔබගේ ෆෝල්ඩරය git හි වස්තු ලැයිස්තුවේ ඇති දේට හරියටම ගැලපේ. "කුමක්-නම්" සිදු කිරීම සඳහා ඔබට -n(උදා git clean -nxdf) එකතු කළ හැකි බව සලකන්න . ඇත්ත වශයෙන්ම කිසිවක් නොකර එය මකා දැමිය හැකි දේ එය ඔබට කියනු ඇත. ( git clean )
qJake

5

ඔබ ආපසු යන්න කිරීමට අවශ්ය නම් HEAD, කම්කරු බහලුම හා දර්ශක දෙකම සඳහා රාජ්ය, පසුව ඔබ කළ යුත්තේ git reset --hard HEADඒ වෙනුවට වඩා HEAD^. (මෙය තනි හා එදිරිව ද්විත්ව ඉරක් මෙන් යතුරු ලියනයකි--hard .)

නවීකරණය කරන ලද පරිදි එම ලිපිගොනු දර්ශනයේ දිස්වන්නේ ඇයිද යන්න පිළිබඳ ඔබේ නිශ්චිත ප්‍රශ්නය සඳහා, දෘ hard යළි පිහිටුවීම වෙනුවට ඔබ මෘදු යළි පිහිටුවීමක් කළ බවක් පෙනේ. මෙමඟින් කැපවීමේදී වෙනස් කරන ලද ගොනු HEADඒවා වේදිකාගත කර ඇති බවක් පෙනෙන්නට සලස්වනු ඇත, එය ඔබ මෙහි දකින දේ විය හැකිය.


4

මගේ දේශීය git repo හි සොයා නොගත් හා වෙනස් කරන ලද ලිපිගොනු වලට නැවත සැකසීමේ සහ පිරිසිදු කිරීමේ කිසිදු බලපෑමක් ඇති බවක් නොපෙනුණි (මම ඉහත සියලු විකල්පයන් උත්සාහ කළෙමි). මේ සඳහා මගේ එකම විසඳුම වූයේ දේශීය රෙපෝව rm කර දුරස්ථයෙන් නැවත ක්ලෝන කිරීමයි.

වාසනාවකට මෙන් මා සැලකිලිමත් වූ වෙනත් ශාඛා මා සතුව නොතිබුණි.

xkcd: Git


1

මා දුටු සෑම අවස්ථාවකම ක්‍රියාත්මක වන එකම විසඳුම වන්නේ මකාදැමීම සහ නැවත සකස් කිරීමයි. සමහර විට වෙනත් ක්‍රමයක් ඇත, නමුත් පැහැදිලිවම මේ ආකාරයෙන් පැරණි තත්වය එහි ඉතිරි වීමට ඉඩක් නැත, එබැවින් මම එයට කැමැත්තෙමි. ඔබ බොහෝ විට දේවල් අවුල් කරන්නේ නම් ඔබට සාර්ව ලෙස සැකසිය හැකි එක්-ලයිනර් බාෂ් කරන්න:

REPO_PATH=$(pwd) && GIT_URL=$(git config --get remote.origin.url) && cd .. && rm -rf $REPO_PATH && git clone --recursive $GIT_URL $REPO_PATH && cd $REPO_PATH

* ඔබගේ .git ගොනු දූෂිත නොවන බව උපකල්පනය කරයි


4
ඔබට නිශ්චිත වීමට අවශ්‍ය නම් ඔබේ මෙහෙයුම් පද්ධතිය නැවත ස්ථාපනය කළ හැකිය!
සෙබස්තියන් ෂෝල්

1

විශේෂාංග ශාඛාවක් නිර්මාණය කිරීමට ඔබට අමතක වී ඇති අතර වැරදීමකින් ස්වාමියා වෙනුවෙන් කෙලින්ම කැපවී තිබේද?

ඔබට දැන් විශේෂාංග ශාඛාව නිර්මාණය කළ හැකි අතර, වැඩ සටහන් (දේශීය ගොනු පද්ධතියට) බලපෑමක් නොකර මාස්ටර් නැවත සකස් කළ හැකිය .

git checkout -b feature-branch
git branch -f master origin/master


-3

ඔබේ දේශීය වෙනස්කම් සුරැකීමට ඔබට අවශ්‍ය නැතිනම්, සම්භවය / හෙඩ් සමඟ ගැලපෙන පරිදි ඔබේ ගබඩාව යාවත්කාලීන කිරීමට අවශ්‍ය නම්, ඔබට ඔබේ දේශීය වෙනස්කම් නවතා දමා අදින්න:

git stash
git pull
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.