Git ශාඛාවක් ස්වාමියා සමඟ ඒකාබද්ධ කිරීමට හොඳම (හා ආරක්ෂිත) ක්‍රමය කුමක්ද?


2120

වෙතින් නව ශාඛාවක් masterනිර්මාණය වේ, අපි එය හඳුන්වමු test.

masterවෙනත් ශාඛා සඳහා කැපවී හෝ නිර්මාණය කර පසුව ඒකාබද්ධ වන සංවර්ධකයින් කිහිප දෙනෙක් සිටිති master.

වැඩ කිරීමට දින testකිහිපයක් ගත වන අතර testඇතුළත කොමිස් සමඟ යාවත්කාලීනව තබා ගැනීමට ඔබට අවශ්‍ය යැයි කියමු master.

මම කරන්නේ git pull origin masterසිට test.

1 වන ප්‍රශ්නය: මෙය නිවැරදි ප්‍රවේශයද? වෙනත් සංවර්ධකයින්ට මා btw වැඩ කර ඇති ආකාරයටම එකම ලිපිගොනු වල පහසුවෙන් වැඩ කළ හැකිය.


මගේ වැඩ කටයුතු අවසන් කර testඇති අතර එය නැවත ඒකාබද්ධ කිරීමට මම සූදානම් master. මට සිතිය හැකි ක්‍රම දෙක මෙන්න:

ඒ:

git checkout test
git pull origin master
git push origin test
git checkout master
git pull origin test 

බී:

git checkout test
git pull origin master
git checkout master
git merge test

මම භාවිතා නොකරන්නේ --rebaseමගේ අවබෝධය අනුව, නැවත ප්‍රතිස්ථාපනය කිරීමෙන් වෙනස්කම් ලැබෙනු ඇති අතර ඒ මත මගේ ගොඩගැසෙනු ඇත master. එම නිසා අනෙක් පුද්ගලයින් විසින් සිදුකරන ලද වෙනස්කම් නැවත ලිවිය හැකිය .

2 වන ප්‍රශ්නය: මෙම ක්‍රම දෙකෙන් එකක් නිවැරදි ද? එහි ඇති වෙනස කුමක්ද?

මේ සියල්ලේ පරමාර්ථය වන්නේ testසිදුවෙමින් පවතින දේවල් සමඟ මගේ ශාඛාව යාවත්කාලීනව තබා ගැනීමයි. පසුව කාලරාමුව හැකිතාක් රේඛීයව තබා ගැනීමේ අපේක්ෂාවෙන් masterමට ඒවා නැවත ඒකාබද්ධ masterකළ හැකිය.


18
නැත .. නැවත සකස් කිරීම කිසි විටෙකත් නැවත ලියන්නේ නැත, එය උත්සාහ කරන්නේ පිරිසිදු ඉතිහාසයක් ලබා ගැනීමට ය. ස්වාමියා ප්රමාද ලක්ෂ්යය වෙත ඉතිහාසය නැවත අමුණන්න (හෝ ව්යාජ) විසින්
Junchen ලියු

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

Answers:


3011

මම මෙය කරන්නේ කෙසේද?

git checkout master
git pull origin master
git merge test
git push origin master

මට දුරස්ථ එකකින් දේශීය ශාඛාවක් තිබේ නම්, මෙම ශාඛාව හැර වෙනත් ශාඛා දුරස්ථය සමඟ ඒකාබද්ධ කිරීම මට පහසු නැත. මට තල්ලු කිරීමට අවශ්‍ය දේ ගැන මම සතුටු වන තුරු මම මගේ වෙනස්කම් තල්ලු නොකරමි, එසේම මම කිසිසේත්ම දේවල් තල්ලු නොකරමි, එය මට සහ මගේ දේශීය ගබඩාවට පමණි. ඔබේ විස්තරයේ එය පෙනේ, එය testඔබට පමණක්ද? එබැවින් එය ප්රකාශයට පත් කිරීමට හේතුවක් නැත.

