ඒකාබද්ධ කිරීමේ ප්‍රශ්න වලට එදිරිව වැඩ ප්‍රවාහය සහ නැවත සකස් කිරීම


976

වෙනත් සංවර්ධකයෙකු සමඟ ව්‍යාපෘතියක් සඳහා මම දැන් මාස කිහිපයක් තිස්සේ Git භාවිතා කරමි. මට SVN සමඟ වසර ගණනාවක අත්දැකීම් ඇත , එබැවින් මම සම්බන්ධතාවයට බොහෝ ගමන් මලු ගෙන එනු ඇතැයි අනුමාන කරමි.

අතු බෙදීම හා ඒකාබද්ධ කිරීම සඳහා Git විශිෂ්ට බව මම අසා ඇත්තෙමි, මෙතෙක් මම එය නොදකිමි. අතු බෙදීම සරලයි, නමුත් මම ඒකාබද්ධ කිරීමට උත්සාහ කරන විට, සියල්ල නිරයට යයි. දැන්, මම ඒ සඳහා එස්.වී.එන් වෙතින් පුරුදු වී සිටිමි, නමුත් මට පෙනෙන්නේ මම එක් උප-පාර්-අනුවාද පද්ධතියක් තවත් වෙළඳාමක් සඳහා වෙළඳාම් කළ බවය.

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

clone the remote repository
git checkout -b my_new_feature
..work and commit some stuff
git rebase master
..work and commit some stuff
git rebase master
..finish the feature
git checkout master
git merge my_new_feature

අත්යවශ්යයෙන්ම, විශේෂාංග ශාඛාවක් සාදන්න, සෑම විටම ස්වාමියාගේ සිට ශාඛාව දක්වා ප්රතිස්ථාපනය කරන්න, සහ ශාඛාවේ සිට නැවත ස්වාමියා දක්වා ඒකාබද්ධ කරන්න. සැලකිල්ලට ගත යුතු වැදගත් කරුණ නම් ශාඛාව සැමවිටම දේශීයව පැවතීමයි.

මෙන්න මම ආරම්භ කළ කාර්ය ප්‍රවාහය

clone remote repository
create my_new_feature branch on remote repository
git checkout -b --track my_new_feature origin/my_new_feature
..work, commit, push to origin/my_new_feature
git merge master (to get some changes that my partner added)
..work, commit, push to origin/my_new_feature
git merge master
..finish my_new_feature, push to origin/my_new_feature
git checkout master
git merge my_new_feature
delete remote branch
delete local branch

අත්යවශ්ය වෙනස්කම් දෙකක් තිබේ (මම හිතන්නේ): මම නැවත ඒකාබද්ධ කිරීම වෙනුවට සෑම විටම ඒකාබද්ධ කිරීම භාවිතා කරන අතර, මගේ විශේෂාංග ශාඛාව (සහ මගේ විශේෂාංග ශාඛාව කොමිස්) දුරස්ථ ගබඩාවට තල්ලු කරමි.

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

නැවත එකතු කිරීම වෙනුවට ඒකාබද්ධ කිරීම සඳහා මගේ තර්කය නම්, ඒකාබද්ධ කිරීම සම්මතයක් ලෙස පෙනෙන අතර නැවත ලබා ගැනීම උසස් අංගයක් ලෙස පෙනේ. මගේ බඩවැල් හැඟීම නම් මම කිරීමට උත්සාහ කරන්නේ දියුණු සැකසුමක් නොවන නිසා නැවත ලබා ගැනීම අනවශ්‍ය විය යුතුය. මම Git පිළිබඳ නව ප්‍රායෝගික ක්‍රමලේඛන පොත පවා පරීක්ෂා කර බැලුවෙමි. ඒවා ඒකාබද්ධ කිරීම පුළුල් ලෙස ආවරණය කරයි.

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

මේ වගේ දෙයක් සඳහා "නිවැරදි" කාර්ය ප්‍රවාහය කුමක්ද? Git අතු බෙදීම හා ඒකාබද්ධ කිරීම සුපිරි පහසු කරවන අතර මම එය නොදකිමි.

යාවත්කාලීන කිරීම 2011-04-15

මෙය ඉතා ජනප්‍රිය ප්‍රශ්නයක් බව පෙනේ, එබැවින් මම මුලින් ඇසූ දා සිට මගේ අවුරුදු දෙකක අත්දැකීම් සමඟ යාවත්කාලීන කිරීමට සිතුවෙමි.

අවම වශයෙන් අපගේ නඩුවේදී වුවද, මුල් කාර්ය ප්‍රවාහය නිවැරදි බව පෙනේ. වෙනත් වචන වලින් කිවහොත්, මෙය අප කරන අතර එය ක්‍රියාත්මක වේ:

clone the remote repository
git checkout -b my_new_feature
..work and commit some stuff
git rebase master
..work and commit some stuff
git rebase master
..finish the feature, commit
git rebase master
git checkout master
git merge my_new_feature

ඇත්ත වශයෙන්ම, අමු ඒකාබද්ධ කිරීම් වෙනුවට ස්කොෂ් ඒකාබද්ධ කිරීම් කිරීමට අප නැඹුරු වන බැවින් අපගේ කාර්ය ප්‍රවාහය ටිකක් වෙනස් ය . ( සටහන: මෙය මතභේදාත්මක ය, පහත බලන්න. ) මෙය අපගේ සමස්ත අංග ශාඛාවම ස්වාමියා මත තනි කැපවීමක් බවට පත් කිරීමට ඉඩ දෙයි. ඉන්පසු අපි අපගේ විශේෂාංග ශාඛාව මකා දමමු. අපගේ ශාඛා වල ටිකක් අවුල් සහගත වුවත්, අපගේ කාර්යයන් මාස්ටර් මත තාර්කිකව සැකසීමට මෙය අපට ඉඩ දෙයි. ඉතින්, අපි කරන්නේ මෙයයි:

clone the remote repository
git checkout -b my_new_feature
..work and commit some stuff
git rebase master
..work and commit some stuff
git rebase master
..finish the feature, commit
git rebase master
git checkout master
git merge --squash my_new_feature
git commit -m "added my_new_feature"
git branch -D my_new_feature

