මම ඒකාබද්ධ කිරීමේ ගැටුමකට දිව ගියෙමි. ඒකාබද්ධ කිරීම ගබ්සා කරන්නේ කෙසේද?


2550

මම git pullඒකාබද්ධ කිරීමේ ගැටුමක් භාවිතා කළෙමි :

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

ගොනුවේ අනෙක් අනුවාදය හොඳ බවත්, මගේ නරක බවත් මම දනිමි, එබැවින් මගේ සියලු වෙනස්කම් අතහැර දැමිය යුතුය. මට මෙය කළ හැක්කේ කෙසේද?


30
මෙය සුපිරි පැරණි ප්‍රශ්නයක් බව මට වැටහී ඇත, නමුත් ඔබට අවශ්‍ය වන්නේ සම්පූර්ණ ඒකාබද්ධ කිරීම නවතා දමා ඔබ ඒකාබද්ධ කළ ශාඛාව ගිලී නොයන්න, නැතහොත් විශාල ඒකාබද්ධයක කොටසක් ලෙස මෙම එක් ගොනුවක් නොසලකා හරින්න, අනෙක් සියලුම ලිපිගොනු ඒකාබද්ධ වීමට ඉඩ දෙන්න සාමාන්‍යද? මට නම්, ඔබේ මාතෘකාවෙන් අදහස් කරන්නේ කලින් සඳහන් කළ දෙයයි. දේවල් පැහැදිලි නොකර, පිළිතුරු දෙකම කරයි.
rjmunro

ස්වයංක්‍රීය ඒකාබද්ධ කිරීම අසාර්ථක වූ බව පවසමින් මට සමාන නඩුවක් ලැබුණි; ගැටුම් නිරාකරණය කර [rejected] gh-pages -> gh-pages (non-fast-forward)
ප්‍රති result ලය ලබා දෙන්න

4
ග්වින්, මෙහි පිළිගත් පිළිතුරක් තෝරා ගැනීම ප්‍රයෝජනවත් විය හැකිය. ඉහළම ඡන්දය දුන් තැනැත්තා යාවත්කාලීන විසඳුම් වලට වඩා ටිකක් අඩු ආරක්ෂිතයි, එබැවින් අනෙක් අය ඒ පිළිබඳව ඉස්මතු කිරීමට උපකාරී වනු ඇතැයි මම සිතමි :)
Amicable

Answers:


2233

ඔබ pullඅසාර්ථක වූ බැවින් HEAD(නොවේ HEAD^) ඔබේ ශාඛාවේ අවසාන "වලංගු" කැපවීම වේ:

git reset --hard HEAD

ඔබට අවශ්‍ය අනෙක් කොටස නම්, ඒවායේ වෙනස්වීම් ඔබේ වෙනස්කම් ඉක්මවා යාමට ඉඩ දීමයි.

Git හි පැරණි අනුවාදයන් ඔබට "ඔවුන්ගේ" ඒකාබද්ධ කිරීමේ උපාය භාවිතා කිරීමට ඉඩ දී ඇත:

git pull --strategy=theirs remote_branch

ජූනියෝ හමානෝ (Git නඩත්තු කරන්නා) විසින් මෙම පණිවිඩයේ පැහැදිලි කර ඇති පරිදි මෙය එතැන් සිට ඉවත් කර ඇත . සබැඳියේ සඳහන් කර ඇති පරිදි , ඒ වෙනුවට ඔබ මෙය කරනු ඇත:

git fetch origin
git reset --hard origin

49
දෘ reset යළි පිහිටුවීම වෙනුවට, ඔබට එය වඩාත් කැටිති මට්ටමකට ගෙන යා හැකිය: git fetch origin -> git reset origin (soft reset, your changes are still present) -> git checkout file_to_use_their_version_of another_file (steamroll your own changes back to match the origin) මම කිසි විටෙකත් git pull භාවිතා නොකරමි. මගේ නවතම කේතය සහ සම්භවය අතර සටනක දී, සම්භවය සැමවිටම ජය ගත යුතු බැවින්, මම සැමවිටම git fetchසහ git rebase origin. මෙය සැබවින්ම මගේ ඒකාබද්ධ කිරීම් හා ගැටුම් ස්වල්පයක් හා බොහෝ දුරට සිදු කරයි.
ක්සායි