git සැමවිටම ඔබගේ සහ අනෙක් අයගේ වෙනස්කම් වලට ගරු කිරීමට උත්සාහ කරයි --rebase. මට එය නිසි ලෙස පැහැදිලි කළ හැකි යැයි මම නොසිතමි, එබැවින් Git පොත දෙස බලන්න - නැවත සකස් කිරීම හෝ git-ready: කුඩා විස්තරයක් සඳහා නැවත ප්‍රතිස්ථාපනය කිරීමේ හැඳින්වීම. එය තරමක් සිසිල් ලක්ෂණයකි


2
git merge testමට දෙනවා fatal: 'test' does not point to a commit. මට git logපරීක්ෂණ ශාඛාවේ කැපවීමේ ස්ථානය සොයා බැලිය යුතු අතර , නැවත මාස්ටර් ශාඛාවට මාරු වී එසේ කරන්න git merge 0f37d3154abbf52a4cbbbb5109f08af6a7567234.
ඩන්කන්මූ

17
Un ඩන්කන්මූ හොඳයි, ඇත්ත වශයෙන්ම ශාඛාව testපැවතිය යුතුය. නිසැකවම, ඔබට ඒ වෙනුවට බැඳීම් හෑෂ් භාවිතා කළ හැකිය, නමුත් සාමාන්‍යයෙන් ශාඛා නාමය භාවිතා කිරීම පහසුය. අභ්‍යන්තරව එය HEADශාඛාවේ හැෂ් ලබා ගනී .
කිං ක්‍රන්ච්

44
දුරස්ථයෙන් නවතම වෙනස්කම් ලබා ගැනීමට. ඔබ තනිවම වැඩ කරන්නේ නම් සහ එක් පද්ධතියක් සමඟ පමණක් ගැටළුවක් නොමැත. නමුත් වෙනත් පද්ධතියකින් (බොහෝ විට වෙනත් සංවර්ධකයෙකුගෙන්) වෙනස්කම් සිදු වූ විට, ඔබ ඔබේ ඒකාබද්ධය පසුපසට තල්ලු කිරීමට උත්සාහ කළ විගස ගැටුමක් දකිනු ඇත (4 වන පියවර). දැන් ඇති එකම විසඳුම නම්, ඔබේ දේශීය ස්වාමියා දුරස්ථ මාස්ටර් සමඟ ඒකාබද්ධ කිරීමයි. එබැවින් ඒකාබද්ධ වීමට පෙර අදින්න හොඳ අදහසකි
කිං ක්‍රන්ච්

7
"ඔබේ විස්තරයේ දී, එම පරීක්ෂණය ඔබට පමණක් ද? එබැවින් එය ප්‍රකාශයට පත් කිරීමට හේතුවක් නැත." නිදසුනක් ලෙස, එම සේවාදායකය ඔබේ දේශීය ධාවකය අසමත් වීමට එරෙහිව උපස්ථයක් ලබා දෙන්නේ නම් හෝ ඔබට උපස්ථයක් කිරීමට වෙනත් ක්‍රමයක් නොමැති නම්, ඔබේ ප්‍රාදේශීය ශාඛාව සේවාදායකයක් වෙතට තල්ලු කිරීමට ඔබට අවශ්‍ය විය හැකිය.
එරික්

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

404

මෙය ඉතා ප්‍රායෝගික ප්‍රශ්නයකි, නමුත් ඉහත සියලුම පිළිතුරු ප්‍රායෝගික නොවේ.

මෙන්

git checkout master
git pull origin master
git merge test
git push origin master

මෙම ප්‍රවේශයට කරුණු දෙකක් තිබේ :

  1. එය අනාරක්ෂිත ය, මන්ද පරීක්ෂණ ශාඛාව සහ ප්‍රධාන ශාඛාව අතර ගැටුම් තිබේදැයි අපි නොදනිමු.

  2. එය සියලු පරීක්ෂණ එක් මාස්ටර් මත ඒකාබද්ධ කිරීමක් බවට “මිරිකීම” කරයි; එනම් ප්‍රධාන ශාඛාවේ, පරීක්ෂණ ශාඛාවේ සියලුම වෙනස්වීම් ල logs ු-සටහන් අපට නොපෙනේ.