ස්කොෂ් ඒකාබද්ධ කිරීමේ මතභේදය - විචාරකයින් කිහිප දෙනෙකු පෙන්වා දී ඇති පරිදි, ස්කොෂ් ඒකාබද්ධ කිරීම ඔබගේ විශේෂාංග ශාඛාවේ ඇති සියලුම ඉතිහාසය ඉවත දමනු ඇත. නමට අනුව, එය සියලු කැපවීම් එකකට බෙදයි. කුඩා විශේෂාංග සඳහා, එය තනි පැකේජයකට enses නීභවනය වන බැවින් මෙය අර්ථවත් කරයි. විශාල විශේෂාංග සඳහා, එය බොහෝ විට හොඳ අදහසක් නොවේ, විශේෂයෙන් ඔබේ තනි කොමිස් දැනටමත් පරමාණුක නම්. එය සැබවින්ම පුද්ගලික මනාපයන් වෙතට පැමිණේ.

ගිතුබ් සහ බිට්බකට් (වෙනත් අය?) ඉල්ලීම් අදින්න - ඔබ ඉල්ලීම් සමඟ ඒකාබද්ධ කිරීම / නැවත සකස් කිරීම සම්බන්ධ වන්නේ කෙසේදැයි ඔබ කල්පනා කරන්නේ නම්, ඔබ නැවත ස්වාමියා සමඟ ඒකාබද්ධ වීමට සූදානම් වන තෙක් ඉහත සියලු පියවර අනුගමනය කිරීමට මම නිර්දේශ කරමි. Git සමඟ අතින් ඒකාබද්ධ කිරීම වෙනුවට, ඔබ PR පිළිගනී. මෙය ස්කොෂ් ඒකාබද්ධ කිරීමක් සිදු නොකරන බව සලකන්න (අවම වශයෙන් පෙරනිමියෙන් නොවේ), නමුත් ස්කොෂ් නොවන, වේගයෙන් ඉදිරියට නොයෑම යනු පුල් ඉල්ලීම් ප්‍රජාවේ (මා දන්නා පරිදි) පිළිගත් ඒකාබද්ධ කිරීමේ සම්මුතියයි. විශේෂයෙන්, එය මේ ආකාරයට ක්‍රියා කරයි:

clone the remote repository
git checkout -b my_new_feature
..work and commit some stuff
git rebase master
..work and commit some stuff
git rebase master
..finish the feature, commit
git rebase master
git push # May need to force push
...submit PR, wait for a review, make any changes requested for the PR
git rebase master
git push # Will probably need to force push (-f), due to previous rebases from master
...accept the PR, most likely also deleting the feature branch in the process
git checkout master
git branch -d my_new_feature
git remote prune origin

මම Git ට ආදරය කර ඇති අතර කිසි විටෙකත් SVN වෙත යාමට අවශ්‍ය නැත. ඔබ අරගල කරන්නේ නම්, එය සමඟම රැඳී සිටින්න, අවසානයේදී ඔබට උමග අවසානයේ ආලෝකය පෙනෙනු ඇත.


31
අවාසනාවකට මෙන්, නව ප්‍රාග්මිස්ටික් ක්‍රමලේඛන පොත බොහෝ දුරට ලියා ඇත්තේ එස්.වී.එන්. හි සිතන අතරතුර Git භාවිතා කිරීමෙන් වන අතර මේ අවස්ථාවේ දී එය ඔබව නොමඟ යවා ඇත. Git හි, නැවත සකස් කිරීම ඒවා විය හැකි විට දේවල් සරලව තබා ගනී. ඔබගේ අත්දැකීම් මඟින් ඔබට ඔබගේ කාර්ය ප්‍රවාහය Git තුළ ක්‍රියා නොකරන බවත් Git ක්‍රියා නොකරන බවත් පැවසිය හැකිය.
පෝල්

18
මෙම නඩුවේ ස්කොෂ් ඒකාබද්ධ කිරීම මම නිර්දේශ නොකරමි, එය ඒකාබද්ධ වී ඇති දේ පිළිබඳ කිසිදු තොරතුරක් ඉතිරි නොකරන බැවින් (svn මෙන්, නමුත් මෙහි ඒකාබද්ධ කිරීමක් නොමැත).
මාරියස් කේ

7
පතුලේ ඇති සටහනට ආදරය කරන්න, මට Git සමඟ අරගලයේ සමාන අත්දැකීමක් තිබුනි, නමුත් දැන් එය භාවිතා නොකිරීමට සිතීමට අරගල කරන්න. අවසාන පැහැදිලි කිරීම සඳහා ස්තූතියි, rebaseඅවබෝධය සඳහා බොහෝ උපකාර විය
ජෝන් ෆෙනෝව්

6
ඔබ විශේෂාංගය අවසන් කිරීමෙන් පසු, ඔබ නව_ විශේෂාංග මාස්ටර් සමඟ ඒකාබද්ධ කිරීමට පෙර අවසන් වරට නැවත ප්‍රතිස්ථාපනය කළ යුතු නොවේද?
softarn

17
ඔබගේ කාර්ය ප්‍රවාහය මකාදැමූ ශාඛාවෙන් සියලු
බැඳීම්

Answers:


373

“ගැටුම්” යන්නෙහි අර්ථය “එකම අන්තර්ගතයක සමාන්තර පරිණාමය” යන්නයි. එබැවින් එය ඒකාබද්ධ කිරීමේදී "සියල්ල නිරයට" ගියහොත් එයින් අදහස් වන්නේ ඔබට එකම ලිපිගොනු සමූහයක දැවැන්ත පරිණාමයක් ඇති බවයි.

ඒකාබද්ධ කිරීමකට වඩා ප්‍රතිප්‍රහාරයක් වඩා හොඳ වීමට හේතුව මෙයයි:

  • ඔබ ඔබේ ප්‍රාදේශීය බැඳීම් ඉතිහාසය ස්වාමියා සමඟ නැවත ලියයි (ඉන්පසු ඔබේ වැඩ නැවත යෙදවීම, එවිට ඕනෑම ගැටුමක් විසඳීම)
  • අවසාන ඒකාබද්ධ කිරීම නිසැකවම "වේගවත් ඉදිරි" එකක් වනු ඇත, මන්ද එයට ස්වාමියාගේ සියලු කැපවීමේ ඉතිහාසය ඇති අතර නැවත අයදුම් කිරීමට ඔබගේ වෙනස්කම් පමණි.

එම අවස්ථාවේ නිවැරදි කාර්ය ප්‍රවාහය (පොදු ලිපිගොනු සමූහයේ පරිණාමය) පළමුව නැවත ප්‍රතිස්ථාපනය කර ඒකාබද්ධ කරන්න .

