Git: මාස්ටර් මත අස්ථිර / නොකල වෙනස්කම් වලින් ශාඛාවක් සාදන්න


1006

සන්දර්භය: මම සරල අංගයක් එකතු කරමින් මාස්ටර් වැඩ කරමින් සිටිමි. මිනිත්තු කිහිපයකට පසු මට වැටහී ඇත්තේ එය එතරම් සරල නොවන බවත් නව ශාඛාවකට වැඩ කිරීම වඩා හොඳ විය යුතු බවත්ය.

මෙය සැමවිටම මට සිදුවන අතර වෙනත් ශාඛාවකට මාරුවිය යුතු ආකාරය ගැන මා දන්නේ නැත. මම හිතන්නේ git stash && git stash branch new_branchඑය සරලවම ඉටු කර ගත හැකි නමුත් මට ලැබෙන්නේ මෙයයි:

~/test $ git status
# On branch master
nothing to commit (working directory clean)

~/test $ echo "hello!" > testing 

~/test $ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   testing
#
no changes added to commit (use "git add" and/or "git commit -a")

~/test $ git stash
Saved working directory and index state WIP on master: 4402b8c testing
HEAD is now at 4402b8c testing

~/test $ git status
# On branch master
nothing to commit (working directory clean)

~/test $ git stash branch new_branch
Switched to a new branch 'new_branch'
# On branch new_branch
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   testing
#
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (db1b9a3391a82d86c9fdd26dab095ba9b820e35b)

~/test $ git s
# On branch new_branch
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   testing
#
no changes added to commit (use "git add" and/or "git commit -a")

~/test $ git checkout master
M   testing
Switched to branch 'master'

~/test $ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   testing
#
no changes added to commit (use "git add" and/or "git commit -a")

මෙය ඉටු කර ගැනීමට ක්‍රමයක් තිබේදැයි ඔබ දන්නවාද?


1
ඔබේ ගැටලුවට සරල විසඳුමක් තිබුණද, ඔබට ලැබෙන ප්‍රති result ලයෙන් ඔබට අවශ්‍ය දේට වඩා වෙනස් වන්නේ කුමක්දැයි ඔබට සඳහන් කළ හැකිද?
ගෞතියර්

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

1
මගේ සංස්කරණය කළ පිළිතුර බලන්න. ඔබට පිරිසිදු ස්වාමියෙකු පරීක්ෂා කිරීමට අවශ්‍ය නම් නව ශාඛාව තුළ ඔබේ දේශීය වෙනස්කම් සිදු කළ යුතුය. දේශීය වෙනස්කම් යනු වර්තමාන HEAD සහ තැටියේ ඇති ඔබගේ ගොනු අතර ඇති වෙනස්කම් පමණි. දේශීය ලිපිගොනු වල මෙම වෙනස්කම් අනුවාදගත කර නැත, ඔබට පසුව ඒවා ලබා ගැනීමට අවශ්‍ය නම් ඒවා කොහේ හෝ සුරැකීමට git ට පැවසිය යුතුය.
ගෞතියර්

4
Git
CL

Answers:


1222

ගොඩගැසීමට අවශ්‍ය නැත.

git checkout -b new_branch_name

ඔබගේ දේශීය වෙනස්කම් ස්පර්ශ නොකරයි. එය වර්තමාන HEAD වෙතින් ශාඛාව නිර්මාණය කර එහි HEAD සකසයි. ඉතින් මම හිතන්නේ ඒක තමයි ඔයාට ඕනේ.

--- පිටවීමේ මාස්ටර්ගේ ප්‍රති result ලය පැහැදිලි කිරීමට සංස්කරණය කරන්න ---

checkout masterඔබගේ වෙනස්කම් ඉවත නොදමන නිසා ඔබ ව්‍යාකූල වී තිබේද?

වෙනස්කම් දේශීය පමණක් බැවින්, ඔබට ඒවා පහසුවෙන් නැති කර ගැනීමට git කැමති නැත. ශාඛාව වෙනස් කිරීමෙන් පසු, git ඔබේ දේශීය වෙනස්කම් නැවත ලියන්නේ නැත. ඔබේ ප්‍රති result ලය checkout master:

M   testing

, එයින් අදහස් වන්නේ ඔබේ වැඩ කරන ලිපිගොනු පිරිසිදු නොවන බවයි. git මඟින් HEAD වෙනස් කළ නමුත් ඔබේ දේශීය ලිපිගොනු නැවත ලියන්නේ නැත. ඔබ සක්‍රීයව සිටියද, ඔබගේ අවසාන තත්වය ඔබගේ දේශීය වෙනස්කම් තවමත් පෙන්වන්නේ එබැවිනි master.

ඔබට ඇත්ත වශයෙන්ම දේශීය වෙනස්කම් ඉවත දැමීමට අවශ්‍ය නම්, ඔබට පිටවීම බල කළ යුතුය -f.

git checkout master -f