එබැවින්, යම් ගැටුම් ඇතිවිය හැකි යැයි අප සැක කරන විට, අපට පහත දැක්වෙන git මෙහෙයුම් තිබිය හැකිය:

git checkout test
git pull 
git checkout master
git pull
git merge --no-ff --no-commit test

mergeපෙර පරීක්‍ෂා කරන්න commit, වේගයෙන් ඉදිරියට යාමෙන් වළකින්න --no-ff,

ගැටුම් ඇති වුවහොත්, ගැටුම් git statusපිළිබඳ විස්තර පරීක්ෂා කර විසඳීමට උත්සාහ කළ හැකිය

git status

අපි ගැටුම් නිරාකරණය කළ පසු, හෝ ගැටුමක් නොමැති නම්, අපි commitසහ pushඔවුන්

git commit -m 'merge test branch'
git push

නමුත් මේ ආකාරයෙන් පරීක්ෂණ ශාඛාව තුළ සටහන් වී ඇති වෙනස්කම් නැති වී යන අතර, එමඟින් ප්‍රධාන ශාඛාව අනෙකුත් සංවර්ධකයින්ට ව්‍යාපෘතියේ ඉතිහාසය තේරුම් ගැනීමට අපහසු වනු ඇත.

එබැවින් හොඳම ක්‍රමය වන්නේ අප rebaseඒ වෙනුවට භාවිතා කළ යුතු බවයි merge(මෙම අවස්ථාවේදී අපි ශාඛා ගැටුම් විසඳා ඇති බව සිතමු).

උසස් මෙහෙයුම් සඳහා පහත දැක්වෙන්නේ එක් සරල නියැදියකි, කරුණාකර http://git-scm.com/book/en/v2/Git-Branching-Rebasing වෙත යොමු වන්න.

git checkout master
git pull
git checkout test
git pull
git rebase -i master
git checkout master
git merge test

ඔව්, ඔබ ඉහළට ගිය පසු, ටෙස්ට් ශාඛාවේ සියලුම කටයුතු මාස්ටර් ශාඛාවේ ප්‍රධානියා වෙත ගෙන යනු ලැබේ. නැවත ප්‍රතිස්ථාපනය කිරීමේ ප්‍රධාන වාසිය නම් ඔබට රේඛීය හා වඩා පිරිසිදු ව්‍යාපෘති ඉතිහාසයක් ලබා ගැනීමයි.

ඔබ වළක්වා ගත යුතු එකම දෙය නම්: rebaseප්‍රධාන ශාඛාව වැනි කිසි විටෙකත් පොදු ශාඛාවේ භාවිතා නොකරන්න.

පහත සඳහන් ආකාරයේ මෙහෙයුම් කිසි විටෙකත් නොකරන්න :

git checkout master
git rebase -i test

Https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing සඳහා විස්තර

උපග්රන්ථය:

  • මෙහෙයුම් නැවත ප්‍රතිස්ථාපනය කිරීම පිළිබඳව ඔබට විශ්වාස නැත්නම්, කරුණාකර යොමු වන්න: https://git-scm.com/book/en/v2/Git-Branching-Rebasing

5
පසුකාලීනව මාස්ටර් සමඟ ඒකාබද්ධ වීම සඳහා පරීක්ෂණ ශාඛාව නැවත ප්‍රතිස්ථාපනය කිරීම යා යුතු මාර්ගය බව මම එකඟ වෙමි. අනෙක් පිළිතුරු පවා නිවැරදියි, මෙය ශාඛා පරීක්ෂණයේ වෙනස්වීම් පිළිබඳ ඉතිහාසය ස්වාමියාගේ හිසෙහි තබා ගනු ඇත. අනුවාද පාලන ක්‍රමයේ අරමුණ වන “ඔබට ලයිනර් සහ වඩා පිරිසිදු ව්‍යාපෘතියක් ලැබෙනු ඇත”
le0diaz

