නිශ්චිත බැඳීමක් වෙනස් කරන්නේ කෙසේද?


2248

මම සාමාන්‍යයෙන් සමාලෝචනය සඳහා කොමිස් ලැයිස්තුවක් ඉදිරිපත් කරමි. මට පහත සඳහන් බැඳීම් තිබේ නම්:

  1. HEAD
  2. Commit3
  3. Commit2
  4. Commit1

... මම දන්නවා මට කැපවීම වෙනස් කළ හැකි බව git commit --amend. නමුත් Commit1එය වෙනස් නොවන HEADබව මා සලකන්නේ කෙසේද?


31
විකල්ප පිළිතුරක් මෙතැනින් බලන්න: stackoverflow.com/a/18150592/520567 ඔබ පිළිගත් පිළිතුර ඇත්ත වශයෙන්ම ඔබේ ප්‍රශ්නයට නිශ්චිත පිළිතුරකි, නමුත් ඔබ සංස්කරණය භාවිතා කිරීමට තීරණය කිරීමට පෙර ඔබේ නව කැපවීම සූදානම් නම්, මෙම පිළිතුර වඩාත් සරල වනු ඇත. පැරණි එකක් සමඟ ඒකාබද්ධ කිරීමට / ස්කොෂ් කිරීමට අවශ්‍ය බහු කොමිස් සමඟද එය ක්‍රියා කළ හැකිය.
akostadinov

6
ද ඔබ දකින්න පුළුවන් බෙදීම සඳහා සිදු දී නැවත ලිවීම ඉතිහාසය - Git මෙවලම් වැඩි විස්තර සඳහා.
හක්රේ

Answers:


2984

ඔබට git rebase භාවිතා කළ හැකිය . උදාහරණයක් ලෙස, ඔබට කැපවීම වෙනස් කිරීමට අවශ්‍ය නම් bbc643cd, ධාවනය කරන්න

$ git rebase --interactive 'bbc643cd^'

කරුණාකර ^විධානය අවසානයේ ඇති කරත්තය සටහන් කරන්න , මන්ද ඔබ වෙනස් කිරීමට බලාපොරොත්තු වන තැනැත්තාට පෙර නැවත කැපවීම නැවත කළ යුතු බැවිනි .

පෙරනිමි කර්තෘ දී, වෙනස් කරන්න pickකිරීමට edit'bbc643cd' සඳහන් රේඛාව.

ගොනුව සුරකිමින් පිටවන්න: git මඟින් ගොනුවේ විධාන අර්ථ නිරූපණය කර ස්වයංක්‍රීයව ක්‍රියාත්මක කරනු ඇත. ඔබ කැපවීමක් ඇති කළ පෙර තත්වය තුළ ඔබ සොයා ගනු ඇත bbc643cd.

මෙම අවස්ථාවෙහිදී, bbc643cdඔබගේ අවසාන කැපවීම වන අතර ඔබට එය පහසුවෙන් සංශෝධනය කළ හැකිය : ඔබේ වෙනස්කම් සිදු කර ඒවා විධානය සමඟ සිදු කරන්න:

$ git commit --all --amend --no-edit

ඊට පසු, ටයිප් කරන්න:

$ git rebase --continue

පෙර හෙඩ් බැඳීම වෙත ආපසු යාමට.

අවවාදයයි : මෙය එම කැපවීමේ SHA-1 මෙන්ම සියලු දරුවන් ද වෙනස් කරනු ඇති බව සලකන්න - වෙනත් වචන වලින් කිවහොත්, මෙය ඉතිහාසය එතැන් සිට නැවත ලියයි. ඔබ විධානය භාවිතා කරමින් තල්ලු කළහොත් ඔබට මෙය සිදු කළ හැකියgit push --force


126
මෙම ප්‍රවාහය තුළ ඇති තවත් සිත්ගන්නාසුලු විකල්පයක් නම්, ඔබ වෙනස් කිරීමට අවශ්‍ය කැපවීම වෙත මාරු වූ පසු, ලිපිගොනු වෙනස් කිරීම සහ ඉහළින් ඇති බැඳීම (ඔබ සංස්කරණය කරන එක) මත පැටවීම වෙනුවට, එම කැපවීම වෙනස් කමිටු දෙකකට බෙදීමට ඔබට අවශ්‍ය විය හැකිය. (හෝ ඊටත් වඩා). එවැනි අවස්ථාවකදී, සංස්කරණය කිරීමේ බැඳීම වෙත ආපසු ගොස් "git reset HEAD run" ධාවනය කරන්න. එමඟින් එම කැපවූ නවීකරණය කරන ලද ලිපිගොනු වේදිකාවට දමනු ඇත. දැන් ඔබට අවශ්‍ය පරිදි ඕනෑම ලිපිගොනු තෝරාගෙන ඒවා කරන්න. මෙම ප්‍රවාහය "git-rebase" man පිටුවේ හොඳින් විස්තර කර ඇත. "බෙදීම් කොමිස්" කොටස බලන්න. bit.ly/d50w1M
ඩියාගෝ පිනෝ

200
Git 1.6.6 සහ නවතම ඔබ භාවිතා කළ හැකිය rewordපියවර git rebase -iවෙනුවට edit(එය ස්වයංක්රීයව සංස්කාරක විවෘත හා rebase පියවර සෙසු රටවල් සමඟ දිගටම; මෙම භාවිතය obviates git commit --ammendහා git rebase --continueඔබ පමණක් සිදු පණිවිඩය නොවේ අන්තර්ගතය වෙනස් කිරීමට අවශ්ය වන විට ).
ක්‍රිස් ජොන්සන්

109
ඔබට අපේක්ෂිත වෙනස්කම් තිබේ නම්, ඊට git stashපෙර git rebaseසහ git stash popපසුව ධාවනය කිරීමට ඔබට අවශ්‍ය විය හැකි බව සඳහන් කිරීම වටී .
user123444555621