7
මම එකඟයි. මමත් පළමුව ලබා ගැනීමට කැමතියි, පසුව උඩු යටිකුරු වෙනස්කම් ( git log ..@{upstream}හෝ git diff ..@{upstream}) පරීක්ෂා කරන්න . ඊට පස්සේ, ඔයා වගේම මමත් මගේ වැඩ නැවත කරන්නම්.
පැට් නොට්ස්

163
වඩාත් මෑත පිළිතුරක සඳහන් කර ඇති පරිදි, 1.6.1 අනුවාදය අනුව, 'git reset --merge' භාවිතා කළ හැකිය
Matt Ball

5
මම භාවිතා git merge -X theirs remote_branchවෙනුවට git pull --strategy=theirs remote_branchලෙස theirsක විකල්පය වගේrecursive
MLT

14
git merge --abortවඩා සුදුසුය.
ඩැනියෙල් කැසිඩි

1964

ඔබගේ git අනුවාදය> = 1.6.1 නම්, ඔබට භාවිතා කළ හැකිය git reset --merge.

Ic මයිකල් ජොන්සන් සඳහන් කරන පරිදි, ඔබේ git අනුවාදය> = 1.7.4 නම්, ඔබටද භාවිතා කළ හැකිය git merge --abort.

සෑම විටම මෙන්, ඔබ ඒකාබද්ධ කිරීමක් ආරම්භ කිරීමට පෙර කිසිදු වෙනස් කළ නොහැකි බවට වග බලා ගන්න.

සිට GIT ඒකාබද්ධ man පිටුව

git merge --abortපවතින git reset --mergeවිට සමාන MERGE_HEADවේ.

MERGE_HEAD ඒකාබද්ධ කිරීමක් සිදු වන විට පවතී.

එසේම, ඒකාබද්ධ කිරීමක් ආරම්භ කිරීමේදී නොගැලපෙන වෙනස්කම් සම්බන්ධයෙන්:

ඔබට වෙනස්කම් තිබේ නම්, ඒකාබද්ධ කිරීමක් ආරම්භ කිරීමට git stashපෙර, ඒකාබද්ධ කිරීමට පෙර සහ ඒකාබද්ධ කිරීම git stash popඅවසන් කිරීමෙන් පසුව හෝ එය ගබ්සා කිරීමෙන් පසුව ඒවා කිරීමට ඔබට අවශ්‍ය නැත .


3
සිත්ගන්නාසුළුයි - නමුත් අත්පොත මා බිය ගන්වයි. භාවිතා කිරීම සුදුසු වන්නේ කවදාද? ඔබට විකල්පය නියම කළ <commit>යුත්තේ කවදාද? #GitMoment: -o
conny

1
ආරම්භයේ සිටම ඒකාබද්ධ කිරීම නැවත කිරීමට අවශ්‍ය විට ඔබ සාමාන්‍යයෙන් මෙය භාවිතා කරයි. මට කිසි විටෙකත් විකල්ප කැපවීම මා විසින්ම නියම කිරීමට සිදු වී නැත, එබැවින් පෙරනිමිය (විකල්ප <commit> නැත) හොඳයි.
කාල්

44
මෙම පිළිතුරට වැඩි ඡන්ද ප්‍රමාණයක් ලැබෙනු ඇතැයි මම ප්‍රාර්ථනා කරමි! මෙම අවස්ථාවෙහිදී, එය බොහෝ අවස්ථාවන්හි වඩාත්ම අදාළ විසඳුම ලෙස පෙනේ.
ජේ ටේලර්

1
නොගැලපෙන වෙනස්කම් සහිතව වුවද, ඒකාබද්ධ වීමට පෙර තත්වය යථා තත්වයට පත් කිරීමට git ට හැකි විය. හොඳයි!
T3rm1

2
git merge --abortසඳහා පමණක් පර්යාය පදයක් git reset --merge? නම නිසැකවම වඩා අර්ථවත් කරයි, නමුත් එයට එකම ක්‍රියාකාරීත්වයක් තිබේද?
ටිකොන් ජෙල්විස්

519
git merge --abort

වත්මන් ගැටුම් නිරාකරණ ක්‍රියාවලිය නවතා දමා ඒකාබද්ධ වීමට පෙර තත්වය ප්‍රතිනිර්මාණය කිරීමට උත්සාහ කරන්න.