16
"එය එක් ආරක්ෂිත ක්‍රමයක් නොවේ, පරීක්ෂණ ශාඛාව සහ ප්‍රධාන ශාඛාව අතර කිසියම් ගැටුමක් ඇති බව අප නොදන්නා නිසා" යන ප්‍රකාශය සත්‍ය නොවේ: කෙනෙකුට සෑම විටම ඒකාබද්ධ කිරීම නතර කළ හැකිය. ගැටුම් නොමැති වුවද, තල්ලු නොකෙරෙන තාක් කල් ඔබට අවසාන දේශීය බැඳීම අහෝසි කළ හැකිය. Git පිළිබඳ නිවැරදි අවබෝධයකින් තොරව සමහර දේවල් ටිකක් බියජනක හෝ අපැහැදිලි බවක් පෙනෙන්නට තිබුණත් “අනාරක්ෂිත” ඕනෑම ආකාරයකින් වැරදිය. වැරදි තොරතුරු සමඟ අන් අය පටලවා නොගැනීමට කරුණාකර ප්‍රවේශම් වන්න.
පෝල් වැන් ලීවන්

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

3
ඇයි මම ප්‍රතික්ෂේප කරන්නේ?
මුෂිපීස්

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

90

ප්‍රතික්ෂේප කිරීමක් හෝ ඒකාබද්ධ කිරීමක් කිසිවෙකුගේ වෙනස්කම් නැවත ලිවිය යුතු නොවේ (ගැටුමක් නිරාකරණය කිරීමේදී ඔබ එසේ කිරීමට තෝරා නොගත්තොත්).

සංවර්ධනය කිරීමේදී සුපුරුදු ප්‍රවේශය නම්

git checkout master
git pull
git checkout test
git log master.. # if you're curious
git merge origin/test # to update your local test from the fetch in the pull earlier

ඔබ නැවත ස්වාමියා සමඟ ඒකාබද්ධ වීමට සූදානම් වූ විට,

git checkout master
git log ..test # if you're curious
git merge test
git push

ඒකාබද්ධ කිරීමේදී යමක් බිඳ දැමීම ගැන ඔබ කනස්සල්ලට පත්ව සිටී නම්, ඔබ git merge --abortවෙනුවෙන් තිබේද?

ඒකාබද්ධ කිරීමේ මාධ්‍යයක් ලෙස තල්ලු කර අදින්න මෝඩකමකි. ඔබ පරීක්‍ෂණය ආරම්භයට තල්ලු කරන්නේ ඇයිදැයි මට විශ්වාස නැත.


1
මෙම ක්‍රියාවලිය මඟින් කොමිස් ගණන වැඩි වනු ඇත, ඔබ ශාඛා අතර මාරු වන සෑම අවස්ථාවකම ඔබේ ශාඛාව කැප කළ යුතුය.
iBug

2
කුමන? ඔබ ශාඛා මාරු කරන සෑම අවස්ථාවකම එය කොමිස් ගණන වැඩි කරනු ඇතැයි ඔබ පවසනවාද? නැත්නම් ඔබ කියන්නේ ඔබ ශාඛා මාරු කරන සෑම අවස්ථාවකම “ඔබේ ශාඛාව කැප කළ යුතු” බවයි? පළමුවැන්න අසත්‍යය වන අතර දෙවැන්නෙහි තේරුම කුමක්දැයි මට විශ්වාස නැත.
raylu

පිටවීමට පෙර, ඔබ ශාඛාවක් කළ යුතුය. මා කියන්නේ
එයයි

11
ඔබ එසේ නොකරයි: එය (එක් දෙයක්) git stashසඳහා ය.
msanford

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

42

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

KingCrunches පිළිතුරට අමතරව , මම භාවිතා කිරීමට යෝජනා කරමි

git checkout master
git pull origin master
git merge --squash test
git commit
git push origin master

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

සංස්කරණය කරන්න: ඔබ උනන්දු විය හැකිය

එබැවින් GitHub හි, මම විශේෂාංග ශාඛාවක් සඳහා පහත සඳහන් දේ කරමි mybranch .

නවතම මූලාරම්භය ලබා ගන්න

$ git checkout master
$ git pull origin master