3
සංස්කාරකය විවෘත නොකර, බැඳීම සොයා ගැනීම, එය සංස්කරණය කිරීම සලකුණු කිරීම සහ නැවත විධාන රේඛාවට වැටීමකින් තොරව අන්තර්ක්‍රියාකාරී නැවත සැකසීමේදී නිශ්චිත බැඳීමක් සංස්කරණය කිරීමට කෙටිමං විධානයක් තිබේද?
sstur

15
අළුත් git සමඟ, git commit --all --amend --no-editමෙහි අන්ධ ලෙස භාවිතා කරනවා වෙනුවට කඩිනම් උපදෙස් අනුගමනය කිරීම වඩා er ානවන්ත බව සලකන්න . මට පසුව කළ යුතුව git rebase -i ...තිබුණේ git commit --amendසාමාන්‍යයෙන් එවකටය git rebase --continue.
එරික් චෙන්

458

පුදුමාකාර අන්තර්ක්‍රියාකාරී නැවත භාවිතා කිරීම:

git rebase -i @~9   # Show the last 9 commits in a text editor

ඔබට අවශ්‍ය කැපවීම සොයා ගන්න, ( ) pickවෙත වෙනස් කර ගොනුව සුරකින්න සහ වසා දමන්න . Git එම කැපවීමට පෙරළා, ඔබට එක්කෝ ඉඩ දෙයි:eedit

  • git commit --amendවෙනස්කම් කිරීමට භාවිතා කරන්න, හෝ
  • git reset @~අන්තිම බැඳීම බැහැර කිරීමට භාවිතා කරන්න, නමුත් ලිපිගොනු වල වෙනස්කම් නොවේ (එනම් ඔබ ලිපිගොනු සංස්කරණය කරන විට ඔබ සිටි ස්ථානයට ගෙන යන්න, නමුත් තවමත් කැපවී නැත).

බහුවිධ කොමිස් වලට බෙදීම වැනි වඩාත් සංකීර්ණ දේවල් කිරීමට දෙවැන්න ප්‍රයෝජනවත් වේ.

ඉන්පසුව, ධාවනය කරන්න git rebase --continue, එවිට ඔබගේ වෙනස් කරන ලද කැපවීමට ඉහළින් Git පසුකාලීන වෙනස්කම් නැවත ධාවනය කරයි. ඒකාබද්ධ කිරීමේ ගැටුම් කිහිපයක් නිවැරදි කිරීමට ඔබෙන් ඉල්ලා සිටිය හැකිය.

සටහන: @සඳහා කෙටිකාලීන HEADවන අතර ~එය නිශ්චිත බැඳීමට පෙර බැඳීම වේ.

Git ලියකියවිලි වල ඉතිහාසය නැවත ලිවීම පිළිබඳ වැඩිදුර කියවන්න .


නැවත පණ ගැන්වීමට බිය නොවන්න

ProTip ™: ඉතිහාසය නැවත ලියන "භයානක" විධානයන් සමඟ අත්හදා බැලීමට බිය නොවන්න * - Git විසින් ඔබගේ කොමිස් දින 90 ක් පෙරනිමියෙන් මකා නොදමනු ඇත; ඔබට ඒවා reflog හි සොයාගත හැකිය:

$ git reset @~3   # go back 3 commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started

* වැනි විකල්ප සඳහා සිදු වොච් --hardසහ --forceවුවත් - ඔවුන් දත්ත ඉවතලන්න හැක.
* එසේම, ඔබ සහයෝගයෙන් කටයුතු කරන කිසිදු ශාඛාවක ඉතිහාසය නැවත ලියන්න එපා.



බොහෝ පද්ධති වල, git rebase -iපෙරනිමියෙන් Vim විවෘත වේ. බොහෝ නවීන පෙළ සංස්කාරකවරුන් මෙන් Vim ක්‍රියා නොකරයි, එබැවින් Vim භාවිතා කර නැවත භාවිතා කරන්නේ කෙසේදැයි බලන්න . ඔබ වෙනත් සංස්කාරකයක් භාවිතා කිරීමට කැමති නම්, එය වෙනස් කරන්න git config --global core.editor your-favorite-text-editor.


30
ඔබගේ පිළිතුරේ මැද කොටස මට විස්තර කළ හැකි දේ VIM සඳහා අවම වෙළඳ දැන්වීමක් ලෙස තැබීමට අමුතු ස්ථානයකි. එය ප්‍රශ්නයට අදාල නොවන අතර ඔබේ පිළිතුර අවුල් කරයි.
අභිප්‍රාය

22
Int ඉන්ටෙන්ට්ස්: ආහ්, මට පේනවා ඇයි ඒක අමුතු පෙනුමක් කියලා. එයට හේතු වූ කාරණය නම් බොහෝ පද්ධතිවල පෙරනිමි පෙළ සංස්කාරකය වීම් වීමයි, එබැවින් බොහෝ දෙනාගේ අන්තර්ක්‍රියාකාරී ප්‍රතිනිර්මාණය පිළිබඳ පළමු අත්දැකීම ටයිප් කිරීම මඟින් කර්සරය සෑම තැනකම පියාසර කිරීමට ඉඩ සලසයි. ඉන්පසුව, ඔවුන් තම සංස්කාරකය වෙනත් දෙයකට මාරු කරන අතර අන්තර්ක්‍රියාකාරී නැවත ප්‍රතිස්ථාපනය කිරීමේ ඔවුන්ගේ දෙවන අත්දැකීම තරමක් සාමාන්‍යය, නමුත් එය GUI වෙනුවට පෙළ ගොනුවක් භාවිතා කරන්නේ මන්දැයි ඔවුන් කල්පනා කරයි. නැවත ප්‍රතිස්ථාපනය කිරීම සමඟ ප්‍රවාහය සාක්ෂාත් කර ගැනීම සඳහා, ඔබට Vim හෝ Emacs හි rebase-mode වැනි දෙයක් අවශ්‍ය වේ.
සාස්

10
හරි හරී. බොහෝ අය එම කොටස අදාළ නොවන බව දුටු නිසා, මම එය පේළි 3 කට ensed නීභවනය කර ඇති අතර අවශ්‍ය නම් සංස්කාරකය වෙනස් කරන්නේ කෙසේද යන්න පැහැදිලි කර ඇත්තෙමි.
Zaz