ඒකාබද්ධ කිරීම ආරම්භ කරන විට වැඩ නොකළ වෙනස් කිරීම් සිදුවී ඇත්නම්, git merge --abortසමහර අවස්ථාවලදී මෙම වෙනස්කම් ප්‍රතිනිර්මාණය කිරීමට නොහැකි වනු ඇත. එබැවින්, git ඒකාබද්ධ කිරීම ක්‍රියාත්මක කිරීමට පෙර සෑම විටම ඔබගේ වෙනස්කම් සිදු කිරීම හෝ ගබඩා කිරීම රෙකමදාරු කරනු ලැබේ.

git merge --abortපවතින git reset --mergeවිට සමාන MERGE_HEADවේ.

http://www.git-scm.com/docs/git-merge


16
Git v1.7.4 සිට මෙය ලබා ගත හැකිය. එය git reset --merge සඳහා අන්වර්ථයකි.
මයිකල් ජොන්සන්

167

එය එතරම් සරල ය.

git merge --abort

ඔබ මේ ආකාරයේ කරදරයක සිටින විට Git විසින්ම විසඳුම පෙන්වන අතර git status විධානය ක්‍රියාත්මක කරන්න.

git status

මෙය මිනිසුන්ට උපකාරී වේ යැයි සිතමි.


98

මම හිතන්නේ එය git resetඔබට අවශ්‍යයි.

පරෙස්සම් වන්න git revert, කියන්න, svn revert- උපසිරැසි ගැන්වීමේදී ප්‍රතිවර්තනය මඟින් ඔබගේ (නොගැලපෙන) වෙනස්කම් ඉවතලනු ඇත, ගොනුව ගබඩාවෙන් වත්මන් අනුවාදයට යවනු ඇත, නමුත් git revertබැඳීමක් "අහෝසි කරයි".

git resetසමාන කළ යුතුය svn revert, එනම් ඔබේ අනවශ්‍ය වෙනස්කම් ඉවතලන්න.


76

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

වෙනස් උපාය මාර්ගයක් සමඟ ඒකාබද්ධ කිරීම නැවත සැකසීමට හා සිදු කිරීමට විශේෂ අවශ්‍යතාවක් නොමැත. ගැටුම් නිවැරදිව උද්දීපනය කර ඇත්තේ git මගින් වන අතර අනෙක් පැති වෙනස්වීම් පිළිගැනීමේ අවශ්‍යතාවය මෙම එක් ගොනුවක් සඳහා පමණි.

ගැටුම් කට්ටලයක ගිලී නැති ගොනුවක් සඳහා, දර්ශකයේ ඇති පොදු පදනම, දේශීය සහ දුරස්ථ අනුවාදයන් ලබා ගත හැකිය. (3-මාර්ග වෙනස මෙවලමක් භාවිතා කිරීම සඳහා ඒවා කියවනු ලබන්නේ මෙහිදීය git mergetool.) ඔබට ඒවා git showබැලීමට භාවිතා කළ හැකිය .

# common base:
git show :1:_widget.html.erb

# 'ours'
git show :2:_widget.html.erb

# 'theirs'
git show :3:_widget.html.erb

දුරස්ථ අනුවාදය වාචිකව භාවිතා කිරීම සඳහා ගැටුම නිරාකරණය කිරීමේ සරලම ක්‍රමය නම්:

git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb

නැතහොත්, git> = 1.6.1 සමඟ:

git checkout --theirs _widget.html.erb

5
ඉඟියට ස්තූතියි. මෙය දුර්වල git පරිශීලක අතුරුමුහුණතක් නොවේද?
පීටර්

Et පීටර්: මට ඒත්තු ගියේ නැහැ. අපේක්ෂිත ප්‍රති result ලය සරල විකල්පයන් සහිත මූලික විධාන කිහිපයක් සමඟ ළඟා කර ගත හැකිය. ඔබ යෝජනා කරන්නේ කුමන වැඩිදියුණු කිරීම්ද?
සීබී බේලි

10
මම හිතන්නේ git 1.6.1විධානය බොහෝ අර්ථවත් වන අතර එය හොඳයි. ඒක තමයි මට ඕන වුණේ. 1.6.1 ට පෙර විසඳුම අනවශ්‍ය බවත්, ඒකාබද්ධ කිරීමේ විසර්ජන ක්‍රියාවලියෙන් වෙන් කළ යුතු වෙනත් කොටස් ගැන දැනුමක් අවශ්‍ය බවත් මම සිතමි. නමුත් නව අනුවාදය විශිෂ්ටයි!
පීටර්

75

වැනි තත්වයක් ලෙස, මම කරපු git fetchසහ git pullපසුව උඩුගං ශාඛා අනවශ්ය ගැටුම් ප්රතිඵලය ස්වාමියා ශාඛාව, නොවන බව තේරුම්.