කෙසේ වෙතත්, එයින් අදහස් වන්නේ, ඔබ ඔබේ ප්‍රාදේශීය ශාඛාව තල්ලු කරන්නේ නම් (උපස්ථ හේතුව නිසා), එම ශාඛාව වෙනත් කිසිවෙකු විසින් ඇද නොගත යුතුය (හෝ අවම වශයෙන් භාවිතා කළ යුතුය) (කැපවීමේ ඉතිහාසය අනුප්‍රාප්තික නැවත ලිවීමෙන් නැවත ලියනු ලැබේ).


එම මාතෘකාව මත (rebase පසුව කාර්ය ප්රවාහ ඒකාබද්ධ), barraponto අදහස් රසවත් තනතුරු දෙක සිට දෙකම සඳහන් randyfay.com :

මෙම තාක්ෂණය උපයෝගී කරගනිමින්, ඔබේ කාර්යය සැමවිටම පොදු ශාඛාවට ඉහළින් යන්නේ ධාරාව සමඟ යාවත්කාලීන වන පැච් එකක් වැනි ය HEAD.

( බසාර් සඳහා ද ඒ හා සමාන තාක්‍ෂණයක් පවතී )



2
randyfay.com/node/91 සහ randyfay.com/node/89 අපූරු කියවීම් වේ. මෙම ලිපි මගේ වැඩ ප්‍රවාහය සමඟ බැඳී ඇති දේ සහ පරිපූර්ණ වැඩ ප්‍රවාහයක් යනු කුමක්ද යන්න මට අවබෝධ කර දුන්නේය.
Capi Etheriel

එය කෙළින්ම ලබා ගැනීම සඳහා, ප්‍රධාන ශාඛාවෙන් ඔබේ ප්‍රදේශයට නැවත යැවීම මූලික වශයෙන් කිසියම් ආකාරයක ඒකාබද්ධ කිරීමකින් පසු ස්වාමියාට දැනුමක් ඇති බව ඔබේ ප්‍රාදේශීයයාට මග හැරී ඇති ඉතිහාසයක් යාවත්කාලීන කිරීමද?
hellatan

මා මෙහි විස්තර කරන දෙය දේශීය මාස්ටර්ට ඉහළින් ප්‍රතික්ෂේප කිරීමයි. ඔබ ප්‍රාදේශීය ඉතිහාසය හරියටම යාවත්කාලීන නොකර, ප්‍රාදේශීය ශාඛාව තුළ ඇති වන ඕනෑම ගැටුමක් නිරාකරණය කර ගැනීම සඳහා ප්‍රාදේශීය ඉතිහාසය මාස්ටර්ට ඉහළින් නැවත යෙදීම.
VonC

389

ටීඑල්; ඩී.ආර්

Git rebase වැඩ ප්‍රවාහයක් යෝජනා කර ඇති පරිදි ගැටුම් නිරාකරණය සඳහා නරක පුද්ගලයින්ගෙන් හෝ SVN වැඩ ප්‍රවාහයකට පුරුදු වී සිටින පුද්ගලයින්ගෙන් ඔබව ආරක්ෂා නොකරයි. ඒ කෲර නැති කතාවක්: Git ආපදා හුදකළා . එය ඔවුන්ට ගැටුම් නිරාකරණය වඩාත් වෙහෙසකර කරවන අතර නරක ගැටුම් නිරාකරණයෙන් ගොඩ ඒම දුෂ්කර කරයි. ඒ වෙනුවට, dif3 භාවිතා කරන්න, එවිට එය එතරම් අපහසු නොවේ.


ගැටුම් නිරාකරණය සඳහා නැවත වැඩ කිරීමේ ප්‍රවාහය වඩා හොඳ නොවේ!

ඉතිහාසය පිරිසිදු කිරීම සඳහා මම ඉතා හොඳ ප්‍රති reb ල ලබා දෙන්නෙමි. කෙසේ වෙතත් මම කවදා හෝ ගැටුමකට මුහුණ , මම වහාම එය ප්‍රතික්ෂේප කර ඒ වෙනුවට ඒකාබද්ධ කිරීමක් කරමි! ගැටුම් නිරාකරණය සඳහා ඒකාබද්ධ කිරීමේ කාර්ය ප්‍රවාහයකට වඩා හොඳ විකල්පයක් ලෙස ජනතාව නැවත ප්‍රතිස්ථාපන කාර්ය ප්‍රවාහයක් නිර්දේශ කිරීම ඇත්තෙන්ම මාව මරණයට පත් කරයි (මෙම ප්‍රශ්නය හරියටම එයයි).

ඒකාබද්ධ කිරීමකදී එය "සියල්ල නිරයට" ගියහොත්, එය ප්‍රතිප්‍රහාරයක් අතරතුර "සියල්ල නිරයට" යනු ඇත, තවද තවත් බොහෝ නිරයන් ද විය හැකිය! මෙන්න හේතුව:

හේතුව # 1: එක් එක් කැපවීම සඳහා එක් වරක් වෙනුවට ගැටුම් එක් වරක් විසඳන්න

ඒකාබද්ධ කිරීම වෙනුවට ඔබ නැවත ප්‍රතිස්ථාපනය කරන විට, එකම ගැටුම සඳහා, නැවත ප්‍රතිස්ථාපනය කිරීමට ඔබ බැඳී සිටින වාර ගණනක් දක්වා ගැටුම් නිරාකරණය කිරීමට ඔබට සිදුවනු ඇත!

සැබෑ තත්වය

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

මගේ ශාඛාව නැවත මාස්ටර් සමඟ ඒකාබද්ධ කිරීමට කාලය පැමිණි විට, මට විකල්ප දෙකක් තිබේ:

git merge: මට ගැටුමක් ඇති වේ. මගේ ශාඛාව (එහි අවසාන නිෂ්පාදිතය) සමඟ ඒකාබද්ධ කිරීමට හා ඒකාබද්ධ කිරීමට ඔවුන් කළ වෙනස මම දකිමි. සිදු විය.

git rebase: මගේ පළමු කැපවීම සමඟ ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ දෙවන බැඳීම සමඟ ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ තුන්වන බැඳීම සමඟ ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ හතරවන බැඳීම සමඟ මට ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ පස්වන කැපවීම සමඟ ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ හයවන බැඳීම සමඟ මට ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මට මගේ හත්වන සමඟ ගැටුමක් ඇති වේ කැපවීම වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මට මගේ සමග ගැටුමක් ඇති වේඅටවන කැපවීම. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ නවවන බැඳීම සමඟ ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ දහවන බැඳීම සමඟ ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ එකොළොස්වැනි බැඳීම සමඟ ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ දොළොස්වන කැපවීම සමඟ ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ දහතුන්වන බැඳීම සමඟ ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මගේ දහහතරවන වියේකැපවීම සමඟ මට ගැටුමක් ඇති වේ. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි. මට මගේ පහළොස්වැනියා සමඟ ගැටුමක් ඇති වේකැපවන්න. මම ගැටුම නිරාකරණය කර නැවත ආරම්භ කරමි.

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

