මම දැනටමත් ප්‍රතිනිර්මාණය කිරීම ආරම්භ කර ඇත්නම්, කොමිස් දෙකක් එකකට ඒකාබද්ධ කරන්නේ කෙසේද?


1172

මම කොමිස් 2 ක් 1 ට ඒකාබද්ධ කිරීමට උත්සාහ කරමි, එබැවින් මම ගිට් සූදානම්ව සිට “ප්‍රතිචක්‍රීකරණය සමඟ කොටු කිරීම” අනුගමනය කළෙමි .

මම දිව්වා

git rebase --interactive HEAD~2

එහි ප්‍රති ing ලයක් ලෙස ඇති සංස්කාරකයේ, මම වෙනස් pickකර squashපසුව සුරැකීම අත්හරින්නෙමි, නමුත් දෝෂය සමඟ නැවත ගෙවීම අසමත් වේ

පෙර කැපවීමකින් තොරව 'ස්කොෂ්' කළ නොහැක

දැන් මගේ වැඩ වෘක්ෂය මෙම තත්වයට පත්ව ඇති හෙයින්, මට යථා තත්ත්වයට පත්වීමේ ගැටලුවක් තිබේ.

විධානය git rebase --interactive HEAD~2අසමත් වන්නේ:

අන්තර් ක්‍රියාකාරී නැවත ආරම්භ කිරීම දැනටමත් ආරම්භ කර ඇත

සහ git rebase --continueඅසමත් වේ

පෙර කැපවීමකින් තොරව 'ස්කොෂ්' කළ නොහැක


22
මමත් මේකට ගැහුවා. මගේ වැරැද්ද සිදුවී ඇත්තේ git rebase -i විසින් git log හි ප්‍රතිවිරුද්ධ අනුපිළිවෙලෙහි ලැයිස්තුගත කිරීම නිසාය; නවතම කැපවීම පතුලේ!
lmsurprenant


Answers:


1752

සාරාංශය

දෝෂ පණිවිඩය

පෙර කැපවීමකින් තොරව 'ස්කොෂ්' කළ නොහැක

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

නිවැරදි කරන්න

පළමුව ඔබ ආරම්භ කළ ස්ථානයට ආපසු යන්න

$ git rebase --abort

ඔබේ ඉතිහාසය යැයි කියන්න

$ git log --pretty=oneline
a931ac7c808e2471b22b5bd20f0cad046b1c5d0d c
b76d157d507e819d7511132bdb5a80dd421d854f b
df239176e1a2ffac927d8b496ea00d5488481db5 a

එනම්, a යනු පළමු කැපවීමයි, පසුව ආ, අවසානයේ ඇ. C කැපීමෙන් පසු අපි b සහ c එකට ස්කොෂ් කිරීමට තීරණය කරමු:

(සටහන: බොහෝ වේදිකාවල පෙරනිමියෙන් git logඑහි ප්‍රතිදානය පේජරයකට පයිප්ප ධාවනය කරයි. පේජරයෙන් lessඉවත් වී ඔබේ විධාන විමසුමට ආපසු යාමට qයතුර ඔබන්න.)

ධාවනය git rebase --interactive HEAD~2මඟින් ඔබට සංස්කාරකයක් ලබා දේ

pick b76d157 b
pick a931ac7 c

# Rebase df23917..a931ac7 onto df23917
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

(මෙම ටෝඩෝ ලැයිස්තුව ප්‍රතිදානයට සාපේක්ෂව ප්‍රතිලෝම අනුපිළිවෙලෙහි ඇති බව සැලකිල්ලට ගන්න git log .)

ආ ගේ වෙනස් pickකිරීමට squashඔබ දුටු දෝෂය, නමුත් ආ බවට ඔබ ස්කොෂ් ඇ වෙනුවට නම් (පැරණි හෝ "ඉහළ squashing" බවට නවතම සිදු) දක්වා කිවමනා ලැයිස්තුව වෙනස් කිරීම මගින් හේතු වනු ඇත

pick   b76d157 b
squash a931ac7 c

ඔබේ සංස්කාරකය සුරැකීමෙන් ඉවත් වන විට, අන්තර්ගතය ඇති තවත් සංස්කාරකයක් ඔබට ලැබෙනු ඇත

# This is a combination of 2 commits.
# The first commit's message is:

b

# This is the 2nd commit message:

c

