আমি আউটপুটে তালিকাভুক্ত সমস্ত শাখা মুছতে চাই ...
$ git branch
... তবে বর্তমান শাখা রাখা, একধাপে । এটা কি সম্ভব? যদি তাই হয়, কিভাবে?
আমি আউটপুটে তালিকাভুক্ত সমস্ত শাখা মুছতে চাই ...
$ git branch
... তবে বর্তমান শাখা রাখা, একধাপে । এটা কি সম্ভব? যদি তাই হয়, কিভাবে?
উত্তর:
@ পঙ্কিজের উত্তরের ভিত্তিতে আমি দুটি গিট এলিয়াস তৈরি করেছি:
[alias]
# Delete all local branches but master and the current one, only if they are fully merged with master.
br-delete-useless = "!f(){\
git branch | grep -v "master" | grep -v ^* | xargs git branch -d;\
}; f"
# Delete all local branches but master and the current one.
br-delete-useless-force = "!f(){\
git branch | grep -v "master" | grep -v ^* | xargs git branch -D;\
}; f"
যোগ করা হবে ~/.gitconfig
এবং, যেমনটি টোরিক উল্লেখ করেছেন:
নোট করুন যে ছোট হাতের অক্ষর
-d
একটি "সম্পূর্ণরূপে মার্জড" শাখা মুছে ফেলবে না (ডকুমেন্টেশন দেখুন)। ব্যবহারের ফলে এই-D
জাতীয় শাখাগুলি মুছে ফেলা হবে , এমনকি যদি এটি "হারিয়ে যাওয়া" হওয়ার অঙ্গীকার করে; এটিকে খুব যত্ন সহকারে ব্যবহার করুন , কারণ এটি শাখাটিও পুনর্বিবেচনাগুলি মুছে দেয়, যাতে স্বাভাবিক "দুর্ঘটনাজনিত মোছা থেকে পুনরুদ্ধার" স্টাফ কাজ করে না।
মূলত, -force
সংস্করণটি কখনই ব্যবহার করবেন না যদি আপনি 300% নিশ্চিত না হন যে আপনি গুরুত্বপূর্ণ কিছু হারাবেন না। কারণ এটি চিরতরে হারিয়ে গেছে ।
git branch branchname commitid
$ git branch | grep -v "master" | xargs git branch -D
মাস্টার ব্যতীত সমস্ত শাখা মুছে ফেলবে (আপনি যে শাখাকে রাখতে চান তা দিয়ে মাস্টার প্রতিস্থাপন করুন, তবে এটি মাস্টার মুছে ফেলবে)
grep -v ^*
।
master-copy
, উদাহরণস্বরূপ
grep -v "^ *master$"
grep -v "master\|my-other-branch"
।
প্রথম (শাখা রাখতে> চান সুইচ প্রাক্তন : মাস্টার ):
git checkout master
দ্বিতীয় ( নিশ্চিত হন যে আপনি মাস্টার আছেন )
git branch -D $(git branch)
git branch -D $(git branch).Trim()
।
$(git branch)
উদ্ধৃতি দেওয়ার কথা ? এটি কাজ করে না: ত্রুটি: শাখা '$ (গিট' পাওয়া যায় নি error ত্রুটি: শাখা 'শাখা)' পাওয়া যায় নি।
git branch -d
(বা -D
) একাধিক শাখার নামকে অনুমতি দেয় তবে কমপক্ষে কিছুটা কোড না লিখে "স্বয়ং যে সমস্ত স্থানীয় শাখা এখন আমি আছি সেগুলি বাদ দিয়ে" স্বয়ংক্রিয়ভাবে সরবরাহ করা কিছুটা জটিল।
"সেরা" (আনুষ্ঠানিকভাবে সঠিক) পদ্ধতিটি git for-each-ref
শাখার নামগুলি পেতে ব্যবহার করা হয়:
git for-each-ref --format '%(refname:short)' refs/heads
তবে আপনি কোন শাখায় git symbolic-ref HEAD
রয়েছেন তা নির্ধারণ করা আরও শক্ত ( যদি আপনি অভিনব স্ক্রিপ্ট লিখতে চান তবে এটির জন্য "আনুষ্ঠানিকভাবে সঠিক" পদ্ধতি)।
আরও সুবিধামতভাবে, আপনি ব্যবহার করতে পারেন git branch
, যা দুটি স্থানীয় স্থানের পূর্বে আপনার স্থানীয় শাখার নামগুলি বা (বর্তমান শাখার জন্য) একটি তারকাচিহ্ন দ্বারা প্রিন্ট করে *
। সুতরাং, *
সংস্করণটি মুছে ফেলার জন্য এটির মাধ্যমে চালান এবং আপনার স্পেস-বিভাজিত শাখার নামগুলি রেখে গেছে যা আপনি এর পরে প্রেরণ করতে পারবেন git branch -d
:
git branch -d $(git branch | grep -v '^*')
বা:
git branch | grep -v '^*' | xargs git branch -d
নোট করুন যে ছোট হাতের অক্ষর -d
একটি "সম্পূর্ণরূপে মার্জড" শাখা মুছে ফেলবে না (ডকুমেন্টেশন দেখুন)। ব্যবহারের -D
ফলে এই জাতীয় শাখাগুলি মুছে ফেলা হবে, এমনকি যদি এটি "হারিয়ে যাওয়া" হওয়ার অঙ্গীকার করে; এটিকে খুব যত্ন সহকারে ব্যবহার করুন, কারণ এটি শাখাটিও পুনর্বিবেচনাগুলি মুছে দেয়, যাতে স্বাভাবিক "দুর্ঘটনাজনিত মোছা থেকে পুনরুদ্ধার" স্টাফ কাজ করে না।
git branch -D $(git branch | grep -v '^*')
, যদি আপনি সেই শাখাগুলি মুছতে চান যা মার্জ হয়েছে।
সমস্ত মার্জ করা শাখা সরানোর জন্য (বর্তমান ব্যতীত -v ‘*’
):
git branch --merged | grep -v '*' | xargs git branch -D
রেপো সম্পূর্ণ ক্লিন আপের জন্যও আমি এই জাতীয় আদেশ দিয়েছি:
alias git-clean="git branch | grep -v '*' | grep -v 'master' | xargs git branch -D && git reset --hard && git clean -d -x -f"
এখান থেকে নেওয়া ।
নির্দিষ্ট শাখা বাদে সমস্ত শাখা মুছুন :
git branch | grep -v "branch name" | xargs git branch -D
বিকাশ এবং মাস্টার বাদে সমস্ত স্থানীয় শাখা মুছুন
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
উইন্ডোজ জন্য, পাওয়ারশেল ব্যবহার করুন:
git branch | %{ $_.Trim() } | ?{ $_ -ne 'master' } | %{ git branch -D $_ }
আমি একবার আমার উইন্ডোজ পরিবেশের জন্য এই কনস্ট্রাক্টটি তৈরি করেছি। হতে পারে এটি অন্য কাউকে সাহায্য করবে। কার্যকর করার সময়, মাস্টার এবং বর্তমান শাখা মুছে ফেলা হয় না । অন্য সমস্ত মার্জ করা শাখা নির্বিশেষে মুছে ফেলা হবে।
@echo off
cd PATH_TO_YOUR_REPO
REM -- Variable declerations
set "textFile=tempBranchInfo.txt"
set "branchToKeep=master"
set "branchToReplaceWith="
git branch --merged > %textFile%
REM -- remove "master" from list to keep the branch
for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%textFile%" echo(!line:%branchToKeep%=%branchToReplaceWith%!
endlocal
)
REM -- execute branch delete commands
for /f "delims=" %%a in (%textFile%) do (
git branch -D %%a
)
REM -- remove temp-file with branch information inside
DEL %textFile%
REM -- show local branches after the cleaning
echo Local branches:
git branch
pause
exit
স্থানীয়ভাবে সমস্ত মার্জ করা শাখা মুছুন:
git branch -D `git branch --merged | grep -v \* | xargs`
নির্দিষ্ট শাখা বাদে সমস্ত শাখা মুছুন :
git branch | grep -v "branch name" | xargs git branch -D
বিকাশ এবং মাস্টার বাদে সমস্ত স্থানীয় শাখা মুছুন
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
সুতরাং আমি এখানে প্রচুর কঠোর কোডেড শাখার নাম দেখতে পাচ্ছি ... এবং আমি মনে করি যে এখানে আমার উত্তরটি প্রশ্নের উত্তর "বর্তমান শাখা" এর সাথে আরও সঠিক, যখন এটি একক রেখায় রাখে এবং আমার মতো নতুনদের বাশ দেওয়ার জন্য পাঠযোগ্য। ঠিক যেখানে creditণ দেওয়ার জন্য, উত্তরটি অবশ্যই @ পঙ্কিজের উত্তরের উপর ভিত্তি করে রয়েছে।
git branch | grep -v $(git branch --show-current) | xargs git branch -d
এবং আমি এটি আমার .বাশ_আলিয়াসে ডেবিয়ান পাশাপাশি একটি লাইনে আলাদা করে রেখেছি।
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(যদিও আমি মনে করি কিছু কমান্ড লাইনে সাব কমান্ড চালানোর জন্য কিছু ব্যাশ বৈশিষ্ট্য সক্ষম করা দরকার)
আমি এটি ব্যবহার করি কারণ আমি যা মুছতে চাই না তাতে আমি আরও বেশি নির্বাচনী হতে পারি। এই নীচের কমান্ডটি মাস্টার, বিকাশ এবং বর্তমান শাখা ব্যতীত প্রতিটি শাখা অপসারণ করে।
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
সুতরাং আমি এটি আমার মধ্যে রাখা ~/.zshrc
delete_branches() {
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
}
alias cleanup_branches=delete_branches
আইএমএইচও, স্থানীয় শাখা অপসারণের নিরাপদতম উপায়:
git branch -av | grep "\[gone\]" | awk '{print $1}' | xargs git branch -d
এছাড়াও, এই বিষয় সম্পর্কিত আরও তথ্য আপনি সমস্ত স্থানীয় গিট শাখা মুছতে পারেন
gone
চিহ্নিতকারীটি মুদ্রণ করতে আপনার ব্যবহার করা উচিত -vv
(দু'বার ভার্বোস), যদিও -a
আপনাকে সাহায্য করবে না (এটি দূরবর্তী শাখাগুলিরও তালিকাবদ্ধ করে)