මම දැන් අවුරුදු ගණනාවක් තිස්සේ ආදම්ගේ පිළිතුර භාවිතා කර ඇත්තෙමි. එයින් කියැවුණේ, මා බලාපොරොත්තු වූ පරිදි හැසිරෙන්නේ නැති අවස්ථා කිහිපයක් ඇති බවයි:
- “මාස්ටර්” යන වචනය අඩංගු ශාඛා නොසලකා හරින ලදි, උදා: “නොට්මාස්ටර්” හෝ “මාස්ටර්”, ප්රධාන ශාඛාවට පමණක්
- "dev" යන වචනය අඩංගු ශාඛා නොසලකා හරින ලදි, උදා: dev ශාඛාවට වඩා "dev-test"
- වත්මන් ශාඛාවේ හෙඩ් වෙතින් ළඟා විය හැකි ශාඛා මකා දැමීම (එනම්, අනිවාර්යයෙන්ම ප්රධාන නොවේ)
- වෙන් කළ HEAD තත්වයේ දී, වර්තමාන බැඳීමෙන් ළඟා විය හැකි සෑම ශාඛාවක්ම මකා දැමීම
1 සහ 2 ආමන්ත්රණය කිරීමට සරල විය, රීජෙක්ස් හි වෙනසක් පමණි. 3 රඳා පවතින්නේ ඔබට අවශ්ය දේවල සන්දර්භය මත ය (එනම්, ප්රධාන හා ඔබේ වර්තමාන ශාඛාවට එරෙහිව ඒකාබද්ධ නොකළ ශාඛා පමණක් මකා දමන්න). 4 git reflog
ඔබ නොදැනුවත්වම මෙය වෙන් කළ හෙඩ් තත්වයට ගෙන ගියහොත් විනාශකාරී විය හැකිය (ආපසු අයකර ගත හැකි වුවද ).
අවසාන වශයෙන්, මට අවශ්ය වූයේ මේ සියල්ල වෙනම (බාෂ් | රූබි | පයිතන්) ස්ක්රිප්ට් අවශ්ය නොවන එක් ලයිනර් එකක තිබීමයි.
ටීඑල්; ඩී.ආර්
විකල්ප -f
ධජයක් පිළිගන්නා "අතුගෑම" යන අන්වර්ථ නාමයක් සාදන්න :
git config --global alias.sweep '!git branch --merged $([[ $1 != "-f" ]] \
&& git rev-parse master) | egrep -v "(^\*|^\s*(master|develop)$)" \
| xargs git branch -d'
එය සමඟ ආයාචනා කරන්න:
git sweep
හෝ:
git sweep -f
දිගු, සවිස්තරාත්මක පිළිතුර
සමහර ශාඛා සමඟ නිදර්ශන git repo එකක් නිර්මාණය කිරීම මට පහසු වූ අතර නිවැරදි හැසිරීම පරීක්ෂා කිරීමට කැපවිය:
තනි කැපවීමකින් නව git repo එකක් සාදන්න
mkdir sweep-test && cd sweep-test && git init
echo "hello" > hello
git add . && git commit -am "initial commit"
නව ශාඛා කිහිපයක් සාදන්න
git branch foo && git branch bar && git branch develop && git branch notmaster && git branch masterful
git branch --list
bar
develop
foo
* master
masterful
notmaster
කැමති හැසිරීම: ඒකාබද්ධ කළ සියලුම ශාඛා තෝරන්න: මාස්ටර්, සංවර්ධනය හෝ ධාරාව
මුල් රීජෙක්ස් "මාස්ටර්ෆුල්" සහ "නොට්මාස්ටර්" යන ශාඛා මග හැරේ:
git checkout foo
git branch --merged | egrep -v "(^\*|master|dev)"
bar
යාවත්කාලීන කරන ලද රීජෙක්ස් සමඟ (දැන් එය "dev" වෙනුවට "සංවර්ධනය" බැහැර කරයි):
git branch --merged | egrep -v "(^\*|^\s*(master|develop)$)"
bar
masterful
notmaster
ශාඛා foo වෙත මාරුවන්න, නව කැපවීමක් කරන්න, ඉන්පසු foo මත පදනම්ව නව ශාඛාවක්, foobar පරීක්ෂා කරන්න:
echo "foo" > foo
git add . && git commit -am "foo"
git checkout -b foobar
echo "foobar" > foobar
git add . && git commit -am "foobar"
මගේ වර්තමාන ශාඛාව foobar වන අතර, මට මැකීමට අවශ්ය ශාඛා ලැයිස්තුගත කිරීම සඳහා ඉහත විධානය නැවත ක්රියාත්මක කරන්නේ නම්, එය "foo" ශාඛාව මාස්ටර් සමඟ ඒකාබද්ධ කර නොතිබුණද ඇතුළත් වේ:
git branch --merged | egrep -v "(^\*|^\s*(master|develop)$)"
bar
foo
masterful
notmaster
කෙසේ වෙතත්, මම එකම විධානය මාස්ටර් මත ධාවනය කරන්නේ නම්, "foo" ශාඛාව ඇතුළත් නොවේ:
git checkout master && git branch --merged | egrep -v "(^\*|^\s*(master|develop)$)"
bar
masterful
notmaster
මෙය හුදෙක් git branch --merged
වෙනත් ආකාරයකින් නිශ්චිතව දක්වා නොමැති නම් වත්මන් ශාඛාවේ හෙඩ් වෙත පෙරනිමි නිසාය . අවම වශයෙන් මගේ කාර්ය ප්රවාහය සඳහා, දේශීය ශාඛා මාස්ටර් සමඟ ඒකාබද්ධ කර ඇත්නම් මිස මකා දැමීමට මට අවශ්ය නැත, එබැවින් මම පහත ප්රභේදයට කැමැත්තෙමි:
git checkout foobar
git branch --merged $(git rev-parse master) | egrep -v "(^\*|^\s*(master|develop)$)"
bar
masterful
notmaster
වෙන්වූ HEAD තත්වය
හි පෙරනිමි හැසිරීම මත රඳා සිටීම, git branch --merged
වෙන් වූ HEAD තත්වයේ ඊටත් වඩා වැදගත් ප්රතිවිපාක ඇත:
git checkout foobar
git checkout HEAD~0
git branch --merged | egrep -v "(^\*|^\s*(master|develop)$)"
bar
foo
foobar
masterful
notmaster
මෙය මා දැන් සිටි ශාඛාව වන "ෆූබාර්" සහ "ෆූ" සමඟ මකා දැමෙනු ඇත, එය නිසැකවම අපේක්ෂිත ප්රති come ලය නොවේ. කෙසේ වෙතත්, අපගේ සංශෝධිත විධානය සමඟ:
git branch --merged $(git rev-parse master) | egrep -v "(^\*|^\s*(master|develop)$)"
bar
masterful
notmaster
සත්ය මකා දැමීම ඇතුළුව එක් පේළියක්
git branch --merged $(git rev-parse master) | egrep -v "(^\*|^\s*(master|develop)$)" | xargs git branch -d
සියල්ලම "අතුගා දැමීම" යන අන්වර්ථ නාමයෙන් ඔතා ඇත:
git config --global alias.sweep '!git branch --merged $([[ $1 != "-f" ]] \
&& git rev-parse master) | egrep -v "(^\*|^\s*(master|develop)$)" \
| xargs git branch -d'
අන්වර්ථය විකල්ප -f
ධජයක් පිළිගනී . පෙරනිමි හැසිරීම වන්නේ මාස්ටර් සමඟ ඒකාබද්ධ කර ඇති ශාඛා පමණක් මකා දැමීමයි, නමුත් -f
ධජය මඟින් වර්තමාන ශාඛාවට ඒකාබද්ධ කරන ලද ශාඛා මකා දමනු ඇත.
git sweep
Deleted branch bar (was 9a56952).
Deleted branch masterful (was 9a56952).
Deleted branch notmaster (was 9a56952).
git sweep -f
Deleted branch foo (was 2cea1ab).
git branch -D
ඕනෑම ශාඛාවක් ඒකාබද්ධ වී තිබේද නැද්ද යන්න මකා දමයි.