ඔබ සුරකින විට සහ ඉවත් වූ විට, සංස්කරණය කරන ලද ගොනුවේ අන්තර්ගතය නව ඒකාබද්ධ බැඳීමේ පණිවිඩයක් බවට පත්වේ:

$ git log --pretty=oneline
18fd73d3ce748f2a58d1b566c03dd9dafe0b6b4f b and c
df239176e1a2ffac927d8b496ea00d5488481db5 a

ඉතිහාසය නැවත ලිවීම පිළිබඳ සටහන

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

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

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

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


මම බැඳීමක් ස්කොෂ් කිරීමට රිබේස් භාවිතා කරන්නේ නම්, වෙනස් කිරීම් දෙක අඩංගු නව "ඒකාබද්ධ" බැඳීමක් නිර්මාණය වේ, නමුත් හැෂ් වෙනස් වේ. මුල් කොමිස් ද git මගින් ආරක්ෂා කර තිබේද?
fabsenet

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

මම දැන් සෙල්ලම් කරමින් git log hashoftheoldcommitgit log --graph
සිටියෙමි

මෙම ස්කොෂ් තල්ලු කිරීමට පෙර කොමිස් සංවිධානය කිරීමට හොඳ මෙවලමකි, නමුත් මම එකක් කොමිස් තල්ලු කළහොත් මට එය ස්කොෂ් කළ නොහැකිද? git පවසයි: සාර්ථකව ප්‍රතිස්ථාපනය කර යාවත්කාලීන කරන ලද HEAD යාවත්කාලීන කරන ලදි.
සර්ජියෝ

දෙවන අවස්ථාවෙහිදී සංස්කාරකය ලබා නොගැනීම, git bash, යම් ක්‍රියාවලියකට කැටි වී ඇති බවක් පෙනේ. කුමක් කරන්න ද?

417

බහුවිධ කොමිස් තිබේ නම්, ඔබට git rebase -iකොමිස් දෙකක් එකකට ස්කොෂ් කිරීමට භාවිතා කළ හැකිය .

ඔබට ඒකාබද්ධ කිරීමට අවශ්‍ය වන්නේ කොමිස් දෙකක් පමණක් නම් සහ ඒවා “වඩාත්ම මෑත දෙක” නම්, පහත දැක්වෙන විධානයන් මඟින් කොමිස් දෙක එකකට ඒකාබද්ධ කළ හැකිය:

git reset --soft "HEAD^"
git commit --amend

7
ප්‍රතිප්‍රහාරයට සාපේක්ෂව අවාසිය කුමක්ද? මම භාවිතා කිරීමට වඩා සරල එකක් සොයා ගතිමි.
Guillaume86

17
ඔබට අත්තනෝමතික අනුපිළිවෙලට සම්බන්ධ විය නොහැක - අවසාන කාරණා දෙක පමණි .
dr0i

51
X dr0i ඔබට අවශ්‍ය තරම් කොමිස් ඒකාබද්ධ කළ හැකිය, ඒවා අන්තිම X කොමිස් වන තාක් කල් , කොතැනක හෝ මැද නොවේ. ධාවනය කරන්න git reset --soft HEAD~10, එහිදී 10 යනු ඔබට ඒකාබද්ධ කිරීමට අවශ්‍ය කොමිස් ගණනයි.
fregante

2
ඔබට දුරස්ථ සම්භවයක් නොමැති නම් මෙය භාවිතා කළ හැකි අතර ඔබට ඇත්තේ කොමිස් දෙකක් පමණි.
atedja

9
බැඳීමේ SHA1 හැඳුනුම්පත කොහෙන්ද යන්න HEADභාවිතා කිරීමෙන් ඔබට කොපමණ සංඛ්‍යාවක් තිබේදැයි ගණනය කිරීමට අවශ්‍ය නැතිනම් ඔබට නිශ්චිත බැඳීමකට නැවත සැකසිය හැකිය . git reset --soft 47b5c5...47b5c5...
dguay

118

ප්‍රතිස්ථාපනය: ඔබට එය අවශ්‍ය නොවේ:

බොහෝ විට සිදුවන අවස්ථා සඳහා සරල ක්‍රමයක්.

බොහෝ අවස්ථාවලදී:

ඇත්ත වශයෙන්ම ඔබට අවශ්‍ය වන්නේ මෑත කාලීන කොමිස් කිහිපයක් එකකට ඒකාබද්ධ කිරීම පමණි, නමුත් අවශ්‍ය නොවේ drop, rewordසහ වෙනත් ප්‍රතිව්‍යුහගත කිරීමේ වැඩ.

ඔබට සරලවම කළ හැකිය:

git reset --soft "HEAD~n"
  • උපකල්පනය ~nඅනිත් උනුත් එක්සත් ජාතීන්ගේ-නසා ගැනීමට අනාචාරයේ සංඛ්යාව (එනම් වේ ~1, ~2, ...)

බැඳීම් පණිවිඩය වෙනස් කිරීමට පහත විධානය භාවිතා කරන්න.

git commit --amend

එය දිගු පරාසයක squashහා එකකට සමාන pickවේ.

තවද එය n කොමිස් සඳහා ක්‍රියා කරන නමුත් ඉහත පිළිතුරෙන් ඉල්ලා ඇති පරිදි දෙකක් පමණක් නොවේ.


3
කමිටු 1 ක් ඉවත් කිරීම හෝ කේත රේඛාවක් වෙනස් කිරීම වැනි කොමිස් ඉවතලෑමට අමතරව අමතර පිරිසිදු කිරීමක් කිරීමට ඔබට අවශ්‍ය නම් මෙය හොඳයි.
ස්ටයිෆල්

1
උපකල්පනය ~nඅනිත් උනුත් එක්සත් ජාතීන්ගේ-නසා ගැනීමට අනාචාරයේ සංඛ්යාව (එනම් වේ ~1, ~2, ...)
රේ

1
nඅන්තිම කොමිස් නොව nමැදට සම්බන්ධ වීමට මට අවශ්‍ය නම් කුමක් කළ යුතුද? මට මෙය පහසුවෙන් කළ හැකිද?
chumakoff

1
එවිට git rebase -iඔබට squashවැඩ කිරීමට අවශ්‍ය වන්නේ එයයි . uma චුමාකොෆ්
පම්බඩා

3
එබැවින් නවතම කාර්යයන් සඳහා එක්වීම n, පළමු භාවිතය git reset --soft @~m, එහිදීm = n - 1
Łukasz Rajchel

55

පළමුව ඔබ කොපමණ කොමිස් ප්‍රමාණයක් ඇත්දැයි පරීක්ෂා කළ යුතුය:

git log

තත්වය දෙකක් තිබේ:

එකක් නම් ඇත්තේ කොමිස් දෙකක් පමණි :

උදාහරණයක් වශයෙන්:

commit A
commit B

(මෙම අවස්ථාවේදී, ඔබට කිරීමට git rebase භාවිතා කළ නොහැක) ඔබ පහත සඳහන් දෑ කළ යුතුය.

$ git reset --soft HEAD^1

$ git commit --amend

තවත් කාරණයක් වන්නේ කොමිස් දෙකකට වඩා තිබීමයි; ඔබට කැපවීම සී සහ ඩී ඒකාබද්ධ කිරීමට අවශ්‍යයි.

උදාහරණයක් වශයෙන්:

commit A
commit B
commit C
commit D

(මෙම කොන්දේසිය යටතේ, ඔබට git rebase භාවිතා කළ හැකිය)

git rebase -i B

කිරීමට "ස්කොෂ්" භාවිතා කරනවාට වඩා. ඉතිරි කොටස ඉතා පහසුය. ඔබ තවමත් නොදන්නේ නම්, කරුණාකර http://zerodie.github.io/blog/2012/01/19/git-rebase-i/ කියවන්න.


ඔබට දැනටමත් ප්‍රතිප්‍රහාරයක් සිදුවී ඇත්නම් ක්‍රියාත්මක වන එකම ක්‍රමය --soft සහ commit --amend යලි සකසන්න (සහ මෙම කැපවීම සඳහා 'ස්කොෂ්' වෙනුවට 'සංස්කරණය' තෝරා ගන්න). +1
ජාසෙක් ලැච්

1
ගබඩාවක පළමු හා එකම කොමිස් දෙක ඒකාබද්ධ කිරීම, හරියටම මගේ අද්දර නඩුව :-)
ක්‍රිස් හුවාං-ලීවර්

1
කරුණාකර git push -f origin masterඑය අනවශ්‍ය විය හැකිය.
රිෂාබ් අග්‍රහාරි

35