ඔබ විසින් කළ යුතු අමතර ගැටුම් නිරාකරණය සමඟ, එය ඔබ වැරැද්දක් කිරීමේ හැකියාව වැඩි කරයි . නමුත් ඔබට අහෝසි කළ හැකි බැවින් වැරදි වැරදියි. ඇත්ත වශයෙන්ම හැර ...

හේතුව # 2: නැවත පිරවීමත් සමඟ, අහෝසි කිරීමක් නොමැත!

ගැටුම් නිරාකරණය කිරීම දුෂ්කර විය හැකි බවත්, සමහර අය ඒ සම්බන්ධයෙන් ඉතා නරක බවත් අප සැමට එකඟ විය හැකි යැයි මම සිතමි. එය වැරදි වලට ගොදුරු විය හැකි අතර, එය එතරම් විශාල වන්නේ ඇයිද යන්න git මඟින් අහෝසි කිරීම පහසු කරයි!

ඔබ ශාඛාවක් ඒකාබද්ධ කරන විට, ගැටුම් නිරාකරණය දුර්වල ලෙස සිදුවුවහොත් ඉවතලෑමට හෝ සංශෝධනය කිරීමට හැකි ඒකාබද්ධ බැඳීමක් git විසින් නිර්මාණය කරයි. ඔබ දැනටමත් පොදු / බලයලත් රෙපෝ වෙත අයහපත් ඒකාබද්ධ කිරීම තල්ලු කර ඇතත්, ඒකාබද්ධ කිරීම git revertමඟින් හඳුන්වා දී ඇති වෙනස්කම් අහෝසි කිරීමට සහ නව ඒකාබද්ධ කිරීමේ බැඳීමක දී ඒකාබද්ධ කිරීම නිවැරදිව නැවත කිරීමට ඔබට භාවිතා කළ හැකිය .

ඔබ ශාඛාවක් නැවත ප්‍රතිස්ථාපනය කරන විට , ගැටුම් නිරාකරණය වැරදියි නම්, ඔබ ඉස්කුරුප්පු කරනු ලැබේ. දැන් සෑම කැපවීමකම නරක ඒකාබද්ධ කිරීම අඩංගු වන අතර ඔබට නැවත ප්‍රතිස්ථාපනය කළ නොහැක *. හොඳම දෙය නම්, ඔබ ආපසු ගොස් බලපෑමට ලක්වූ එක් එක් කොමිස් සංශෝධනය කළ යුතුය. විනෝදයක් නොවේ.

ප්‍රතිප්‍රහාරයකින් පසු, කොමිස්වල මුලින් කොටස කුමක්ද සහ නරක ගැටුම් නිරාකරණයේ ප්‍රති as ලයක් ලෙස හඳුන්වා දුන් දේ තීරණය කළ නොහැක.

* Git හි අභ්‍යන්තර ල logs ු-සටහන් වලින් පැරණි පරණ හෑරීමට ඔබට හැකි නම්, හෝ නැවත ප්‍රතිස්ථාපනය කිරීමට පෙර අවසන් බැඳීම පෙන්වා දෙන තුන්වන ශාඛාවක් ඔබ නිර්මාණය කරන්නේ නම්, එය නැවත අහෝසි කළ හැකිය.

ගැටුම් නිරාකරණයෙන් නිරය ඉවතට ගන්න: diff3 භාවිතා කරන්න

උදාහරණයක් ලෙස මෙම ගැටුම සලකා බලන්න:

<<<<<<< HEAD
TextMessage.send(:include_timestamp => true)
=======
EmailMessage.send(:include_timestamp => false)
>>>>>>> feature-branch

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

diff3 ගලවා ගැනීමට!

git config --global merge.conflictstyle diff3

ඔබ diff3 භාවිතා කරන විට, සෑම නව ගැටුමකටම 3 වන කොටස, ඒකාබද්ධ වූ පොදු මුතුන් මිත්තෙකු ඇත.

<<<<<<< HEAD
TextMessage.send(:include_timestamp => true)
||||||| merged common ancestor
EmailMessage.send(:include_timestamp => true)
=======
EmailMessage.send(:include_timestamp => false)
>>>>>>> feature-branch

ඒකාබද්ධ කරන ලද පොදු මුතුන් මිත්තෙකු පළමුව පරීක්ෂා කරන්න. ඉන්පසු එක් එක් ශාඛාවේ අභිප්‍රාය තීරණය කිරීම සඳහා එක් එක් පැත්ත සංසන්දනය කරන්න. HEAD විසින් EmailMessage TextMessage ලෙස වෙනස් කර ඇති බව ඔබට දැක ගත හැකිය. එහි අභිප්‍රාය වන්නේ එකම පරාමිතීන් පසුකරමින් TextMessage සඳහා භාවිතා කරන පන්තිය වෙනස් කිරීමයි. විශේෂාංග ශාඛාවේ අභිප්‍රාය වන්නේ: include_timestamp විකල්පය සඳහා සත්‍යය වෙනුවට අසත්‍යය සම්මත කිරීමයි. මෙම වෙනස්කම් ඒකාබද්ධ කිරීම සඳහා, දෙකෙහිම අභිප්‍රාය ඒකාබද්ධ කරන්න:

TextMessage.send(:include_timestamp => false)

සාමාන්යයෙන්:

  1. පොදු මුතුන් මිත්තන් එක් එක් ශාඛාව සමඟ සංසන්දනය කර සරලම වෙනස ඇති ශාඛාව තීරණය කරන්න
  2. කේතයේ අනෙක් ශාඛාවේ අනුවාදයට එම සරල වෙනස යොදන්න, එවිට එය වඩාත් සරල හා සංකීර්ණ වෙනසක් අඩංගු වේ
  3. ඔබ විසින් වෙනස්කම් එකට ඒකාබද්ධ කළ එක හැරුණු විට ගැටුම් කේතයේ සියලුම කොටස් ඉවත් කරන්න

විකල්ප: ශාඛාවේ වෙනස්කම් අතින් යෙදීමෙන් විසඳන්න