17
නියමයි! ඔබට @කෙටිමං ලෙස භාවිතා කළ හැකි බව මම දැන සිටියේ නැත HEAD. මෙය පළ කිරීම ගැන ස්තූතියි.
ජේම්ස් කෝ

3
git reset @~කැපවීම තෝරා ගැනීමෙන් පසු මට කිරීමට අවශ්‍ය දේ git rebase .... ඔබ මගේ වීරයා)
18augst

80

අන්තර් ක්රියාකාරී rebase සමග --autosquashමම ගැඹුරු ඉතිහාසයේ පෙර අනාචාරයේ fixup කිරීමට අවශ්ය විට මම නිතර භාවිතා දෙයක්. එය මූලිකවම ZelluX හි පිළිතුර නිරූපණය කරන ක්‍රියාවලිය වේගවත් කරන අතර ඔබට සංස්කරණය කිරීමට අවශ්‍ය එකකට වඩා වැඩි ප්‍රමාණයක් ඇති විට එය විශේෂයෙන් ප්‍රයෝජනවත් වේ.

ප්‍රලේඛනයෙන්:

--autosquash

බැඳීම් ලොග් පණිවිඩය “ස්කොෂ්!…” (හෝ “සවි කිරීම!…”) සමඟ ආරම්භ වන විට, සහ එහි මාතෘකාව එකම ආකාරයකින් ආරම්භ වන බැඳීමක් තිබේ නම්…, ප්‍රතිප්‍රහාරයේ ටෝඩෝ ලැයිස්තුව ස්වයංක්‍රීයව වෙනස් කරන්න. ස්කොෂ් කිරීම සඳහා සලකුණු කර ඇත්තේ වෙනස් කිරීමට ඇති කැපවීමෙන් පසුවය

ඔබට මේ වගේ ඉතිහාසයක් ඇතැයි උපකල්පනය කරන්න:

$ git log --graph --oneline
* b42d293 Commit3
* e8adec4 Commit2
* faaf19f Commit1

ඔබට කොමිට් 2 වෙත සංශෝධනය කිරීමට අවශ්‍ය වෙනස්කම් ඇති අතර පසුව ඔබේ වෙනස්කම් සිදු කරන්න

$ git commit -m "fixup! Commit2"

විකල්පයක් ලෙස ඔබට බැඳීම් පණිවිඩය වෙනුවට කැපවීම-ෂා භාවිතා කළ හැකිය, එසේ "fixup! e8adec4නැතහොත් කැපවීමේ පණිවිඩයේ උපසර්ගයක් පවා භාවිතා කළ හැකිය .

ඉන්පසු කැපවීමට පෙර අන්තර්ක්‍රියාකාරී ප්‍රතිප්‍රහාරයක් ආරම්භ කරන්න

$ git rebase e8adec4^ -i --autosquash

දැනටමත් නිවැරදිව ඇණවුම් කර ඇති කොමිස් සමඟ ඔබේ සංස්කාරකය විවෘත වේ

pick e8adec4 Commit2
fixup 54e1a99 fixup! Commit2
pick b42d293 Commit3

ඔබ කළ යුත්තේ සුරැකීම සහ පිටවීම පමණි


21
git commit --fixup=@~ඒ වෙනුවට ඔබට භාවිතා කළ හැකිය git commit -m "fixup! Commit2". ඔබගේ කැපවීමේ පණිවිඩ දිගු වන විට මෙය විශේෂයෙන් ප්‍රයෝජනවත් වන අතර එය සියල්ලම ටයිප් කිරීම වේදනාවක් වනු ඇත.
Zaz

42

ධාවනය:

$ git rebase --interactive commit_hash^

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

විම් භාවිතා ඔබ වචන වෙනස් pickකිරීමට rewordඔබට වෙනස් කිරීමට අවශ්ය අනාචාරයේ සඳහා, සුරැකීම සහ ඉවත් ( :wq). එවිට ඔබ නැවත පණිවිඩයක් ලෙස සලකුණු කළ සෑම බැඳීමක්ම git මඟින් ඔබෙන් විමසනු ඇත, එවිට ඔබට බැඳීම් පණිවිඩය වෙනස් කළ හැකිය.

සෑම කැපවීමේ පණිවිඩයක්ම :wqඊළඟ කැපවීමේ පණිවිඩයට යාමට ඔබ සුරැකිය යුතු අතර ( ) ඉවත් විය යුතුය

වෙනස්කම් සිදු නොකර ඔබට පිටවීමට අවශ්‍ය නම්, ඔබන්න :q!

සංස්කරණය කරන්න : vimඔබ තුළ සැරිසැරීමට jඉහළට kයන්න, පහළට hයන්න, වමට යන්න, සහ lදකුණට යන්න (මේ සියල්ලම NORMALප්‍රකාරයේදී, ප්‍රකාරයට ESCයාමට ඔබන්න NORMAL). පෙළක් සංස්කරණය කිරීම සඳහා , ඔබ පෙළ iඇතුළු කරන INSERTමාදිලියට ඇතුළු වන පරිදි ඔබන්න . ESCනැවත NORMALප්‍රකාරයට යාමට ඔබන්න :)

යාවත්කාලීන කිරීම : මෙන්න github ලැයිස්තුගත කිරීම වෙතින් හොඳ සබැඳියක් git සමඟ ඕනෑම දෙයක් අහෝසි කරන්නේ කෙසේද (පාහේ)


4
මා වෙනුවෙන් පරිපූර්ණව වැඩ කළා. සඳහන් කිරීම වටී ද git push --force?
u01jmg3

git push --forceඔබගේ දේශීය කොමිස් සමඟ දුරස්ථ කිරීම් නැවත ලිවීම යනු කුමක්ද . මෙම මාතෘකාවේ තත්වය එය නොවේ :)
betoharres

