أريد حذف فرع محليًا وعن بعد.
$ git branch -d remotes/Origin/bugfix
error: branch 'remotes/Origin/bugfix' not found.
$ git branch -d Origin/bugfix
error: branch 'Origin/bugfix' not found.
$ git branch -rd Origin/bugfix
Deleted remote branch Origin/bugfix (was 2a14ef7).
$ git Push
Everything up-to-date
$ git pull
From github.com:gituser/gitproject
* [new branch] bugfix -> Origin/bugfix
Already up-to-date.
ما الذي يجب علي فعله بطريقة مختلفة لحذف الفرع remotes/Origin/bugfix
بنجاح محليًا وعن بعد؟
$ git Push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>
لاحظ أنه في معظم الحالات يكون الاسم البعيد Origin
.
لحذف الفرع المحلي استخدم أحد الإجراءات التالية:
$ git branch -d branch_name
$ git branch -D branch_name
ملاحظة: يعد الخيار -d
اسمًا مستعارًا لـ --delete
، والذي يحذف الفرع فقط إذا كان قد تم دمجه بالفعل بالفعل في فرع المنبع الخاص به. يمكنك أيضًا استخدام -D
، وهو اسم مستعار لـ --delete --force
، والذي يحذف الفرع "بغض النظر عن حالته المدمجة." [المصدر: man git-branch
]
اعتبارًا من Git v1.7.0 ، يمكنك حذف فرع بعيد باستخدام
$ git Push <remote_name> --delete <branch_name>
والتي قد تكون أسهل للتذكر من
$ git Push <remote_name> :<branch_name>
الذي تمت إضافته في Git v1.5.0 "لحذف فرع بعيد أو علامة."
بدء تشغيل Git v2.8.0 يمكنك أيضًا استخدام git Push
مع خيار -d
كاسم مستعار لـ --delete
.
لذلك ، فإن إصدار Git الذي قمت بتثبيته سوف يحدد ما إذا كنت بحاجة إلى استخدام بناء الجملة أسهل أو أصعب.
من الفصل 3 من Pro Git بواسطة Scott Chacon:
حذف الفروع عن بعد
لنفترض أنك انتهيت من استخدام فرع بعيد - على سبيل المثال ، لقد انتهيت أنت والمتعاونون لديك من ميزة ودمجوها في الفرع الرئيسي لجهاز التحكم عن بُعد الخاص بك (أو أي فرع موجود في سطر الشفرة الثابت). يمكنك حذف فرع بعيد باستخدام بناء جملة
git Push [remotename] :[branch]
. إذا كنت ترغب في حذف فرع إصلاح الخادم من الخادم ، فقم بتشغيل ما يلي:$ git Push Origin :serverfix To [email protected]:schacon/simplegit.git - [deleted] serverfix
فقاعة. لا مزيد من فرع على الخادم الخاص بك. قد ترغب في متابعة هذه الصفحة ، لأنك ستحتاج إلى هذا الأمر ، ومن المحتمل أن تنسى بناء الجملة. هناك طريقة لتذكر هذا الأمر من خلال استدعاء بناء جملة
git Push [remotename] [localbranch]:[remotebranch]
الذي تخطناه قبل قليل. إذا تركت جزء[localbranch]
، فأنت تقول أساسًا ، "لا تأخذ شيئًا على جانبي وجعله[remotebranch]
".
أصدرت git Push Origin :bugfix
وعملت بشكل جميل. كان Scott Chacon على حق - سأريد أذن كلبي تلك الصفحة (أو أذن كلبي تقريبًا عن طريق الإجابة على هذا في Stack Overflow).
ثم يجب عليك تنفيذ هذا على الأجهزة الأخرى
git fetch --all --Prune
لنشر التغييرات.
إجابة Matthew رائعة لإزالة بعيد الفروع وأقدر أيضًا التفسير ، ولكن للتمييز البسيط بين الأمرين:
لإزالةفرع محليمن جهازك:
git branch -d {the_local_branch}
(استخدم -D
بدلاً من ذلك لفرض حذف الفرع دون التحقق من الحالة المدمجة)
لإزالةفرع بعيدمن الخادم:
git Push Origin --delete {the_remote_branch}
المرجع: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote
إذا كنت تريد توضيحات أكثر تفصيلاً للأوامر التالية ، فراجع الإجابات الطويلة في القسم التالي.
حذف فرع بعيد:
git Push Origin --delete <branch> # Git version 1.7.0 or newer
git Push Origin :<branch> # Git versions older than 1.7.0
حذف فرع محلي:
git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches
حذف فرع تتبع عن بعد محلي:
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter
git fetch <remote> --Prune # Delete multiple obsolete tracking branches
git fetch <remote> -p # Shorter
عند التعامل مع حذف الفروع محليًا وعن بعد ، ضع في اعتبارك أن هناك 3 فروع مختلفة معنية :
X
.X
.Origin/X
الذي يتتبع الفرع البعيد X
.الملصق الأصلي المستخدمة
git branch -rd Origin/bugfix
الذي حذف فقط فرع التتبع عن بعد المحلي Origin/bugfix
، وليس الفرع البعيد الفعلي bugfix
في Origin
.
لحذف هذا الفرع البعيد الفعلي ، تحتاج
git Push Origin --delete bugfix
تصف الأقسام التالية التفاصيل الإضافية التي يجب مراعاتها عند حذف الفروع عن بُعد والتتبع عن بُعد.
لاحظ أن حذف الفرع البعيد X
من سطر الأوامر باستخدام git Push
سيؤدي أيضًا إلى حذف فرع التتبع عن بُعد المحلي Origin/X
، لذلك ليس من الضروري تقليم فرع التتبع عن بُعد العتيق باستخدام git fetch --Prune
أو git fetch -p
لن يضر إذا فعلت ذلك على أي حال.
يمكنك التحقق من حذف فرع التتبع عن بُعد Origin/X
أيضًا عن طريق تشغيل ما يلي:
# View just remote-tracking branches
git branch --remotes
git branch -r
# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a
إذا لم تقم بحذف الفرع البعيد الخاص بك X
من سطر الأوامر (كما هو مذكور أعلاه) ، فستظل الريبو المحلي يحتوي على (فرع قديم الآن) Origin/X
. يمكن أن يحدث هذا إذا حذفت فرعًا بعيدًا مباشرةً من خلال واجهة ويب GitHub ، على سبيل المثال.
هناك طريقة نموذجية لإزالة فروع التتبع عن بُعد القديمة (منذ إصدار Git 1.6.6) هي ببساطة تشغيل git fetch
مع --Prune
أو -p
الأقصر. لاحظ أن هذا يزيل جميع فروع التتبع عن بُعد المحلية القديمة لأي فروع بعيدة لم تعد موجودة على جهاز التحكم عن بعد :
git fetch Origin --Prune
git fetch Origin -p # Shorter
هنا هو الاقتباس ذات الصلة من 1.6.6 ملاحظات الإصدار (منجم التركيز):
تعلمت "git fetch"
--all
و--multiple
options ، لتشغيل الجلب من العديد من المستودعات ، و--Prune
الخيار لإزالة فروع التتبع عن بُعد التي أصبحت قديمة. هذه تجعل "التحديث عن بُعد git" و "git remote Prune" أقل ضرورة (لا توجد خطة لإزالة "التحديث عن بعد" أو "بعيد عن بعد").
بدلاً من ذلك ، بدلاً من تشذيب الفروع المحلية القديمة للتتبع عن بُعد من خلال git fetch -p
، يمكنك تجنب إجراء العملية الإضافية للشبكة عن طريق إزالة الفرع (الفروع) يدويًا باستخدام إشارات --remote
أو -r
:
git branch --delete --remotes Origin/X
git branch -dr Origin/X # Shorter
لحذف الفرع البعيد:
git Push Origin --delete <your_branch>
لحذف الفرع المحلي ، لديك ثلاث طرق :
1: git branch -D <branch_name>
2: git branch --delete --force <branch_name> //same as -D
3: git branch --delete <branch_name> //error on unmerge
اشرح: حسنا ، فقط اشرح ما يحدث هنا!
ما عليك سوى القيام بـ git Push Origin --delete
إلى حذف فرعك البعيد فقط ، إضافة اسم الفرع في النهاية وسيؤدي ذلك إلى حذفه ودفعه إلى جهاز التحكم عن بُعد في نفس الوقت ...
أيضًا ، git branch -D
، الذي يحذف الفرع المحلي ببساطةفقط! ...
يرمز -D
إلى --delete --force
والتي ستحذف الفرع حتى لو لم يتم دمجها (فرض الحذف) ، ولكن يمكنك أيضًا استخدام -d
الذي يرمز لـ --delete
والذي يلقي خطأً يتعلق بحالة دمج الفرع ...
أنا أيضا إنشاء الصورة أدناه لإظهار الخطوات:
يمكنك أيضًا استخدام ما يلي لحذف الفرع البعيد
git Push --delete Origin serverfix
الذي يفعل نفس الشيء كما
git Push Origin :serverfix
ولكن قد يكون من الأسهل تذكره.
إذا كنت ترغب في حذف فرع ، فقم أولاً بتسجيل الخروج إلى الفرع بخلاف الفرع المراد حذفه.
git checkout other_than_branch_to_be_deleted
حذف الفرع المحلي:
git branch -D branch_to_be_deleted
حذف الفرع البعيد:
git Push Origin --delete branch_to_be_deleted
نصيحة: عند حذف الفروع باستخدام
git branch -d <branchname> # deletes local branch
أو
git Push Origin :<branchname> # deletes remote branch
يتم حذف المراجع فقط. على الرغم من إزالة الفرع فعليًا على جهاز التحكم عن بُعد ، إلا أن الإشارات إليه لا تزال موجودة في المستودعات المحلية لأعضاء فريقك. هذا يعني أنه بالنسبة لأعضاء الفريق الآخرين ، تظل الفروع المحذوفة مرئية عند قيامهم git branch -a
.
لحل هذه المشكلة ، يمكن لأعضاء فريقك تقليم الفروع المحذوفة بها
git remote Prune <repository>
هذا هو عادة git remote Prune Origin
.
git branch -D <name-of-branch>
git branch -D -r Origin/<name-of-branch>
git Push Origin :<name-of-branch>
هذا بسيط: فقط قم بتشغيل الأمر التالي:
لحذف فرع Git محليًا وعن بعد ، قم أولاً بحذف الفرع المحلي باستخدام الأمر:
git branch -d example
(هنا example
هو اسم الفرع)
وبعد ذلك احذف الفرع البعيد باستخدام الأمر:
git Push Origin :example
نهج آخر هو: -
git Push --Prune Origin
تحذير: سيؤدي ذلك إلى حذف جميع الفروع البعيدة غير الموجودة محليًا. أو أكثر شمولاً ،
git Push --mirror
ستجعل المستودع عن بُعد يشبه بشكل فعال النسخة المحلية من المستودع (النسخ المتطابق للرؤوس المحلية وأجهزة التحكم عن بعد والعلامات على جهاز التحكم عن بُعد).
يمكنني استخدام ما يلي في بلدي باش الإعدادات:
alias git-shoot="git Push Origin --delete"
ثم يمكنك الاتصال:
git-shoot branchname
منذ يناير 2013 ، شملت جيثب أ Delete branch الزر الموجود بجانب كل فرع في صفحة "الفروع" الخاصة بك.
نشر مدونة ذات صلة: إنشاء وحذف الفروع
إذا كنت ترغب في إكمال هاتين الخطوتين بأمر واحد ، يمكنك إنشاء اسم مستعار له عن طريق إضافة ما يلي إلى ~/.gitconfig
:
[alias]
rmbranch = "!f(){ git branch -d ${1} && git Push Origin --delete ${1}; };f"
بدلاً من ذلك ، يمكنك إضافة هذا إلى التكوين العمومي الخاص بك من سطر الأوامر باستخدام
git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git Push Origin --delete ${1}; };f'
NOTE: في حالة استخدام -d
(صغيرة) ، سيتم حذف الفرع فقط إذا تم دمجه. لفرض حدوث الحذف ، ستحتاج إلى استخدام -D
(الأحرف الكبيرة D).
حذف محليًا:
لحذف فرع محلي ، يمكنك استخدام:
git branch -d <branch_name>
لحذف فرع بالقوة ، استخدم -D
بدلاً من -d
.
git branch -D <branch_name>
حذف عن بعد:
هناك خياران:
git Push Origin :branchname
git Push Origin --delete branchname
أود أن أقترح عليك استخدام الطريقة الثانية لأنها أكثر سهولة.
لحذف فرعك محليا وعن بعد
الدفع إلى الفرع الرئيسي - git checkout master
حذف الفرع البعيد الخاص بك - git Push Origin --delete <branch-name>
حذف الفرع المحلي الخاص بك - git branch --delete <branch-name>
يمكنك أيضًا القيام بذلك باستخدام git remote Prune Origin
$ git remote Prune Origin
Pruning Origin
URL: [email protected]/yourrepo.git
* [pruned] Origin/some-branchs
يقوم بضبط وحذف فروع التتبع عن بُعد من قائمة git branch -r
.
بالإضافة إلى الإجابات الأخرى ، غالبًا ما أستخدم الأداة git_remote_branch . إنها عملية تثبيت إضافية ، ولكنها توفر لك طريقة ملائمة للتفاعل مع الفروع البعيدة. في هذه الحالة ، لحذف:
grb delete branch
أجد أنني أيضًا استخدم الأمرين publish
و track
غالبًا
الخطوط الملاحية المنتظمة command delete المحلية والبعيدة :
D=branch-name; git branch -D $D; git Push Origin :$D
أو أضف الاسم المستعار أدناه إلى ~/.gitconfig ؛ الاستخدام: git kill branch-name
[alias]
kill = "!f(){ git branch -D \"$1\"; git Push Origin --delete \"$1\"; };f"
دعنا نفترض أن عملنا على الفرع "نموذج الاتصال" قد انتهينا وقمنا بالفعل بدمجه في "master" نظرًا لأننا لم نعد بحاجة إلى ذلك ، يمكننا حذفه (محليًا):
$ git branch -d contact-form
ولحذف الفرع البعيد:
git Push Origin --delete contact-form
حذف فرع بعيد
git Push Origin :<branchname>
حذف الفرع المحلي
git branch -D <branchname>
حذف خطوات الفرع المحلي:
ببساطة قل:
git branch -d <branch-name>
git Push Origin :<branch-name>
يمكنك الآن القيام بذلك باستخدام تطبيق GitHub Desktop .
بعد إطلاق التطبيق
git Push Origin --delete <branch Name>
من الأسهل تذكره من
git Push Origin :branchName
لحذف محليا - (عادي) ،
git branch -d my_branch
إذا كان فرعك في إعادة التقدم/دمج التقدم ولم يتم ذلك بشكل صحيح ، فسوف تحصل على خطأ Rebase/Merge in progress
لذلك في هذه الحالة ، لن تتمكن من حذف فرعك.
لذلك إما حاجتك إلى حل إعادة الدمج/الدمج وإلا يمكنك فرض الحذف باستخدام ،
git branch -D my_branch
للحذف في جهاز التحكم عن بعد:
git Push --delete Origin my_branch
يمكن أن تفعل الشيء نفسه باستخدام ،
git Push Origin :my_branch # easy to remember both will do the same.
التمثيل الرسومي ،
هذا لن ينجح إذا كان لديك علامة تحمل نفس اسم الفرع على جهاز التحكم عن بعد:
$ git Push Origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to Push some refs to '[email protected]:SomeName/some-repo.git'
في هذه الحالة ، تحتاج إلى تحديد أنك تريد حذف الفرع ، وليس العلامة:
git Push Origin :refs/heads/branch-or-tag-name
وبالمثل ، لحذف العلامة بدلاً من الفرع الذي تستخدمه:
git Push Origin :refs/tags/branch-or-tag-name
العديد من الإجابات الأخرى سوف تؤدي إلى أخطاء/تحذيرات. تعتبر هذه الطريقة دليلًا نسبيًا على الرغم من أنك قد لا تزال بحاجة إلى git branch -D branch_to_delete
إذا لم يتم دمجها بالكامل في some_other_branch
، على سبيل المثال.
git checkout some_other_branch
git Push Origin :branch_to_delete
git branch -d branch_to_delete
لا يلزم التقليم البعيد إذا حذفت الفرع البعيد. يستخدم فقط للحصول على أحدث أجهزة التحكم عن بعد المتوفرة في مستودع تقوم بتتبعه. لقد لاحظت أن git fetch
سوف تضيف أجهزة التحكم عن بعد ، وليس إزالتها. فيما يلي مثال على متى ستقوم git remote Prune Origin
بعمل شيء ما:
المستخدم أ يفعل الخطوات المذكورة أعلاه. سيقوم المستخدم ب بتشغيل الأوامر التالية لرؤية الفروع البعيدة الأكثر حداثة
git fetch
git remote Prune Origin
git branch -r
لقد سئمت من غوغلينغ لهذه الإجابة ، لذلك اتبعت مقاربة مشابهة ل الإجابة التي نشرها crizCraig سابقًا.
تمت إضافة ما يلي إلى ملفي الشخصي في Bash:
function gitdelete(){
git Push Origin --delete $1
git branch -D $1
}
ثم في كل مرة أقوم فيها بفرع (تم دمجها في master
، على سبيل المثال) أشغِّل ما يلي في الجهاز الطرفي الخاص بي:
gitdelete my-branch-name
... ثم يحذف my-branch-name
من Origin
وكذلك محليًا.
قبل التنفيذ
git branch --delete <branch>
تأكد من تحديد الاسم الصحيح للفرع البعيد أولاً عن طريق تنفيذ:
git ls-remote
سيخبرك هذا بما يجب إدخاله بالضبط لقيمة <branch>
. (branch
حساس لحالة الأحرف!)
git Push Origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
إذا كنت متأكدًا من رغبتك في حذفها ، فقم بتشغيلها
git branch -D bugfix
الآن لتنظيف فروع المحذوفة البعيد البعيد
git remote Prune Origin
مزج جميع الإجابات الأخرى. يتطلب Ruby 1.9.3+
، تم اختباره فقط على OS X.
استدعاء هذا الملف git-remove
، وجعله قابلاً للتنفيذ ، ووضعه في طريقك. ثم استخدم ، على سبيل المثال ، git remove temp
.
#!/usr/bin/env Ruby
require 'io/console'
if __FILE__ == $0
branch_name = ARGV[0] if (ARGV[0])
print "Press Y to force delete local and remote branch #{branch_name}..."
response = STDIN.getch
if ['Y', 'y', 'yes'].include?(response)
puts "\nContinuing."
`git branch -D #{branch_name}`
`git branch -D -r Origin/#{branch_name}`
`git Push Origin --delete #{branch_name}`
else
puts "\nQuitting."
end
end
أضفت الأسماء المستعارة التالية إلى ملف .gitconfig
الخاص بي. هذا يسمح لي بحذف الفروع مع أو بدون تحديد اسم الفرع. يتم افتراض اسم الفرع إلى الفرع الحالي إذا لم يتم تمرير وسيطة.
[alias]
branch-name = rev-parse --abbrev-ref HEAD
rm-remote-branch = !"f() { branch=${1-$(git branch-name)}; git Push Origin :$branch; }; f"
rm-local-branch = !"f() { branch=${1-$(git branch-name)}; git checkout master; git branch -d $branch; }; f"
rm-branch-fully = !"f() { branch=${1-$(git branch-name)}; git rm-local-branch $branch; git rm-remote-branch $branch; }; f"
هناك خيار بديل لسطر الأوامر لحذف الفروع البعيدة هو صفحة فروع جيثب.
انظر على سبيل المثال: https://github.com/angular/angular.js/branches
وجدت في Code
-> Branches
من مستودع GitHub.
أفضل بوجه عام سطر الأوامر بنفسي ، لكن هذه {صفحة GitHub تعرض لك المزيد من المعلومات حول الفروع ، مثل تاريخ آخر تحديث والمستخدم} ، و عدد التعهدات المقدمة والخلف. إنه مفيد عند التعامل مع عدد كبير من الفروع.
كان لدي أيضًا مشكلات مماثلة ، ويبدو أن هذا يعمل: هذا يحذف الفرع المحلي. git branch -d the_local_branch
هذا يزيل الفرع البعيد git Push Origin :the_remote_branch
توجد إجابة جيدة ، ولكن في حالة وجود الكثير من الفروع ، فإن حذفها واحدة تلو الأخرى محليًا وبعيدًا ، سيكون مهمة شاقة. يمكنك استخدام هذا البرنامج النصي لأتمتة هذه المهام.
branch_not_delete=( "master" "develop" "our-branch-1" "our-branch-2")
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do
# delete prefix remotes/Origin/ from branch name
branch_name="$(awk '{gsub("remotes/Origin/", "");print}' <<< $branch)"
if ! [[ " ${branch_not_delete[*]} " == *" $branch_name "* ]]; then
# delete branch remotly and locally
git Push Origin :$branch_name
fi
done
المصدر: إزالة بوابة الفروع في آن واحد
باستخدام GitBash يمكنك تنفيذ ما يلي:
git branch --delete <branch>
من تطبيق GitHub لسطح المكتب ، عندما يكون لديك الفرع قيد السحب ، يمكنك حذف محلي الفرع عبر شريط القوائم فرع:
إذا كنت لا تستخدم تطبيق سطح مكتب GitHub ، وكنت تستخدم IDE مثل Visual Studio للتحكم في المصدر المحلي ، كل ما عليك فعله هو بضع خطوات سريعة:
بعد ذلك ، بمجرد تسجيل الدخول إلى حساب GitHub عبر الإنترنت ، انتقل إلى المستودع وانقر على علامة التبويب جميع الفروع. من هناك ، فقط انقر على أيقونة سلة المهملات الصغيرة على اليمين على اسم المربط الذي تريد حذفه.
* ضع في اعتبارك - إذا لم يتم نشر الفرع ، فلا داعي لمحاولة حذفه من مستودعك على الإنترنت.
قمت بإنشاء الوظيفة المريحة التالية في ملف .bash_aliases الخاص بي:
git-delete-branch()
{
if [[ -n $1 ]]; then
git checkout master > /dev/null;
branch_name="$1";
echo "Deleting local $branch_name branch...";
git branch -D "$branch_name";
echo "Deleting remote $branch_name branch...";
git Push Origin --delete "$branch_name";
git remote Prune Origin;
echo "Your current branches are:";
git branch -a;
else
echo "Usage: git-delete-branch <branch_name>";
fi
}
وفقا لأحدث وثيقة باستخدام محطة يمكننا حذف الطريقة التالية.
حذف باللغة المحلية:
git branch -D usermanagement
حذف في الموقع البعيد:
git Push --delete Origin usermanagement
انه بسيط جدا
لحذف الفرع البعيد
git Push -d Origin <branch-name>
OR
git Push Origin :<branch-name>
لحذف الفرع المحلي
git branch -D <branch-name>