git reset --merge 

මගේ දේශීය වෙනස්කම් නැවත සකස් නොකර මෙය ආපසු හරවන ලදි.


45

අදහස් git reset --mergeදැක්වෙන්නේ එය අන්වර්ථයකි git merge --abort. එය වටිනා ඇරිය වේ git merge --abortපමණක් සමාන වේ git reset --mergeබව ලබා MERGE_HEADදී තිබේ. ඒකාබද්ධ කිරීමේ විධානය සඳහා git help හි මෙය කියවිය හැකිය.

git merge --abort යනු MERGE_HEAD පවතින විට git reset --merge ට සමාන වේ.

අසාර්ථක ඒකාබද්ධ වීමෙන් පසුව, නොමැති විට MERGE_HEAD, අසාර්ථක වූ ඒකාබද්ධ කිරීම අහෝසි කළ හැකිය git reset --merge, නමුත් අවශ්‍යයෙන්ම නොවේ git merge --abort. ඒවා එකම දේ සඳහා පැරණි හා නව වාක්‍ය ඛණ්ඩ පමණක් නොවේ .

පුද්ගලිකව, git reset --mergeවිස්තර කර ඇති තත්වයට සමාන අවස්ථා සඳහා මම වඩාත් බලවත් වන අතර පොදුවේ ඒකාබද්ධ වීම අසාර්ථක විය.


2
මෙහි ඇත්ත වශයෙන්ම "අසාර්ථක ඒකාබද්ධ කිරීම" යන්නෙන් අදහස් කරන්නේ කුමක්ද? ගැටුම් හෝ වෙනත් දෙයක් සමඟ ඒකාබද්ධ කරන්න? නැතහොත් එය නැවත මුද්‍රණය කිරීම සඳහා: MERGE_HEAD නොමැති විට? මගේ පසු විපරම් ප්‍රශ්නය වන්නේ “git reset --merge” වඩා හොඳින් භාවිතා කිරීම තේරුම් ගැනීමයි.
ඊවොක්ස්

W ඊවොක්ස් git stash applyමට ඒකාබද්ධ කිරීමේ ගැටුමක් ඇති කළ නමුත් git merge --abortඑය උපකාරවත් git reset --mergeනොවීය.
nitzel

28

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

git reset --hard HEAD
git pull --strategy=theirs remote_branch
git fetch origin
git reset --hard origin

කරුණාකර ඉවත් කරන්න

.git \ index.lock

ගොනුව [ප්‍රතිසාධනයකදී වෙනත් ස්ථානයකට පේස්ට් කපන්න] ඉන්පසු ඔබට අවශ්‍ය අනුවාදය අනුව පහත ඕනෑම විධානයක් ඇතුළත් කරන්න.

git reset --hard HEAD
git reset --hard origin

උදව් කරන බලාපොරොත්තුව !!!


19

වැඩ කරන පිටපතෙහි තත්වය ආරක්ෂා කරන විකල්පයක් නම්:

git stash
git merge --abort
git stash pop

මම සාමාන්‍යයෙන් මෙයට එරෙහිව උපදෙස් දෙමි, මන්දයත් එය උපසිරැසි සමඟ ඒකාබද්ධ කිරීම හා සමානය.


මම අහම්බෙන් git-svn ශාඛාවකට ඒකාබද්ධ කළ විට මෙම ප්‍රවේශය ප්‍රයෝජනවත් බව මට පෙනී ගියේය. Git-svn ලුහුබැඳීමේ ශාඛා සමඟ වැඩ කිරීමේදී ස්කොෂ් ඒකාබද්ධ කිරීම් හෝ චෙරි පික් වඩා හොඳය. ඇත්ත වශයෙන්ම මගේ විසඳුම සත්‍යය පසු ඒකාබද්ධ කිරීම ස්කොෂ් ඒකාබද්ධ කිරීමක් බවට පත් කරයි.
ඇලයින් ඔ'ඩියා

යන ප්‍රශ්නයට හොඳම පිළිතුර
ෆවුඩ් බුක්‍රෙඩින්


3

පහත සඳහන් දෑ මා වෙනුවෙන් වැඩ කර ඇති බව මට පෙනී ගියේය (පූර්ව ඒකාබද්ධ කිරීමේ තත්වයට එක් ගොනුවක් ආපසු හරවන්න):

git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*

-5

මූලාශ්‍රය

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

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.