EtBetuUuUu ඇත්ත වශයෙන්ම ඔබගේ කොමිස් දුරස්ථයට තල්ලු වී ඔබ දේශීයව බැඳීම් පණිවිඩය වෙනස් කර ඇත්නම්, ඔබට දුරස්ථව තල්ලු කිරීමට බල කිරීමට අවශ්‍ය වනු ඇත, එසේ නොවේ ද?
සුදීප් භන්දාරි

UdSudipBhandari ඒක තමයි මට දැනෙන්නේ. මම බල කළේ නැත, දැන් මට අමතර ශාඛාවක් ඇත, මා කළ පණිවිඩය වෙනස් කළ තැනැත්තා වෙත සියලු කැපවීම් නැවත පිළිබිඹු කරයි, එය සුපිරි කැතයි.
රෆින්

2
reengreenhouse ඔබ වෙනස් කර බලහත්කාරයෙන් තල්ලු කරන්නේ නම්, අනෙක් කණ්ඩායම් සාමාජිකයින් බොහෝ විට ඒකාබද්ධ කිරීමේ ගැටුම් වලට මුහුණ දෙනු ඇත. එබැවින් ඔබ සාමාන්‍යයෙන් ඒ ගැන සුපරීක්ෂාකාරී විය යුතුය. නමුත් ඔබ තව කිසිවෙකු ලබා නොගත් දෙයක් වෙනස් කරන්නේ නම්, එය හොඳින් විය යුතුය (එය නොදකිනු ඇත). ඒ නිසා මම --force අවසාන ප්‍රයත්නය ලෙස සලකන අතර සෑම විටම අනෙකුත් සාමාජිකයන් සමඟ repo හි තත්වය විමසා බලමි.
ටොමාස් කක්ස්මාර්සික්

18

කිසියම් හේතුවක් නිසා ඔබ අන්තර්ක්‍රියාකාරී සංස්කාරකවරුන්ට අකමැති නම්, ඔබට භාවිතා කළ හැකිය git rebase --onto.

ඔබට වෙනස් කිරීමට අවශ්‍ය යැයි පවසන්න Commit1. පළමුව, පෙර සිට අතු Commit1:

git checkout -b amending [commit before Commit1]

දෙවනුව, කැක්කුමක් නැහැ Commit1සමග cherry-pick:

git cherry-pick Commit1

දැන්, ඔබගේ වෙනස්කම් සංශෝධනය කරමින්, නිර්මාණය කරන්නේ Commit1':

git add ...
git commit --amend -m "new message for Commit1"

අවසාන වශයෙන්, වෙනත් වෙනස්කම් සිදු කිරීමෙන් පසු, ඔබගේ ඉතිරි බැඳීම් masterඔබගේ නව කැපවීමට ඉහළින් බද්ධ කරන්න:

git rebase --onto amending Commit1 master

කියවන්න: "ශාඛාව මත නැවත ප්‍රතිස්ථාපනය කරන්න amending, සියල්ලම Commit1(ඇතුළත් නොවන) සහ master(ඇතුළත්) අතර වේ." එනම්, commit2 සහ commit3, පැරණි Commit1 මුළුමනින්ම කපා දමයි. ඔබට ඒවා චෙරි-තෝරා ගත හැකිය, නමුත් මේ ක්‍රමය පහසුය.

ඔබේ අතු පිරිසිදු කිරීමට මතක තබා ගන්න!

git branch -d amending

4
git checkout -b amending Commit1~1පූර්ව කැපවීම ලබා ගැනීමට ඔබට භාවිතා කළ හැකිය
අරින් ටේලර්

පළමු පියවර දෙක සමානද git checkout -b amending Commit1?
Haoshu

16

ප්‍රලේඛනය මත පදනම්ව

පැරණි හෝ බහු බැඳීම් පණිවිඩවල පණිවිඩය සංශෝධනය කිරීම

git rebase -i HEAD~3 

ඉහත දැක්වෙන්නේ වත්මන් ශාඛාවේ අවසන් කොමිස් 3 ලැයිස්තුවකි, ඔබට තවත් අවශ්‍ය නම් 3 වෙනත් දෙයකට වෙනස් කරන්න. ලැයිස්තුව පහත සඳහන් දේට සමාන වනු ඇත:

pick e499d89 Delete CNAME
pick 0c39034 Better README
pick f7fde4a Change the commit message but push the same commit.

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

pick e499d89 Delete CNAME
reword 0c39034 Better README
pick f7fde4a Change the commit message but push the same commit.

බැඳීම් ලැයිස්තු ගොනුව සුරකින්න සහ වසා දමන්න, මෙය ඔබගේ කැපවීමේ පණිවිඩය වෙනස් කිරීමට, බැඳීම් පණිවිඩය වෙනස් කිරීමට සහ සුරැකීමට නව සංස්කාරකයක් උත්පතන කරනු ඇත.

සංශෝධිත කොමිස් අවසාන වශයෙන් බල කිරීම.

git push --force

මට පහත දෝෂය ලැබුණි: දෝෂය: 'vi' සංස්කාරකයේ ගැටලුවක් විය. කරුණාකර පණිවිඩය -m හෝ -F විකල්පය භාවිතයෙන් සපයන්න.
එරික් මේනාර්ඩ්

13

සම්පුර්ණයෙන්ම අන්තර්ක්‍රියාකාරී නොවන විධානය (1)

මම හිතුවා මම මේ සඳහා භාවිතා කරන අන්වර්ථයක් බෙදා ගන්නවා කියලා. එය පදනම් වී ඇත්තේ අන්තර්ක්‍රියාකාරී නොවන අන්තර්ක්‍රියාකාරී ප්‍රතිරෝධය මත ය. එය ඔබගේ git එකට එක් කිරීමට, මෙම විධානය ක්‍රියාත්මක කරන්න (පහත පැහැදිලි කිරීම):

git config --global alias.amend-to '!f() { SHA=`git rev-parse "$1"`; git commit --fixup "$SHA" && GIT_SEQUENCE_EDITOR=true git rebase --interactive --autosquash "$SHA^"; }; f'

මෙම විධානයේ ඇති ලොකුම වාසිය නම් එය නිෂ් -ල වීමයි.