ඔබගේ වෙනස්කම් කිසි විටෙකත් සිදු නොවූ හෙයින්, ඔබට ඒවා අහිමි වනු ඇත.

ඔබේ ශාඛාවට ආපසු යාමට උත්සාහ කරන්න, ඔබේ වෙනස්කම් සිදු කරන්න, ඉන්පසු ස්වාමියා නැවත පරීක්ෂා කරන්න.

git checkout new_branch
git commit -a -m"edited"
git checkout master
git status

Mපළමු පිටවීමෙන් පසුව ඔබට පණිවිඩයක් ලැබිය යුතුය , නමුත් පසුව එය සිදු නොවේ checkout master, git statusවෙනස් කළ ලිපිගොනු නොපෙන්විය යුතුය.

--- වැඩ කරන නාමාවලිය (දේශීය ලිපිගොනු) පිළිබඳ ව්‍යාකූලතා ඉවත් කිරීම සඳහා සංස්කරණය කරන්න ---

ඔබගේ පළමු අදහස් දැක්වීමට පිළිතුරු වශයෙන්, දේශීය වෙනස්කම් පමණක් ... හොඳයි, දේශීය. Git මඟින් ඒවා ස්වයංක්‍රීයව සුරකිනු නොලැබේ, පසුව ඒවා සුරැකීමට ඔබ එය පැවසිය යුතුය. ඔබ වෙනස්කම් සිදු කර ඒවා පැහැදිලිව කැප නොකරන්නේ නම් හෝ ඒවා සංස්කරණය නොකරන්නේ නම්, git ඒවා අනුවාද නොකරනු ඇත. ඔබ HEAD ( checkout master) වෙනස් කරන්නේ නම්, සුරකින ලද බැවින් දේශීය වෙනස්කම් නැවත ලියනු නොලැබේ.


34
මෙහි ඇති අවුල් සහගත කාරණය නම්, එම Git හි මෑන් පිටුවෙහි සඳහන් වන්නේ git checkout“දර්ශකයේ හෝ නිශ්චිත ගසෙහි අනුවාදයට ගැලපෙන පරිදි වැඩ කරන ගසෙහි ගොනු යාවත්කාලීන කරන” බවයි. ඒ ඔබේ ගොනු පද්ධතිය ඔබේ වෙනස්කම් ඇත උපකල්පනය ගොස් පසුව. ඒවා නැවත ලබා ගැනීමට කිසිදු අවස්ථාවක් නොමැතිව. ඔවුන් එසේ නොකරන බව ඔබ පැවසුවද, මෙය තවමත් නරක හැඟීමක් ඉතිරි කරයි. මම මේ විශ්වාස කරන්නේ නැහැ සියලු දී . එක්කෝ ප්‍රලේඛනය ඇත්තෙන්ම නරක හෝ git හි පෙරනිමි හැසිරීම ඇත්තෙන්ම භයානක ය. මෙම අවස්ථාවේ දී ඔබේ වෙනස්කම් නැති කර ගැනීමට ඔබට අවශ්‍ය නැති බව හඳුනා ගැනීමට යමෙකුට “ස්වයංක්‍රීය” ur ෂධයක් කෙරෙහි විශ්වාසය තැබිය යුතු නැත.
Evi1M4chine

17
ඔබගේ දේශීය වෙනස්කම් නැවත ලියන බැඳීමක් ඔබ පරීක්ෂා කරන්නේ නම් (වර්තමාන බැඳීම සහ ඉලක්කගත බැඳීම අතර ඉතිහාසය ඔබේ දේශීයව වෙනස් කරන ලද ලිපිගොනු ස්පර්ශ කරන්නේ නම්), git ප්‍රතික්ෂේප කරයි. checkoutඔබගේ දේශීය වෙනස්කම් සමඟ ගැටෙන්නේ නැතිනම් පමණක්, පිටවීම ක්‍රියාත්මක වන අතර දේශීය වෙනස්කම් පමණක් ඉතිරි වේ. නරක හැඟීම මට වැටහී ඇති නමුත්, man පිටුව සමහර විට "වැඩ කරන ගසෙහි වෙනස් නොකළ ගොනු යාවත්කාලීන කරයි" යනුවෙන් පැවසිය යුතුය. Git අනෙක් අතට දේශීය වෙනස්කම් නැති කර ගැනීම පහසු නොකරයි. git checkoutඑක්කෝ ඔබේ දේශීය වෙනස්කම් වලට පමණක් ඉඩ දෙන්න, නැතහොත් ගැටුමක් ඇත්නම් එය ප්‍රතික්ෂේප කරයි.
ගෞතියර්

1
හොඳයි, එහි දේශීය වෙනස්කම් සිදු නොකර මම වෙනත් ශාඛාවකට පිවිසෙන්නේ කෙසේද?
ア レ ッ ク ス

5
Lex ඇලෙක්ස් git checkout <other_branch> -f. අනතුරු ඇඟවීමකින් තොරව ඔබගේ දේශීය වෙනස්කම් ඔබට අහිමි වනු ඇත.
ගෞතියර්