ඔබ ඔබේම මාතෘකා ශාඛාවක සිටි බව උපකල්පනය කරන්න. ඔබට අවසාන කොමිස් දෙක එකකට ඒකාබද්ධ කර වීරයෙකු මෙන් පෙනෙන්නට අවශ්‍ය නම්, ඔබ අවසන් කොමිස් දෙක කිරීමට පෙර බැඳීම කපා දමන්න (සාපේක්ෂ බැඳීම් නම HEAD ~ 2 සමඟ නිශ්චිතව දක්වා ඇත).

git checkout -b temp_branch HEAD~2

ඉන්පසු ස්කොෂ් මෙම නව ශාඛාවේ අනෙක් ශාඛාව කැප කරන්න:

git merge branch_with_two_commits --squash

එමඟින් වෙනස්කම් සිදු වන නමුත් ඒවා සිදු නොකෙරේ. ඒ නිසා ඔවුන් කැපවී ඔබ ඉවරයි.

git commit -m "my message"

දැන් ඔබට මෙම නව මාතෘකා ශාඛාව නැවත ඔබේ ප්‍රධාන ශාඛාවට ඒකාබද්ධ කළ හැකිය.


5
මෙය ඇත්ත වශයෙන්ම මට වඩාත්ම ප්‍රයෝජනවත් පිළිතුර විය, එයට අතින් ප්‍රතිනිර්මාණය කිරීමක් අවශ්‍ය නොවූ නමුත් ඒ වෙනුවට මුළු ශාඛාවකම සියලු කැපවීම් එක කැපවීමකට ලක් කරයි. ඉතා කදිමයි.
රොබට්

මේ සඳහා ස්තූතියි! ස්කොට් කිරීම මගේ හිසෙහි සිදු වන ආකාරය නිරූපණය කරන ආකාරය මෙයයි.
මර්ජන් වෙනීමා

පුදුමාකාර පිළිතුර, විකල්පයන්ට වඩා සරලයි

පැහැදිලිවම, මෙම පිළිතුර නඩුව සඳහා සුදුසු නොවන විට aහා cඑකට ඒකාබද්ධ හා තබා ගැනීමට අවශ්ය bඑය ලෙස.
තල්හා අෂ්රෆ්

2
Git හි මෑත සංස්කරණවල යමක් වෙනස් වී තිබේද? git checkout -b combine-last-two-commits "HEAD^2"Git අනුවාදය 2.17 හි පළමු විධානය ( ) උත්සාහ කරන විට , මට දෝෂයක් fatal: 'HEAD^2' is not a commit and a branch 'combine-last-two-commits' cannot be created from it
ඇතිවේ

23

ඔබට නැවත ගෙවීම අවලංගු කළ හැකිය

git rebase --abort

ඔබ නැවත අන්තර්ක්‍රියාකාරී ප්‍රතිස්ථාපන විධානය ක්‍රියාත්මක කරන විට 'ස්කොෂ්; බැඳීම ලැයිස්තුවේ තේරීම් කමිටුවට වඩා පහළින් තිබිය යුතුය


16

මම බොහෝ විට git reset --mixed භාවිතා කර ඔබට ඒකාබද්ධ කිරීමට අවශ්‍ය බහුවිධ කැපවීම් වලට පෙර මූලික අනුවාදයක් ආපසු ලබා දෙන්නෙමි, පසුව මම නව කැපවීමක් කරමි, එමඟින් ඔබේ කැපවීමට නවතම දේ කිරීමට ඉඩ දිය හැකිය, ඔබ සේවාදායකයට තල්ලු වූ පසු ඔබේ අනුවාදය HEAD බව සහතික කරන්න.

commit ac72a4308ba70cc42aace47509a5e
Author: <me@me.com>
Date:   Tue Jun 11 10:23:07 2013 +0500

    Added algorithms for Cosine-similarity

commit 77df2a40e53136c7a2d58fd847372
Author: <me@me.com>
Date:   Tue Jun 11 13:02:14 2013 -0700

    Set stage for similar objects

commit 249cf9392da197573a17c8426c282
Author: Ralph <ralph@me.com>
Date:   Thu Jun 13 16:44:12 2013 -0700

    Fixed a bug in space world automation

මට හිස දෙකක් එකකට ඒකාබද්ධ කිරීමට අවශ්‍ය නම්, පළමුව මම භාවිතා කරන්නේ:

git reset --mixed 249cf9392da197573a17c8426c282

"249cf9392da197573a17c8426c282" තෙවන අනුවාදය වන අතර, ඔබ ඒකාබද්ධ වීමට පෙර ඔබේ මූලික අනුවාදය ද වේ, ඉන්පසු මම නව කැපවීමක් කරමි:

git add .
git commit -m 'some commit message'

මේ සියල්ලම, බලාපොරොත්තුව සෑම කෙනෙකුටම තවත් ක්‍රමයකි.

FYI, සිට git reset --help:

 --mixed
     Resets the index but not the working tree (i.e., the changed files are
     preserved but not marked for commit) and reports what has not been
     updated. This is the default action.

මම '- මිශ්‍ර' සඳහා ලියකියවිලි කියවා නැති නමුත් අනෙක් අය එම ලිපිය කියවා පුදුමයට පත් වූ බව මට විශ්වාසයි: - මිශ්‍ර කිරීම භාවිතා කිරීමේ වාසිය කුමක්ද? මෑන් පිටුවේ කුඩා කොටසක් ඇතුළත් කිරීමට ඔබගේ සටහන වැඩි දියුණු කළ හැකිය.
funroll

un ෆන්රෝල් මම නොදැන සිටියෙමි - මෙම පිළිතුර ලිවීමට පෙර බොහෝ දුරට මිශ්‍ර වී ඇති අතර, මගේ අත්දැකීම් අනුව, මිශ්‍ර මෙහෙයුම මඟින් මම තර්කය ලෙස සම්මත කරන ලද අනුවාදය නිධිය හෙඩ් අනුවාදය ලෙස දක්වනු ඇත, එම අනුවාදයෙන් පසුව කිසිවක් අහිමි විය නොහැක, ඒ නිසා අපට තවමත් එම වෙනස්කම් හැසිරවිය හැකිය.
වින්ස් ස්ටයිලිං

14

$ git rebase --abort

ඔබට git rebase අහෝසි කිරීමට අවශ්‍ය නම් ඕනෑම වේලාවක මෙම කේතය ක්‍රියාත්මක කරන්න

$ git rebase -i HEAD~2

අන්තිම කොමිස් දෙක නැවත අයදුම් කිරීමට. ඉහත විධානය මඟින් කේත සංස්කාරකයක් විවෘත වේ

  • [ නවතම කැපවීම පතුලේ ඇත ]. ස්කොෂ් (ය) සඳහා වන අවසාන බැඳීම වෙනස් කරන්න. ස්කොෂ් පෙර කැපවීම සමඟ ඒකාබද්ධ වන බැවින්.
  • ඉන්පසු esc යතුර ඔබා: wq සුරැකීමට සහ වැසීමට

පසු: wq ඔබ සක්‍රීය ප්‍රතිස්ථාපන මාදිලියේ සිටිනු ඇත

සටහන : අනතුරු ඇඟවීම් / දෝෂ පණිවිඩ නොමැති නම් ඔබට තවත් සංස්කාරකයක් ලැබෙනු ඇත, දෝෂයක් තිබේ නම් හෝ වෙනත් සංස්කාරකයක් නොපෙන්වයි$ git rebase --abortනම්, ඔබ දෝෂයක් දුටුවහොත්ධාවනය කිරීමෙන් ගබ්සා කළ හැකිය. $ git rebase --continue

ඔබගේ 2 කැපවීමේ පණිවිඩය ඔබට පෙනෙනු ඇත. එකක් තෝරන්න හෝ ඔබේම පණිවිඩයක් ලියන්න, සුරකින්න සහ ඉවත් වන්න [: wq]

සටහන 2: ඔබ rebase විධානය ක්‍රියාත්මක කරන්නේ නම් දුරස්ථ repo වෙත ඔබගේ වෙනස්කම් බල කිරීමට අවශ්‍ය විය හැකිය

$ git push -f

$ git push -f origin master


1
සටහන 2: git push -f origin/masterවෙනත් පිළිතුරු නොමැති දේ. +1
රිෂාබ් අග්‍රහාරි

2

මම git cherry-pickසෑම දෙයක් සඳහාම භාවිතා කරන බැවින් , මෙහි පවා එසේ කිරීම ස්වාභාවිකය.

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

git checkout HEAD^ // Checkout the privious commit
git cherry-pick --no-commit branchX // Cherry pick the content of the second commit
git commit --amend // Create a new commit with their combined content