ඒකාබද්ධ කිරීමේ මූලික හැෂ් සොයා ගන්න:

$ git merge-base mybranch master
c193ea5e11f5699ae1f58b5b7029d1097395196f

$ git checkout mybranch
$ git rebase -i c193ea5e11f5699ae1f58b5b7029d1097395196f

දැන් පළමුවැන්න පමණක් බවට වග බලා ගන්න pick, ඉතිරිය s:

pick 00f1e76 Add first draft of the Pflichtenheft
s d1c84b6 Update to two class problem
s 7486cd8 Explain steps better

ඊළඟට ඉතා හොඳ කැපවීමේ පණිවිඩයක් තෝරාගෙන GitHub වෙත තල්ලු කරන්න. අදින්න ඉල්ලීම කරන්න.

අදින්න ඉල්ලීම ඒකාබද්ධ කිරීමෙන් පසුව, ඔබට එය දේශීයව මකා දැමිය හැකිය:

$ git branch -d mybranch

සහ GitHub හි

$ git push origin :mybranch

එය ප්‍රධාන ශාඛාවේ එක් කැපවීමක් පමණක් විය යුතුය ”, අවශ්‍යයෙන්ම නොවේ; ඔබට ඉතිහාසය තබා ගැනීමට අවශ්‍ය විය හැකිය
කොකෝවාල්ලා

ෂුවර්. නමුත් සරලවම
මාටින් තෝමා

මම හිතන්නේ - පළමු-දෙමාපිය හොඳම විසඳුම බව පෙනේ. davidchudzicki.com/posts/first-parent
bkribbs

7

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

යාවත්කාලීනව මාස්ටර් සහ ශාඛාව ලබා ගන්න:

git checkout master
git pull --rebase origin master
git checkout <branch_name>
git pull --rebase origin <branch_name>

ශාඛාව මාස්ටර්ට ඉහළින් ඒකාබද්ධ කරන්න:

git checkout <branch_name>
git rebase master

වෛකල්පිත: ඔබ පුනරාවර්තනය අතරතුර ගැටුම් වලට මුහුණ දෙන්නේ නම්:

පළමුව, ගොනුවේ ගැටුම් නිරාකරණය කරන්න. ඉන්පසු:

git add .
git rebase --continue

ඔබේ ප්‍රතිස්ථාපිත ශාඛාව තල්ලු කරන්න:

git push origin <branch_name>

දැන් ඔබට විකල්ප දෙකක් තිබේ:

  • අ) PR එකක් සාදන්න (උදා: GitHub මත) සහ එය UI හරහා ඒකාබද්ධ කරන්න
  • ආ) විධාන රේඛාවට ආපසු ගොස් ශාඛාව මාස්ටර් බවට ඒකාබද්ධ කරන්න
git checkout master
git merge --no-ff <branch_name>
git push origin master

සිදු විය.


6

කණ්ඩායම සමඟ මගේ රැකියාවේදී මම භාවිතා කරන කාර්ය ප්‍රවාහය මෙයයි. ඔබ විස්තර කළ පරිදි තත්වය. පළමුවෙන්ම, මම වැඩ නිම කළ පසු testමා testශාඛාවේ වැඩ කරන කාලය තුළ මාස්ටර්ට එකතු කර ඇති ඕනෑම දෙයක් ඇද ගැනීමට මාස්ටර් සමඟ නැවත පැමිණේ .

git pull -r upstream master

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


3
git checkout master
git pull origin master
# Merge branch test into master
git merge test

ඒකාබද්ධ කිරීමෙන් පසු, ගොනුව වෙනස් කර ඇත්නම්, ඔබ එය ඒකාබද්ධ කරන විට එය "ගැටුම් නිරාකරණය" දෝෂය හරහා සිදු වේ.

එබැවින් ඔබ මුලින්ම ඔබේ සියලු ගැටුම් නිරාකරණය කර ගත යුතුය, එවිට ඔබ නැවත ඔබගේ සියලු වෙනස්කම් සිදු කර තල්ලු කළ යුතුය

git push origin master