අවසාන වශයෙන්, සමහර ගැටුම් dif3 සමඟ පවා තේරුම් ගැනීමට භයානක ය. මෙය විශේෂයෙන් සිදුවන්නේ අර්ථකථනමය වශයෙන් පොදු නොවන රේඛා වෙනස සොයාගත් විටය (උදා: ශාඛා දෙකම එකම ස්ථානයක හිස් රේඛාවක් තිබීම!). උදාහරණයක් ලෙස, එක් ශාඛාවක් පන්තියක ශරීරයේ ඉන්ඩෙන්ටේෂන් වෙනස් කරයි හෝ සමාන ක්‍රම නැවත සකස් කරයි. මෙම අවස්ථා වලදී, වඩා හොඳ විභේදන උපාය මාර්ගයක් වනුයේ ඒකාබද්ධයේ දෙපසින් ඇති වෙනස පරීක්ෂා කර අනෙක් ගොනුවට වෙනස අතින් යෙදීමයි.

අප සමඟ ඒකබද්ධ නොතිබෙන වාතාවරණයක් තුළ ගැටුම් නිරාකරණය හැකි ආකාරය දී එහෙනම් අපි පෙනුම origin/feature1ඇති lib/message.rbගැටුම්.

  1. අපගේ දැනට පරීක්ෂා කර ඇති ශාඛාව ( HEADහෝ --ours) හෝ අප ඒකාබද්ධ කරන ශාඛාව ( origin/feature1හෝ --theirs) අයදුම් කිරීමට වඩා සරල වෙනසක්ද යන්න තීරණය කරන්න . ත්‍රිත්ව තිත ( git diff a...b) සමඟ වෙනස භාවිතා bකිරීමෙන් එහි අවසාන අපසරනයෙන් පසුව සිදු වූ වෙනස්කම් aහෝ වෙනත් වචන වලින් කිවහොත් a හා b හි පොදු මුතුන් මිත්තෙකු b හා සසඳන්න.

    git diff HEAD...origin/feature1 -- lib/message.rb # show the change in feature1
    git diff origin/feature1...HEAD -- lib/message.rb # show the change in our branch
    
  2. ගොනුවේ වඩාත් සංකීර්ණ අනුවාදය බලන්න. මෙය සියලු ගැටුම් සලකුණු ඉවත් කර ඔබ තෝරාගත් පැත්ත භාවිතා කරයි.

    git checkout --ours -- lib/message.rb   # if our branch's change is more complicated
    git checkout --theirs -- lib/message.rb # if origin/feature1's change is more complicated
    
  3. සංකීර්ණ වෙනස පරීක්ෂා කර බැලීමෙන්, සරල වෙනසෙහි වෙනස ඉහළට ඔසවන්න (පියවර 1 බලන්න). මෙම වෙනසෙහි සෑම වෙනස්කමක්ම ගැටුම් ගොනුවට යොදන්න.


4
සෑම ගැටුමක්ම එකවර ඒකාබද්ධ කිරීම තනි කොමිස් වලට වඩා හොඳ වන්නේ කෙසේද? තනි කොමිස් ඒකාබද්ධ කිරීමෙන් මට දැනටමත් ගැටළු ඇති වී ඇත (විශේෂයෙන් තාර්කික කොටස් වලට බැඳීම් කඩ නොකරන සහ සත්‍යාපනය සඳහා ප්‍රමාණවත් පරීක්ෂණ සපයන පුද්ගලයින්ගෙන්). එසේම, උපස්ථ විකල්පයන් සම්බන්ධව නැවත එකතු කිරීම නරක අතට හැරීමක් නොවේ, බුද්ධිමත් ලෙස අන්තර්ක්‍රියාකාරී නැවත භාවිතා කිරීම සහ ඉබ්බා වැනි මෙවලම් (ඇතුළත් කිරීමට ඇතුළත් වන දේ තෝරා ගැනීමට ඉඩ සලසයි) වැනි මෙවලම් බොහෝ සෙයින් උපකාරී වේ.
prusswan

8
# 1 හි හේතුව මා ඇමතූ බවක් මට හැඟේ. තනි කොමිස් තාර්කිකව අනුකූල නොවේ නම්, තර්කානුකූලව ස්ථාවර ශාඛාව ඒකාබද්ධ කිරීමට වඩාත් හොඳ හේතුව, එවිට ඔබට ඇත්ත වශයෙන්ම ගැටුම පිළිබඳ අවබෝධයක් ලබා ගත හැකිය. බැඳීම 1 දෝෂ සහිත නම් සහ 2 කැපවීම එය නිවැරදි කරන්නේ නම්, බැඳීම 1 ඒකාබද්ධ කිරීම ව්‍යාකූල වනු ඇත. මා ඉහත සඳහන් කළ ආකාරයටම ඔබට ගැටුම් 15 ක් එකවර ලැබීමට නීත්‍යානුකූල හේතු තිබේ. ප්‍රතිප්‍රහාරය නරක අතට හැරීම පිළිබඳ ඔබේ තර්කය තරමක් පදනම් විරහිත ය. රීබේස් නරක හොඳ ඒකාබද්ධ කිරීම් මුල් හොඳ කොමිස් වලට මිශ්‍ර කරන අතර ඔබට නැවත උත්සාහ කිරීමට ඉඩ දීම සඳහා හොඳ කොමිස් ඉතිරි නොකරයි. ඒකාබද්ධ කිරීම සිදු වේ.
එඩ්වඩ් ඇන්ඩර්සන්

6
මම ඔබ සමඟ සම්පූර්ණයෙන්ම එකඟයි නිල්බස්. නියම තනතුර; ඒකෙන් සමහර දේවල් ඉවත් වෙනවා. මම හිතන්නේ නැවත පැමිණීම මෙහි යම් උපකාරයක් වේවිද කියා. එසේම, diff3 භාවිතා කිරීම පිළිබඳ යෝජනාවට ස්තූතියි, මම අනිවාර්යයෙන්ම එය දැන්ම මාරු කරන්නෙමි.
ඩෙරික්

45
+1 වෙනස 3 ගැන පමණක් මට පැවසීම සඳහා - තේරුම්ගත නොහැකි ගැටුමක් දෙස කොපමණ වාරයක් බලා සිටියේද, පොදු මුතුන් මිත්තන්ට පැවසීමට ඇති දේ මට නොකියන බවට වගකිව යුතු ඕනෑම කෙනෙකුට ශාප කරයි. බොහොම ස්තූතියි.
ජෝන්