branchXමටත් යාවත්කාලීන කිරීමට අවශ්‍ය නම් (මෙම ක්‍රමයේ පහළ පැත්ත මෙය යැයි මම සිතමි) මටද මෙය කළ යුතුය:

git checkout branchX
git reset --hard <the_new_commit>

1

ඔබේ ප්‍රධාන ශාඛාව පහත පරිදි git logපෙනේ නම්:

commit ac72a4308ba70cc42aace47509a5e
Author: <me@me.com>
Date:   Tue Jun 11 10:23:07 2013 +0500

    Added algorithms for Cosine-similarity

commit 77df2a40e53136c7a2d58fd847372
Author: <me@me.com>
Date:   Tue Jun 11 13:02:14 2013 -0700

    Set stage for similar objects

commit 249cf9392da197573a17c8426c282
Author: Ralph <ralph@me.com>
Date:   Thu Jun 13 16:44:12 2013 -0700

    Fixed a bug in space world automation

ඔබට ඉහළම පියවර දෙක ඒකාබද්ධ කිරීමට අවශ්‍ය වන්නේ පහසු පියවර අනුගමනය කිරීමෙන් පමණි:

  1. පළමුවෙන්ම ආරක්ෂිත පැත්තෙන් පිටවීම වෙනම ශාඛාවක දෙවන අවසාන කැපවීම. ඔබට ශාඛාවට ඕනෑම දෙයක් නම් කළ හැකිය.git checkout 77df2a40e53136c7a2d58fd847372 -b merged-commits
  2. දැන්, මෙම නව ශාඛාවට අවසන් වරට කළ වෙනස්කම් චෙරි-තෝරන්න: git cherry-pick -n -x ac72a4308ba70cc42aace47509a5e . (ගැටුම් ඇත්නම් ඒවා විසඳන්න)
  3. ඉතින් දැන්, ඔබගේ අවසාන කැපවීමේ වෙනස්කම් ඔබගේ දෙවන අන්තිම බැඳීම තුළ තිබේ. නමුත් ඔබ තවමත් කැපවිය යුතුය, එබැවින් පළමුව ඔබ චෙරි තෝරාගත් වෙනස්කම් එකතු කර ක්‍රියාත්මක කරන්න git commit --amend.

ඒක තමයි. ඔබට අවශ්‍ය නම් මෙම ඒකාබද්ධ කළ අනුවාදය “ඒකාබද්ධ-කොමිස්” ශාඛාවට තල්ලු කළ හැකිය.

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

git checkout master
git reset --hard origin/master (CAUTION: This command will remove any local changes to your master branch)
git pull

0

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

මම උපකල්පනය කරනවා:

  • ඔබ ඔබේ සංස්කාරක ලෙස vi භාවිතා කරයි
  • ඔබගේ බැඳීම් එක් පේළියකි

මම අත්හදා බැලුවා git version 2.14.3 (Apple Git-98).


#!/usr/bin/env expect
spawn git rebase -i HEAD~2

# change the second "pick" to "squash"
# down, delete word, insert 's' (for squash), Escape, save and quit
send "jdwis \033:wq\r"

expect "# This is a"

# skip past first commit message (assumed to be one line), delete rest of file
# down 4, delete remaining lines, save and quit
send "4jdG\r:wq\r"

interact

@buhtz මම තවත් අදහස් කිහිපයක් එකතු කළෙමි. ඔබ තවමත් එය අවුල් සහගතද, එසේ නම්, කුමන කොටසද යන්න මට දන්වන්න.
erwaman

ඔබේ ස්ක්‍රිප්ට් කරන්නේ කුමක්ද යන්න තවමත් පැහැදිලි නැත. එසේම expectවිස්තර කර නොමැත.
බුට්ස්

@buhtz අපැහැදිලි වන්නේ කුමන කොටසද? මම වැඩි ලියකියවිලි සහිත පිටුවකට සබැඳියක් ලබා දුන්නා expect.
erwaman

පිටපත පිළිබඳ සාමාන්‍ය විස්තරයක් නොමැත. එය කරන්නේ කුමක්ද යන්න පැහැදිලි නැත. එක් කොටසක් අපැහැදිලි ය. පිටපතෙහි අභිප්‍රාය අපැහැදිලි ය.
බුට්ස්
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.