(1) ඇත්ත වශයෙන්ම නැවත ගෙවීමේදී ගැටුම් නොමැති බව සලකන විට

භාවිතය

git amend-to <REV> # e.g.
git amend-to HEAD~1
git amend-to aaaa1111

නම amend-toසුදුසු IMHO ලෙස පෙනේ. ප්‍රවාහය සමඟ සසඳන්න --amend:

git add . && git commit --amend --no-edit
# vs
git add . && git amend-to <REV>

පැහැදිලි කිරීම

  • git config --global alias.<NAME> '!<COMMAND>'- git <NAME>නොවන විධානයක් ක්‍රියාත්මක කරන ගෝලීය git අන්වර්ථයක් නිර්මාණය කරයි<COMMAND>
  • f() { <BODY> }; f - "නිර්නාමික" bash ශ්‍රිතයක්.
  • SHA=`git rev-parse "$1"`; - තර්කය git revision බවට පරිවර්තනය කර ප්‍රති result ලය විචල්‍යයට පවරයි SHA
  • git commit --fixup "$SHA"- සවි කිරීම-කැපවීම SHA. ලියකියවිලි බලන්නgit-commit
  • GIT_SEQUENCE_EDITOR=true git rebase --interactive --autosquash "$SHA^"
    • git rebase --interactive "$SHA^" කොටස වෙනත් පිළිතුරු වලින් ආවරණය කර ඇත.
    • --autosquashයනු කුමක් සමඟද යන්න git commit --fixup, වැඩි විස්තර සඳහා git-rebaseලියකියවිලි බලන්න
    • GIT_SEQUENCE_EDITOR=trueමුළු දේම අන්තර්ක්‍රියාකාරී නොවන බවට පත් කරන්නේ එයයි. මෙම බ්ලොග් සටහනෙන් මම ඉගෙන ගත් මෙම කඩුල්ල .

1
කෙනෙකුට amend-toඅස්ථායී ලිපිගොනු හැසිරවිය හැකිය: git config --global alias.amend-to '!f() { SHA=git rev-parse "$ 1"; git stash -k && git commit --fixup "$SHA" && GIT_SEQUENCE_EDITOR=true git rebase --interactive --autosquash "$SHA^" && git stash pop; }; f'
Dethariel

2
මෙම ක්‍රමවේදය සමඟ ඇති එක් කරුණක් නම්, එය සම්බන්ධ නොවූ නිවැරදි කිරීම් යෙදිය හැකි වීමයි.
සීරෝ සැන්ටිලි 郝海东 冠状 病 六四 事件 法轮功

බැඳීමේ පණිවිඩය වෙනස් කිරීම ප්‍රශ්නයේ කාරණය නොවේද? මෙම පිළිතුර එයට ආමන්ත්‍රණය නොකරන නිසා හෝ අවම වශයෙන් කෙලින්ම නොවේ.
wytten

කැපවීමේ පණිවිඩය වෙනස් කිරීම ගැන ප්‍රශ්නය අසන්නේ නැත, එය හෙඩ් නොවන බැඳීම වෙනස් කිරීමකි. එබැවින් ඔබේ ප්‍රශ්නයට පිළිතුරක් වනුයේ “නැත, එය ප්‍රශ්නයේ කාරණය නොවේ”
ඩෙතාරියෙල්

මම ව්‍යාකූල වී සිටිමි, එබැවින් අපි බැඳීම් පණිවිඩය වෙනස් කරන්නේ කෙසේද?
ggb667

8

ස්වයංක්‍රීය අන්තර්ක්‍රියාකාරී නැවත සැකසීමේ සංස්කරණයෙන් පසුව කැපවීම ආපසු හැරවීම සිදුකිරීමට සූදානම්

අතීත කැපවීමක් නිතර නිතර නිවැරදි කරන බව මට පෙනී ගියේය.

වැඩ ප්‍රවාහය මෙන්න:

  1. git commit-edit <commit-hash>
    

    මෙය ඔබට සංස්කරණය කිරීමට අවශ්‍ය කැපවීම අතහැර දමනු ඇත.

  2. කැපවීම මුලින් සිදු වූවා නම් එය නිවැරදි කර වේදිකා ගත කරන්න.

    (ඔබ සිදු git stash saveනොකරන ඕනෑම ලිපිගොනු තබා ගැනීමට ඔබට භාවිතා කිරීමට අවශ්‍ය විය හැකිය )

  3. සමඟ බැඳීම නැවත කරන්න --amend, උදා:

    git commit --amend
    
  4. නැවත පිරවීම සම්පූර්ණ කරන්න:

    git rebase --continue
    

ඉහත ක්‍රියා කිරීමට, පහත ස්ක්‍රිප්ට් git-commit-editඔබේ කොතැනක හෝ ක්‍රියාත්මක කළ හැකි ගොනුවකට දමන්න $PATH:

#!/bin/bash

set -euo pipefail