4
මෙය පිළිගත් පිළිතුර විය යුතුය. ප්‍රතිව්‍යුහගත කිරීමේ ප්‍රවාහය ද භයානක ය, මන්ද යත්, යම් අවස්ථාවක දී කේත පදනමේ විශාල වෙනසක් ඇති බව සැඟවී ඇති හෙයිනි, එය ඔබ සොයන කේතය ලියා ඇති ආකාරය තේරුම් ගැනීමට අවශ්‍ය දැයි දැන ගැනීමට ප්‍රයෝජනවත් විය හැකිය. ගැටුම් ඇති නොවන කුඩා ශාඛා පමණක් ස්වාමියා වෙත නැවත ප්‍රතිස්ථාපනය කළ යුතුය.
රොබට් රගර්

33

මගේ කාර්ය ප්‍රවාහයේදී, මම හැකි තරම් නැවත ප්‍රතිස්ථාපනය කරමි (මම එය බොහෝ විට කිරීමට උත්සාහ කරමි. විෂමතා සමුච්චය වීමට ඉඩ නොදීම, අතු අතර isions ට්ටනවල ප්‍රමාණය හා බරපතලකම අඩු කරයි).

කෙසේ වෙතත්, බොහෝ දුරට ප්‍රතිනිර්මාණය මත පදනම් වූ කාර්ය ප්‍රවාහයක පවා, ඒකාබද්ධ කිරීම සඳහා ස්ථානයක් තිබේ.

ඒකාබද්ධ කිරීම ඇත්ත වශයෙන්ම දෙමව්පියන් දෙදෙනෙකු සිටින නෝඩයක් නිර්මාණය කරන බව මතක තබා ගන්න. දැන් පහත දැක්වෙන තත්වය සලකා බලන්න: මට A සහ ​​B යන ස්වාධීන විශේෂාංග ශාඛා දෙකක් ඇති අතර, දැන් A සහ ​​B යන දෙකම මත රඳා පවතින C විශේෂාංග ශාඛාව මත දේවල් සංවර්ධනය කිරීමට අවශ්‍ය වන අතර A සහ ​​B සමාලෝචනය කෙරෙමින් පවතී.

මම එසේ කරන්නේ පහත සඳහන් දේ ය:

  1. A මුදුනේ C ශාඛාව සාදන්න (සහ පිටවීම).
  2. එය බී සමඟ ඒකාබද්ධ කරන්න

දැන් C ශාඛාවට A සහ ​​B යන දෙකින්ම වෙනස්කම් ඇතුළත් වන අතර මට එය තවදුරටත් වර්ධනය කර ගත හැකිය. මම A ට කිසියම් වෙනසක් කළහොත්, මම ශාඛා ප්‍රස්ථාරය පහත පරිදි ප්‍රතිනිර්මාණය කරමි:

  1. A හි නව මුදුනේ T ශාඛාව සාදන්න
  2. ටී සමඟ බී සමඟ ඒකාබද්ධ කරන්න
  3. සී නැවත ටී වෙත නැවත යොමු කරන්න
  4. ශාඛාව මකන්න ටී

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


1
ඔබට එය නැවත ලබා ගත හැකිය. ඒකාබද්ධ කිරීම ඇත්ත වශයෙන්ම මෙහි අවශ්‍ය නොවේ (ඔබට කොමිස් අනුපිටපත් කිරීමට අවශ්‍ය නැතිනම් හැර - නමුත් මම එය තර්කයක් ලෙස දකින්නේ නැත).
odwl

1
ඇත්ත වශයෙන්ම මට කොමිස් අනුපිටපත් කිරීමට අවශ්‍ය නැත. මගේ කාර්යයේ ගුවන් ගමන් ව්‍යුහය හැකි තරම් පිරිසිදුව තබා ගැනීමට මම කැමතියි. නමුත් එය පෞද්ගලික රුචිකත්වයට කාරණයක් වන අතර එය සෑම කෙනෙකුටම සුදුසු නොවේ.
ඇලෙක්ස් ගොන්ට්මාකර්

පළමු ඡේදය සමඟ මම 100% ක් එකඟ වෙමි. (@ එඩ්වඩ්ගේ පිළිතුර එය එසේ නොවන තැනක ක්‍රියාත්මක වේ, නමුත් ඔබ යෝජනා කරන ආකාරයට ලෝකයේ සියලුම ව්‍යාපෘති ක්‍රියාත්මක වනු ඇත). පිළිතුර ඉතිරි A සහ B පවතී අතර සී මත වැඩ ආකාරයක අවදානම් පිළිබඳ දැනටමත් ඒ අර්ථයෙන් (අවම වශයෙන් තාක් දුරට එය ටිකක් දුර ගොස් තිබුණු බව පෙනේ ඇත්තටම ඒ 'හා' බී මත රඳා පවතී), සහ අවසානයේ ඔබ පවා බොහෝ විට ඒකාබද්ධ කිරීම් තබා නොගනී (C නවතම සහ විශාලතම දේ මත නැවත ප්‍රතිස්ථාපනය වේ).
ඇලෝයිස් මහඩාල්

23

Git push සම්භවය භාවිතා නොකරන්න - ඕනෑම තත්වයක් යටතේ මිරර්.

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

http://twitter.com/dysinger/status/1273652486


6
නැතහොත් ප්‍රති result ලය කුමක් වේදැයි ඔබට විශ්වාස නැති දේවල් නොකරන්න? මම පරිපාලකවරයා සඳහා භාවිතා කළ යන්ත්‍රයක් Instructions to this machine may lead to unintended consequences, loss of work/data, or even death (at the hands of the sysad). Remember that you are solely responsible for the consequences of your actions MOTD හි තිබුණි.
රිචෝ

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

14

ඔබේ පැහැදිලි කිරීම කියවීමෙන් පසු මට එක ප්‍රශ්නයක් තිබේ: ඔබ කවදාවත් එසේ නොකළේ විය හැකිද?

git checkout master
git pull origin
git checkout my_new_feature

ඔබේ විශේෂාංග ශාඛාවේ 'git rebase / merge master' කිරීමට පෙර?

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