ටෙස්ට් ශාඛාවේ වෙනස්කම් සිදුකළේ කවුරුන්ද යන්න වඩා හොඳය, මන්ද ඔහු කර ඇති වෙනස්කම් මොනවාදැයි ඔහු දැන සිටියේය.


3

මම නැවත භාවිතා කිරීමේ ක්‍රමය භාවිතා කරමි. බොහෝ දුරට එය ඔබේ නඩුව අර්ථාන්විතව පිළිබිඹු කරන බැවිනි, එනම්. ඔබට කිරීමට අවශ්‍ය වන්නේ ඔබේ වර්තමාන ශාඛාවේ තත්වය ප්‍රබෝධමත් කිරීම සහ එය නවතම දේ මත පදනම් වූවක් ලෙස “මවාපෑම” ය.

එබැවින්, පරීක්ෂා කිරීමකින් තොරව master, මම:

git fetch origin
git rebase -i origin/master
# ...solve possible conflicts here

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


2

@ කිං ක්‍රන්ච්ගේ පිළිතුර බොහෝ අවස්ථාවන්හිදී ක්‍රියාත්මක විය යුතුය. පැන නැගිය හැකි එක් ගැටළුවක් නම්, ඔබ වෙනත් යන්ත්‍රයක සිට නවතම දේ පරීක්ෂණයෙන් ඉවත් කිරීමට අවශ්‍ය වීමයි. එබැවින්, පළමුව පරීක්ෂණය ඇද ගැනීමට මම නිර්දේශ කරමි. සංශෝධනය මේ වගේ ය:

git checkout test
git pull
git checkout master
git pull origin master
git merge test
git push origin master

0

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

git checkout master
git pull

පළමුව පරීක්ෂා කිරීම අවශ්ය නොවේ; rebase නිවැරදි දේ තර්ක දෙකකින් කරයි

git rebase master test  

git checkout master
git merge test

පෙරනිමියෙන් git push මෙහි සහ දුරස්ථයේ ඇති සියලුම ශාඛා තල්ලු කරයි

git push
git checkout test

0

මාතෘකාව "හොඳම ක්‍රමය" ලෙස පවසන පරිදි, ඉවසීම ඒකාබද්ධ කිරීමේ උපාය මාර්ගය සලකා බැලීම හොඳ අදහසක් යැයි මම සිතමි .

සිට: https://git-scm.com/docs/merge-strategies

මෙම විකල්පය සමඟ, 'ඒකාබද්ධ-පුනරාවර්තන' වැදගත් නොවන ගැලපුම් රේඛා නිසා සමහර විට සිදුවන වැරදි වළක්වා ගැනීමට ටිකක් අමතර කාලයක් වැය කරයි (උදා: වෙනස් ශ්‍රිත වලින් වරහන්). ඒකාබද්ධ කළ යුතු අතු වල් බිහි වූ විට මෙය භාවිතා කරන්න. Git-diff [1] - ඉවසීමද බලන්න.

භාවිතය:

git fetch
git merge -s recursive -X patience origin/master

Git අන්වර්ථය

මම මේ සඳහා සෑම විටම අන්වර්ථයක් භාවිතා කරමි, උදා: එක් වරක් ධාවනය කරන්න:

 git config --global alias.pmerge 'merge -s recursive -X patience'

දැන් ඔබට කළ හැකිය:

git fetch
git pmerge origin/master

0

මෙය GitLab වෙතින්: උපදෙස් අනුගමනය කරන්න:

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


0

ශාඛා සංවර්ධනය හා විශේෂාංග අනුව මම පිළිතුරු දෙන්නෙමි,

ඔබ විශේෂාංග ශාඛාවක සිටින අතර පහත දැක්වෙන විධානයන් සමඟ එය යාවත්කාලීන කිරීමට අවශ්‍ය නම්: git checkout මඟින් git pull git checkout feature / xyz git merge develop

දැන් ඔබගේ අංගය සංවර්ධනය සමඟ යාවත්කාලීන කර ඇති අතර ඔබට ඔබගේ වෙනස්කම් තල්ලු කළ හැකිය.

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.