script_name=${0##*/}

warn () { printf '%s: %s\n' "$script_name" "$*" >&2; }
die () { warn "$@"; exit 1; }

[[ $# -ge 2 ]] && die "Expected single commit to edit. Defaults to HEAD~"

# Default to editing the parent of the most recent commit
# The most recent commit can be edited with `git commit --amend`
commit=$(git rev-parse --short "${1:-HEAD~}")
message=$(git log -1 --format='%h %s' "$commit")

if [[ $OSTYPE =~ ^darwin ]]; then
  sed_inplace=(sed -Ei "")
else
  sed_inplace=(sed -Ei)
fi

export GIT_SEQUENCE_EDITOR="${sed_inplace[*]} "' "s/^pick ('"$commit"' .*)/edit \\1/"'
git rebase --quiet --interactive --autostash --autosquash "$commit"~
git reset --quiet @~ "$(git rev-parse --show-toplevel)"  # Reset the cache of the toplevel directory to the previous commit
git commit --quiet --amend --no-edit --allow-empty  #  Commit an empty commit so that that cache diffs are un-reversed

echo
echo "Editing commit: $message" >&2
echo

7

මෙම ප්‍රවේශයට පැමිණියේය (එය බොහෝ විට අන්තර්ක්‍රියාකාරී නැවත භාවිතා කිරීම හා සමාන වේ) නමුත් මට නම් එය සරල ය.

සටහන: මම මෙම ප්‍රවේශය ඉදිරිපත් කරන්නේ එදිනෙදා විකල්පයකට වඩා ඔබට කළ හැකි දේ නිදර්ශනය කිරීම සඳහා ය. එයට පියවර රාශියක් ඇති හෙයින් (සමහර විට සමහර අවවාද.)

ඔබට බැඳීම වෙනස් කිරීමට අවශ්‍ය යැයි පවසන්න, ඔබ 0දැනට සිටීfeature-branch

some-commit---0---1---2---(feature-branch)HEAD

මෙම කැපවීම පරීක්ෂා කර අ quick-branch. ඔබේ විශේෂාංග ශාඛාව ප්‍රතිසාධන ලක්ෂ්‍යයක් ලෙස ක්ලෝන කළ හැකිය (ආරම්භ කිරීමට පෙර).

?(git checkout -b feature-branch-backup)
git checkout 0
git checkout -b quick-branch

ඔබට දැන් මේ වගේ දෙයක් ලැබෙනු ඇත:

0(quick-branch)HEAD---1---2---(feature-branch)

අදියර වෙනස් කිරීම, අනෙක් සියල්ල ගබඩා කිරීම.

git add ./example.txt
git stash

වෙනස්කම් සිදු කර නැවත පරීක්ෂා කරන්න feature-branch

git commit --amend
git checkout feature-branch

ඔබට දැන් මේ වගේ දෙයක් ලැබෙනු ඇත:

some-commit---0---1---2---(feature-branch)HEAD
           \
             ---0'(quick-branch)

Rebase feature-branchමතට quick-branch(ඔබට කවර හෝ ගැටුම් නිරාකරණය). තොගයක් යොදන්න සහ ඉවත් කරන්න quick-branch.

git rebase quick-branch
git stash pop
git branch -D quick-branch

ඔබ අවසන් වන්නේ:

some-commit---0'---1'---2'---HEAD(feature-branch)

Git අනුපිටපත් නොකරනු ඇත (මට කොතරම් දුරට කිව නොහැකි වුවද) නැවත ප්‍රතිස්ථාපනය කිරීමේදී 0 සිදු වේ.

සටහන: අප මුලින් වෙනස් කිරීමට අදහස් කළ කැපවීමෙන් පටන් ගෙන සියලු බැඳීම් හැෂ් වෙනස් වේ.


7

git stash+ rebaseස්වයංක්‍රීයකරණය

ගෙරිට් සමාලෝචන සඳහා මට පැරණි බැඳීමක් වෙනස් කිරීමට අවශ්‍ය වූ විට, මම කරමින් සිටියේ:

git-amend-old() (
  # Stash, apply to past commit, and rebase the current branch on to of the result.
  current_branch="$(git rev-parse --abbrev-ref HEAD)"
  apply_to="$1"
  git stash
  git checkout "$apply_to"
  git stash apply
  git add -u
  git commit --amend --no-edit
  new_sha="$(git log --format="%H" -n 1)"
  git checkout "$current_branch"
  git rebase --onto "$new_sha" "$apply_to"
)

GitHub ඉහළට .

භාවිතය:

  • ප්‍රභව ගොනුව වෙනස් කරන්න, git addදැනටමත් repo හි තිබේ නම් අවශ්‍ය නොවේ
  • git-amend-old $old_sha

--autosquashසම්බන්ධයක් නැති වෙනත් සවි කිරීම් ස්කොෂ් නොකරන බැවින් මම මේකට කැමතියි .


ඉතා හොඳ ක්‍රියාකාරිත්වයක්, මෙය git amendවර්තමාන තොගය භාවිතා කරමින් නිශ්චිත බැඳීමකට වෙනස්කම් යෙදීම සඳහා සුපුරුදු විකල්පයක් විය යුතුය , ඉතා දක්ෂයි!
caiohamamura

6

අන්තර්ක්‍රියාකාරී නොවන විධානයක් ලබා ගැනීම සඳහා, මෙම අන්තර්ගතය සමඟ පිටපතක් ඔබේ PATH හි තබන්න:

#!/bin/sh
#
# git-fixup
# Use staged changes to modify a specified commit
set -e
cmt=$(git rev-parse $1)
git commit --fixup="$cmt"
GIT_EDITOR=true git rebase -i --autosquash "$cmt~1"

ඔබගේ වෙනස්කම් (සමඟ git add) වේදිකා ගත කර එය ක්‍රියාත්මක කරන්න git fixup <commit-to-modify>. ඇත්ත වශයෙන්ම, ඔබට ගැටුම් ඇති වුවහොත් එය තවමත් අන්තර්ක්‍රියාකාරී වනු ඇත.


1
මෙය හොඳින් ක්‍රියාත්මක වේ. කැපවූ කට්ටලයක් පරිපූර්ණ කිරීම සඳහා අපිරිසිදු ගසක කැබලි සවි කිරීම සඳහා මම අමතර ක්‍රියාකාරිත්වයක් එකතු කළෙමි. `dirtydiff = $ (git diff); if ["$ {dirtydiff}"! = ""]; ඉන්පසු "අපිරිසිදු ගස කැපීම"> & 2; git stash; fi;
සයිමන් ෆෙල්ට්මන්

5

මම මේක විසඳුවා,

1) මට අවශ්‍ය වෙනස්කම් සමඟ නව බැඳීමක් ඇති කිරීමෙන් ..

r8gs4r commit 0

2) එය සමඟ ඒකාබද්ධ වීමට අවශ්‍ය කුමන කැපවීමදැයි මම දනිමි. එය 3 වේ.

එබැවින්, git rebase -i HEAD~4# 4 නිරූපණය කරන්නේ මෑත කාලීන බැඳීම් 4 යි (මෙහි 3 කැපවීම 4 වන ස්ථානයේ ඇත)

3) අන්තර්ක්‍රියාකාරී ප්‍රතිප්‍රහාරයේදී මෑත කාලීන කැපවීම පතුලේ පිහිටා ඇත. එය එක හා සමානව පෙනෙනු ඇත,

pick q6ade6 commit 3
pick vr43de commit 2
pick ac123d commit 1
pick r8gs4r commit 0

4) මෙහිදී ඔබට නිශ්චිත එකක් සමඟ ඒකාබද්ධ වීමට අවශ්‍ය නම් අපි බැඳීම නැවත සකස් කළ යුතුයි. එය එසේ විය යුතුය,

parent
|_child

pick q6ade6 commit 3
f r8gs4r commit 0
pick vr43de commit 2
pick ac123d commit 1

නැවත සකසන්න පසු ඔබ වෙනුවට අවශ්ය p pickසමග f( fixup පණිවිඩය සිදු තොරව ඒකාබද්ධ කරනු ඇත) හෝ s( ස්කොෂ් බැඳීම් පණිවිඩය සමඟ ඒකාබද්ධ කිරීම ධාවන කාලය තුළ වෙනස් විය හැක)

ඉන්පසු ඔබේ ගස බේරා ගන්න.

දැන් පවත්නා බැඳීම සමඟ ඒකාබද්ධ කරන්න.

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


අන්තර්ක්‍රියාකාරී ප්‍රතිප්‍රහාරයක් අතරතුර සජීවී වෙනස් කිරීමක් කිරීමට ඔබට අවශ්‍ය නැතිනම් මෙය හොඳ විසඳුමකි.
ඩුනාටෝටෝටෝස්

4

හොඳම විකල්පය වන්නේ "අන්තර්ක්‍රියාකාරී නැවත සැකසුම් විධානය" භාවිතා කිරීමයි.

මෙම git rebaseවිධානය ඇදහිය නොහැකි තරම් බලවත් ය. බැඳීම් පණිවිඩ සංස්කරණය කිරීමට , කොමිස් ඒකාබද්ධ කිරීමට, ඒවා නැවත ඇණවුම් කිරීමට ...

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

backupනැවත ප්‍රතිස්ථාපනය කිරීමට පෙර ශාඛාවක් සෑදීම රෙකමදාරු කරනු ලැබේ, එවිට ඔබට පාලනය කළ නොහැකි දේවල් සොයාගත් සෑම විටම ඔබට පෙර තත්වයට ආපසු යා හැකිය.

දැන් මෙම විධානය භාවිතා කරන්නේ කෙසේද?

git rebase -i <base> 

-i"අන්තර්ක්‍රියාකාරී" සඳහා පෙනී සිටින්න . අන්තර්ක්‍රියාකාරී නොවන ආකාරයෙන් ඔබට ප්‍රතිප්‍රහාරයක් කළ හැකි බව සලකන්න. උදා:

#interactivly rebase the n commits from the current position, n is a given number(2,3 ...etc)
git rebase -i HEAD~n 

HEADඔබගේ වර්තමාන ස්ථානය දක්වයි (ශාඛා නාමය හෝ SHA කැපවීම ද විය හැකිය). මෙම ~nඅදහස් වන්නේ "n beforeé, ඒ නිසා HEAD~nඔබ දැනට එක් පෙර අනාචාරයේ n" ලැයිස්තුව වනු ඇත ".

git rebase වැනි වෙනස් විධානයන් ඇත:

  • pනැත්නම් pickකැපවීම දිගටම කරගෙන යන්න.
  • rහෝ reword: බැඳීමේ අන්තර්ගතය තබා ගැනීමට නමුත් බැඳීම් පණිවිඩය වෙනස් කිරීමට.
  • sහෝ squash: මෙම බැඳීමේ වෙනස්වීම් පෙර කළ බැඳීමට ඒකාබද්ධ කිරීම (ලැයිස්තුවේ ඊට ඉහළින් ඇති කැපවීම).
  • ... ආදිය.

    සටහන: දේවල් සරල කිරීම සඳහා ඔබේ කේත සංස්කාරකය සමඟ Git වැඩ කිරීම වඩා හොඳය. උදාහරණයක් ලෙස ඔබ දෘශ්‍ය කේතය භාවිතා කරන්නේ නම් ඔබට මේ ආකාරයට එකතු කළ හැකිය git config --global core.editor "code --wait". නැතහොත් ඔබේ කේත සංස්කාරකය GIT සමඟ වඩාත් කැමති ලෙස ඇසුරු කරන්නේ කෙසේදැයි ඔබට ගූගල් හි සෙවිය හැකිය.

උදාහරණය git rebase

මා කළ අන්තිම කොමිස් 2 වෙනස් කිරීමට මට අවශ්‍ය විය, එබැවින් මම මේ ආකාරයට ක්‍රියා කරමි:

  1. වත්මන් කොමිස් ප්‍රදර්ශනය කරන්න:
    #This to show all the commits on one line
    $git log --oneline
    4f3d0c8 (HEAD -> documentation) docs: Add project description and included files"
    4d95e08 docs: Add created date and project title"
    eaf7978 (origin/master , origin/HEAD, master) Inital commit
    46a5819 Create README.md
    
  2. දැන් මම git rebaseඅවසන් වරට කළ පණිවිඩ 2 වෙනස් කිරීමට භාවිතා කරමි : $git rebase -i HEAD~2 එය කේත සංස්කාරකය විවෘත කර මෙය පෙන්වයි:

    pick 4d95e08 docs: Add created date and project title
    pick 4f3d0c8 docs: Add project description and included files
    
    # Rebase eaf7978..4f3d0c8 onto eaf7978 (2 commands)
    #
    # Commands:
    # p, pick <commit> = use commit
    # r, reword <commit> = use commit, but edit the commit message
    ...
    

    මට මේ 2 සඳහා වන බැඳීම් පණිවිඩය වෙනස් කිරීමට අවශ්‍ය බැවින්. ඒ නිසා මම ටයිප් ඇත rහෝ rewordවෙනුවට pick. ඉන්පසු ගොනුව සුරකිමින් ටැබ් එක වසා දමන්න. rebaseඑය බහු-පියවර ක්‍රියාවලියක ක්‍රියාත්මක වන බව සලකන්න , ඊළඟ පියවර වන්නේ පණිවිඩ යාවත්කාලීන කිරීමයි. කොමිස් ප්‍රතිලෝම කාලානුක්‍රමික අනුපිළිවෙලින් ප්‍රදර්ශනය වන බැවින් අවසාන කැපවීම එම එකෙහි ද පළමු බැඳීම පළමු පේළියේ ද යනාදිය ප්‍රදර්ශනය කෙරේ.

  3. පණිවිඩ යාවත්කාලීන කරන්න: පළමු පණිවිඩය යාවත්කාලීන කරන්න:

    docs: Add created date and project title to the documentation "README.md"
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    ...
    

    සුරකින්න සහ වසා දමන්න දෙවන පණිවිඩය සංස්කරණය කරන්න

    docs: Add project description and included files to the documentation "README.md"
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    ...
    

    සුරකින්න සහ වසා දමන්න.

  4. ප්‍රතිප්‍රහාරය අවසන් වන විට ඔබට මෙවැනි පණිවිඩයක් ලැබෙනු ඇත: Successfully rebased and updated refs/heads/documentationඑයින් අදහස් වන්නේ ඔබ සාර්ථක වන බවයි. ඔබට වෙනස්කම් පෙන්විය හැකිය:

    5dff827 (HEAD -> documentation) docs: Add project description and included files to the documentation "README.md"
    4585c68 docs: Add created date and project title to the documentation "README.md"
    eaf7978 (origin/master, origin/HEAD, master) Inital commit
    46a5819 Create README.md
    

    එය නව පරිශීලකයින්ට උපකාරී වනු ඇතැයි මම ප්‍රාර්ථනා කරමි :).


2

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


0

ඔබ මේ වන විටත් කොමිස් තල්ලු කර නොමැති නම්, ඔබට පෙර කැපවීමකට ආපසු යා හැකිය git reset HEAD^[1,2,3,4...]

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

git commit <file1> -m "Updated files 1 and 2"
git commit <file3> -m "Updated file 3"

අපොයි, පළමු කැපවීමට ගොනු 2 එක් කිරීමට අමතක විය ...

git reset HEAD^1 // because I only need to go back 1 commit

git add <file2>

මෙය පළමු බැඳීමට ගොනු 2 එකතු කරයි.


0

හොඳයි, මෙම විසඳුම ඉතා මෝඩ බවක් පෙනෙන්නට තිබුණත් සමහර තත්වයන් යටතේ ඔබව බේරා ගත හැකිය.

මගේ මිතුරෙකු අහම්බෙන් ඉතා විශාල ලිපිගොනු කීපයක් (ස්වයංක්‍රීයව ජනනය කරන ලද ලිපිගොනු 3GB සිට 5GB දක්වා පරාසයක) සිදු කර, පසුව git pushතවදුරටත් ක්‍රියාත්මක නොවන ගැටලුව අවබෝධ කර ගැනීමට පෙර අමතර කේත කිහිපයක් ඒ මත සිදු කළේය !

ලිපිගොනු ලැයිස්තුගත කර ඇති .gitignoreනමුත් බහාලුම් ෆෝල්ඩරය නැවත නම් කිරීමෙන් පසු ඒවා නිරාවරණය වී කැපවී ඇත! දැන් ඊට ඉහළින් තවත් කේත කිහිපයක් තිබේ, නමුත් pushඑය සදහටම ක්‍රියාත්මක වෙමින් පැවතුනි (GB දත්ත උඩුගත කිරීමට උත්සාහ කරයි!) අවසානයේදී ගිතූබ්ගේ ගොනු ප්‍රමාණයේ සීමාවන් නිසා එය අසාර්ථක වනු ඇත .

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

ඉතින්, මා ඉදිරිපත් කළ විසඳුම වූයේ:

  1. වත්මන් git ෆෝල්ඩරය නැවත නම් කරන්න ~/Project-old.
  2. ගිතුබ් (සිට ~/Project) දක්වා නැවතත් git ෆෝල්ඩරය ක්ලෝන කරන්න .
  3. එකම ශාඛාවට පිටවීම.
  4. ෆෝල්ඩරයේ cp -rසිට අතින් ගොනු අතින් . ~/Project-old~/Project
  5. පරීක්ෂා කිරීමට අවශ්‍ය නොවන දැවැන්ත ලිපිගොනු mvසංස්කරණය කර .gitignoreනිසි පරිදි ඇතුළත් කර ඇති බවට වග බලා ගන්න .
  6. .gitමෑතකදී ක්ලෝන කරන ලද ෆෝල්ඩරය නැවත ලියන්නේ නැති බවට වග බලා ගන්න~/Project කරන ලද පැරණි . ගැටළු සහගත ඉතිහාසයේ ලොග් ජීවත් වන්නේ එතැනිනි!
  7. දැන් වෙනස්කම් සමාලෝචනය කරන්න. ගැටළු සහගත ලිපිගොනු හැරුණු විට එය මෑතදී සිදු කරන ලද සියලු කොමිෂන් සභා විය යුතුය.
  8. අවසාන වශයෙන් වෙනස්කම් සිදු කරන්න, එවිට එය හොඳයි push.

මෙම විසඳුමේ ඇති ලොකුම ගැටළුව නම්, එය සමහර ලිපිගොනු අතින් පිටපත් කිරීම සමඟ කටයුතු කරන අතර, එය මෑතදී කළ සියලු බැඳීම් එකකට ඒකාබද්ධ කරයි (පැහැදිලිවම නව බැඳීම්-හැෂ් සමඟ) බී

විශාල වාසි වන්නේ, එය සෑම පියවරකදීම ඉතා පැහැදිලිය, එය විශාල ලිපිගොනු සඳහා (මෙන්ම සංවේදී ඒවා සඳහා) විශිෂ්ට ලෙස ක්‍රියා කරන අතර එය ඉතිහාසයේ කිසිදු හෝඩුවාවක් ඉතිරි නොකරයි!

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.