13

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

  • ඔබගේ වෙනස්කම් සමාලෝචනය කිරීම ඉතා පහසුය
  • ඔබට දිගටම කුඩා, කුඩා කොමිස් සෑදිය හැකි නමුත්, ඔබට එකවර එම කොමිස් කට්ටල ප්‍රසිද්ධ කළ හැකිය (ස්වාමියා සමඟ ඒකාබද්ධ වීමෙන්)
  • ඔබ පොදු මාස්ටර් ශාඛාව දෙස බලන විට විවිධ සංවර්ධකයින් විසින් විවිධ විශේෂාංග සඳහා විවිධ කැපවීම් මාලාවක් ඔබට පෙනෙනු ඇත, නමුත් ඒවා සියල්ලම එකිනෙකට සම්බන්ධ නොවේ

උපස්ථය සඳහා ඔබට තවමත් ඔබේ පුද්ගලික සංවර්ධන ශාඛාව දුරස්ථ ගබඩාවට තල්ලු කළ හැකි නමුත් අනෙක් අය එය "පොදු" ශාඛාවක් ලෙස නොසැලකිය යුතුය. BTW, මෙය කිරීම සඳහා පහසු විධානයකි git push --mirror origin.

Git භාවිතා කරන ඇසුරුම්කරණ මෘදුකාංගය ලිපිය නැවත එකතු කිරීම හා ඒකාබද්ධ කිරීම අතර ඇති වෙළඳාම පැහැදිලි කරයි. එය ටිකක් වෙනස් සන්දර්භයක් නමුත් විදුහල්පතිවරු එක හා සමානයි - එය මූලික වශයෙන් ඔබේ ශාඛා පොදු හෝ පෞද්ගලිකද යන්න සහ ඒවා ප්‍රධාන පෙළට ඒකාබද්ධ කිරීමට ඔබ සැලසුම් කරන්නේ කෙසේද යන්නට පැමිණේ.


1
Git භාවිතා කර ඇසුරුම්කරණ මෘදුකාංගයට සබැඳිය තවදුරටත් ක්‍රියා නොකරයි. මුල් පිළිතුර සංස්කරණය කිරීමට මට හොඳ සබැඳියක් සොයාගත නොහැකි විය.
චෙතන්

ඔබ පිළිබිඹු නොකළ යුතුය origin, ඔබ තුන්වන කැපවූ උපස්ථ ගබඩාවකට පිළිබිඹු කළ යුතුය.
මිරාල්

12

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

ඔබේ සහකරුගේ හෝ ඔබ විසින් යෝජනා කරන ලද කාර්ය ප්‍රවාහයන්හි තේරුමක් නැති ගැටුම් ඔබට හමු නොවිය යුතුය. ඔබ සතුව තිබුණත්, ඔබ යෝජිත කාර්ය ප්‍රවාහයන් අනුගමනය කරන්නේ නම්, විසඳුමෙන් පසු 'බලහත්කාරයෙන්' තල්ලු කිරීම අවශ්‍ය නොවේ. එයින් ඇඟවෙන්නේ ඔබ තල්ලු කළ ශාඛාව ඔබ සැබවින්ම ඒකාබද්ධ කර නැති නමුත් දුරස්ථ ඉඟියෙන් පැවත එන ශාඛාවක් තල්ලු කිරීමට සිදු වී ඇති බවයි.

සිදුවූ දෙය ඔබ හොඳින් සොයා බැලිය යුතු යැයි මම සිතමි. ඔබ ප්‍රාදේශීය ශාඛාව නිර්මාණය කිරීම සහ එය නැවත ප්‍රාදේශීය ශාඛාවට ඒකාබද්ධ කිරීමට උත්සාහ කළ ස්ථානය අතර දුරස්ථ මාස්ටර් ශාඛාව වෙනත් කෙනෙකුට (හිතාමතාම හෝ නොකිරීමට) පුළුවන්ද?

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


ඔබ ඇඟවුම් කරන්නේ OP හට ඔහුගේ ක්‍රියාවලියේදී කිසියම් අනාවරණය නොවූ ප්‍රතිප්‍රහාරයක් හෝ වැරැද්දක් ඇති බවයි, නේද?
krosenvold

8

"ඔබ ශාඛා කිහිපයක් පමණක් ඇති තනි සංවර්ධකයෙකු වුවද, නැවත භාවිතා කිරීම හා නිසි ලෙස ඒකාබද්ධ කිරීම පුරුද්දක් කර ගැනීම වටී. මූලික වැඩ රටාව මෙසේ වනු ඇත:

  • පවත්නා A ශාඛාවෙන් B නව ශාඛාවක් සාදන්න

  • B ශාඛාවේ වෙනස්කම් එකතු කරන්න / කරන්න

  • A ශාඛාවෙන් යාවත්කාලීන කිරීම් නැවත ප්‍රතිස්ථාපනය කරන්න

  • B ශාඛාවේ සිට A ශාඛාවට වෙනස්කම් ඒකාබද්ධ කරන්න

https://www.atlassian.com/git/tutorials/merging-vs-rebasing/


7

මා නිරීක්ෂණය කළ දෙයින්, git merge මගින් ඒකාබද්ධ වීමෙන් පසුව පවා ශාඛා වෙන්ව තබා ගැනීමට නැඹුරු වන අතර නැවත ප්‍රතිස්ථාපනය කිරීමෙන් පසුව එය එක් ශාඛාවකට ඒකාබද්ධ වේ. දෙවැන්න වඩා පිරිසිදු ලෙස එළියට එන අතර, කලින් සඳහන් කළ පරිදි, ඒකාබද්ධ වීමෙන් පසුව පවා කුමන ශාඛාවට අයත් වන්නේ කුමන කොමිෂන් සභාද යන්න සොයා ගැනීම පහසු වනු ඇත.


4

Git සමඟ “නිවැරදි” කාර්ය ප්‍රවාහයක් නොමැත. ඔබේ බෝට්ටුවේ පාවෙන ඕනෑම දෙයක් භාවිතා කරන්න. කෙසේ වෙතත්, ශාඛා ඒකාබද්ධ කිරීමේදී ඔබට නිරන්තරයෙන් ගැටුම් ඇති වුවහොත් සමහර විට ඔබ ඔබේ උත්සාහයන් ඔබේ සෙසු සංවර්ධකයා (ය) සමඟ වඩා හොඳින් සම්බන්ධීකරණය කළ යුතුද? ඔබ දෙදෙනා එකම ලිපිගොනු සංස්කරණය කරමින් සිටින බවක් පෙනේ. එසේම, සුදු අවකාශය සහ උපසිරැසි වචන (එනම් “$ Id $” සහ වෙනත්) ගැන විමසිල්ලෙන් සිටින්න.


0