2
@ Evi1M4chine පළමු එක. ලේඛගතකිරීම වෙයි ඇත්තටම නරක.
Qwertie

62

උත්සාහ කරන්න:

git stash
git checkout -b new-branch
git stash apply

6
මෙය තනිවම 'git checkout -b new-branch' කිරීමට වඩා වෙනස්ද?
ඒඩ්‍රියන් මවුට්

පිළිතුර මුලින් ලියා ඇති විට යැයි මම නොසිතමි, නමුත් මම වැරදියි. අවාසනාවකට මගේ සේවා තත්වය නිසා, මම පසුගිය වසර කිහිපය තුළ කාර්ය සාධනය භාවිතා කර ඇති බැවින් එහි නිරවද්‍යතාවය මට දැන් සහතික කළ නොහැක.
ග්‍රාන්ට් ලිම්බර්ග්

7
නැතහොත් අවසාන පියවර දෙක වෙනුවට: git stash branch නව ශාඛාව
rethab

1
git stash තවදුරටත් අවශ්‍ය නොවේ
kory

ඔබට දැනටමත් පවතින ශාඛාවක් ඇති විට ඔබේ සියලු දේ තැබීමට අවශ්‍ය නම්, ස්ටෑෂ් මට අර්ථවත් කරයි: (අවසානයේදී git fetch --all; දුරස්ථ ශාඛාව ආරම්භයට ලබා ගැනීම සඳහා) git stash; git checkout <existing-branch>; git stash අදාළ වේ;
Paolof76

24

ඔබට කළ හැකි කරුණු දෙකක්:

git checkout -b sillyname
git commit -am "silly message"
git checkout - 

හෝ

git stash -u
git branch sillyname stash@{0}

( git checkout -<- ඉර ඉර යනු ඔබ කලින් සිටි ශාඛාවේ කෙටිමඟකි)

( git stash -u<- -uඑය ද අස්ථායී වෙනස්කම් සිදු කරන මාධ්‍යයන් වේ)


7

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

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


එමඟින් නව ශාඛාව නිර්මාණය කිරීමට පෙර වෙනස්කම් සිදු වන අතර එමඟින් ඒවා නොපවතිනු ඇත (මැක් ඕඑස් හි 223 අනුවාදය)
ප්‍රනාන්දු ගාලෙගෝ

2

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

git checkout -b branch_name

මෙය ඔබගේ වර්තමාන ශාඛාවෙන් නව ශාඛාවක් නිර්මාණය කරනු ඇත (එය ප්‍රධාන යැයි උපකල්පනය කර), නොගැලපෙන වෙනස්කම් පිටපත් කර නව ශාඛාවට මාරුවන්න.

ඔබගේ වෙනස්කම් නව ශාඛාවට යොමු කරන්න.

git commit -m "First commit"

නව ශාඛාවක් නිර්මාණය වී ඇති බැවින්, එය දුරස්ථයට තල්ලු කිරීමට පෙර, ඔබ ඉහළට සැකසිය යුතුය. පහත දැක්වෙන විධානය භාවිතා කර උඩුගං බලා එය දුරස්ථයට තල්ලු කරන්න.

git push --set-upstream origin feature/feature/NEWBRANCH

ඔබ මෙම විධානයට පහර දුන් පසු, දුරස්ථයේ නව ශාඛාවක් නිර්මාණය වන අතර ඔබේ නව ප්‍රාදේශීය ශාඛාව දුරස්ථයට තල්ලු වේ.

දැන්, ඔබට කළ නොහැකි වෙනස්කම් ප්‍රධාන ශාඛාවෙන් ඉවත දැමීමට අවශ්‍ය නම්, භාවිතා කරන්න:

git checkout master -f

මෙය පිටවීමේදී නොගැලපෙන දේශීය වෙනස්කම් ඉවත දමනු ඇත.


පිළිගත් පිළිතුර සමඟ යම් අතිච්ඡාදනයන් පැවතියද, මෙය පියවරෙන් පියවර උපදෙස් මගින් සරල පියවරක් සපයන අතර නව ශාඛාවක් දුරස්ථව තල්ලු කිරීමට අවශ්‍ය මෙහෙයුම් ද ඇතුළත් වේ. සරල, පැහැදිලි සහ ප්‍රයෝජනවත්.
ක්ජාර්තාන්

1

වින්ඩෝස් සඳහා වන නවතම GitHub සේවාදායකයා තුළ , ඔබ විසින් වෙනස් නොකළ වෙනස්කම් තිබේ නම්, නව ශාඛාවක් නිර්මාණය කිරීමට තෝරා ගන්න. මෙම නිශ්චිත අවස්ථාව හැසිරවිය යුතු ආකාරය එය ඔබෙන් විමසයි:

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

ඔබ ශාඛාවද මාරු කළහොත් එය අදාළ වේ.

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.