මම භාවිතා කරන්නේ ප්‍රතිවිකුණුම් වැඩ ප්‍රවාහය පමණි, මන්ද එය දෘශ්‍යමය වශයෙන් පැහැදිලි ය (GitKraken හි පමණක් නොව, Intellij සහ in හි ද gitk, නමුත් මම පළමුවැන්න වඩාත් නිර්දේශ කරමි): ඔබට ශාඛාවක් ඇත, එය ස්වාමියාගෙන් ආරම්භ වන අතර එය නැවත ස්වාමියා වෙත යයි . රූප සටහන පිරිසිදු හා ලස්සන වූ විට, කිසිවක් නිරයට නොයන බව ඔබ දැන ගනු ඇත .

රූප විස්තරය මෙහි ඇතුළත් කරන්න

මගේ කාර්ය ප්‍රවාහය ඔබෙන් බොහෝ දුරට සමාන ය, නමුත් එක් කුඩා වෙනසක් පමණි: squashමගේ ශාඛාවට පෙර rebaseමගේ ප්‍රාදේශීය ශාඛාවේ නවතම වෙනස්කම් සඳහා මම බැඳී සිටිමි master, මන්ද:

rebaseඑක් එක් කැපවීම මත පදනම්ව ක්රියා කරයි

එයින් අදහස් වන්නේ, ඔබට 15 ක් තිබේ නම් එකම රේඛාව වෙනස් කිරීමයි master කිරීමට කොමිස් 15 ක් තිබේ නම්, ඔබ ස්කොෂ් නොකරන්නේ නම් 15 වතාවක් පරීක්ෂා කළ යුතුය, නමුත් අවසාන ප්‍රති result ලය වැදගත් වන්නේ කුමක්ද?

ඉතින්, සමස්ත කාර්ය ප්‍රවාහය:

  1. ලොව පුරාවටම කිරීමට masterඔබට නවතම අනුවාදය ඇති බව සහතික කිරීමට හා අදින්න

  2. එතැන් සිට නව ශාඛාවක් සාදන්න

  3. එහි ඔබේ වැඩ කටයුතු කරන්න, ඔබට කිහිප වතාවක් නිදහසේ කැපවිය හැකි අතර දුරස්ථව තල්ලු කරන්න, කරදර නොවන්න, මන්ද එය ඔබේ ශාඛාවයි.

  4. කවුරුහරි ඔබට කිව්වොත්, "ඒයි, මගේ පීආර් / එම්ආර් අනුමත කර ඇත, දැන් එය මාස්ටර් සමඟ ඒකාබද්ධ වී ඇත", ඔබට ඒවා ලබා ගැනීමට / ඇද ගැනීමට හැකිය. ඔබට එය ඕනෑම වේලාවක හෝ 6 වන පියවරේදී කළ හැකිය.

  5. ඔබගේ සියලු වැඩ කිරීමෙන් පසු, ඒවා සිදු කරන්න, ඔබට කොමිස් කිහිපයක් තිබේ නම්, ඒවා ස්කොෂ් කරන්න (ඒවා සියල්ලම ඔබේ කාර්යය වන අතර, ඔබ කේත රේඛාවක් කොපමණ වාරයක් වෙනස් කළත් කමක් නැත; එකම වැදගත් දෙය අවසාන අනුවාදයයි). එය තල්ලු කරන්න හෝ නොවන්න, එය කමක් නැත.

  6. ලොව පුරාවටම කිරීමට master, pullනැවත ඔබ සතුව නවීන සහතික කිරීමට masterදේශීය. ඔබේ රූප සටහන මෙයට සමාන විය යුතුය:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

ඔබට පෙනෙන පරිදි, ඔබ සිටින්නේ ඔබේ ප්‍රාදේශීය ශාඛාවේ වන අතර එය යල්පැනගිය තත්වයකින් ආරම්භ masterවන අතර master(දේශීය හා දුරස්ථ) ඔබේ සගයාගේ වෙනස්කම් සමඟ ඉදිරියට ගොස් ඇත.

  1. ඔබේ ශාඛාව වෙත නැවත ගොස්, ස්වාමියා වෙත නැවත යන්න. ඔබ ගැටුම් විසඳීමට ඉතින්, දැන් ඔබ, එකම එක සිදු වනු ඇත එක් වරක් පමණක් (ඒ GitKraken, ඔබ පමණක් ඔබේ ශාඛා ඇදගෙන තිබේ. masterසහ "Rebase" තෝරා ගන්න; ඇයි මම වගේ තවත් හේතුවක්.) ඊට පස්සේ, ඔබ වනු ඇත මෙන්:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

  1. ඉතින් දැන්, masterඔබේ ශාඛාවේ වෙනස්කම් සමඟ ඒකාබද්ධව නවතම වෙනස්කම් සියල්ලම ඔබ සතුව ඇත . ඔබට දැන් ඔබගේ දුරස්ථයට තල්ලු කළ හැකි අතර, ඔබ මීට පෙර තල්ලු කර ඇත්නම්, ඔබට බලෙන් තල්ලු කිරීමට සිදුවනු ඇත; ඔබට වේගයෙන් ඉදිරියට යා නොහැකි බව Git ඔබට කියනු ඇත. එය සාමාන්‍යයි, නැවත ගෙවීම නිසා, ඔබ ඔබේ ශාඛාවේ ආරම්භක ස්ථානය වෙනස් කර ඇත. නමුත් ඔබ බිය නොවිය යුතුය: බලය බුද්ධිමත්ව භාවිතා කරන්න . අවසානයේදී, දුරස්ථය ද ඔබේ ශාඛාව වන බැවින් ඔබ masterයම් වැරැද්දක් කළත් ඔබට එය බලපාන්නේ නැත .

  2. PR / MR නිර්මාණය කර එය අනුමත වන තෙක් රැඳී සිටින්න, එවිට masterඔබේ දායකත්වය ලැබෙනු ඇත. සුභ පැතුම්! එම නිසා masterරූප සටහන පිරිසිදු කිරීම සඳහා ඔබට දැන් පරීක්ෂා කර බැලීමට , ඔබගේ වෙනස්කම් ඇද ගැනීමට සහ ඔබේ ප්‍රාදේශීය ශාඛාව මකා දැමිය හැකිය. ඔබ එය මාස්ටර් සමඟ ඒකාබද්ධ කරන විට මෙය සිදු නොකළහොත් දුරස්ථ ශාඛාව ද මකා දැමිය යුතුය.

අවසාන රූප සටහන නැවත පිරිසිදු හා පැහැදිලි ය:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

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.