ฉันจะลบสาขา Git ในพื้นที่และจากระยะไกลได้อย่างไร


16952

ฉันต้องการลบสาขาทั้งในและนอกสถานที่

ล้มเหลวในการพยายามลบสาขาระยะไกล

$ 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สาขาที่ประสบความสำเร็จทั้งในพื้นที่และในระยะไกล


1057
ผู้ดำเนินรายการหมายเหตุ: หากคุณต้องการตอบคำถามนี้โปรดทราบว่าโพสต์มี 40 คำตอบแล้ว คำตอบใหม่ของคุณจะช่วยเพิ่มมูลค่าหรือไม่
Robert Harvey

54
หมายเหตุ: สำหรับ Git 2.5+ (Q2 2558) ข้อความที่แน่นอนจะเป็น " deleted remote-tracking branch": ดูgithub.com/git/git/commit/…
VonC

คุณอาจสนใจสคริปต์นี้ซึ่งช่วยลดความแตกต่างระหว่างการลบสาขาในพื้นที่และสาขาที่อยู่ห่างไกล: tlbx.app/blog/delete-any-git-branch-the-easy-way
Mig

@RobertHarvey เพียง 39 ตอนนี้
Adam

@Adam: 81. 42 คำตอบถูกลบด้วยเหตุผลต่างๆ ความหลงใหลที่ไม่ได้อธิบายของประชาชนในหัวข้อเฉพาะเป็นหนึ่งในความลึกลับที่ยิ่งใหญ่ที่สุดของชีวิต
Robert Harvey

คำตอบ:


21427

บทสรุปผู้บริหาร

$ git push -d <remote_name> <branch_name>
$ git branch -d <branch_name>

originโปรดทราบว่าในกรณีส่วนใหญ่ชื่อระยะไกล ในกรณีเช่นนี้คุณจะต้องใช้คำสั่งเช่นนั้น

$ git push -d origin <branch_name>

ลบสาขาท้องถิ่น

ในการลบสาขาท้องถิ่นให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้:

$ git branch -d branch_name
$ git branch -D branch_name

หมายเหตุ:-dตัวเลือกเป็นนามแฝงสำหรับ--deleteซึ่งลบสาขาถ้ามันมีอยู่แล้วรวมอย่างเต็มที่ในสาขาต้นน้ำ คุณสามารถใช้-Dซึ่งเป็นนามแฝง--delete --forceซึ่งจะลบสาขา "โดยไม่คำนึงถึงสถานะที่ถูกผสาน" [ที่มา: man git-branch]

ลบสาขาระยะไกล [อัพเดทเมื่อวันที่ 8 ก.ย. 2560]

ในฐานะของ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 ที่คุณติดตั้งจะกำหนดว่าคุณต้องใช้ไวยากรณ์ที่ง่ายขึ้นหรือยากขึ้น

ลบสาขาระยะไกล [คำตอบดั้งเดิมตั้งแต่ 5 มกราคมถึง 2010]

จากบทที่ 3 ของPro Gitโดย Scott Chacon:

การลบสาขาระยะไกล

สมมติว่าคุณทำกับสาขาระยะไกล - พูดว่าคุณและผู้ทำงานร่วมกันของคุณเสร็จสิ้นด้วยคุณสมบัติและได้รวมเข้ากับสาขาหลักของรีโมตของคุณ git push [remotename] :[branch]คุณสามารถลบสาขาระยะไกลโดยใช้ไวยากรณ์ค่อนข้างป้าน หากคุณต้องการที่จะลบสาขาเซิร์ฟเวอร์แก้ไขของคุณจากเซิร์ฟเวอร์คุณเรียกใช้ต่อไปนี้:

$ git push origin :serverfix
To git@github.com:schacon/simplegit.git
 - [deleted]         serverfix

ความเจริญ ไม่มีสาขาบนเซิร์ฟเวอร์ของคุณ คุณอาจต้องการหูฟังของหน้านี้เพราะคุณจะต้องใช้คำสั่งนั้นและคุณอาจจะลืมไวยากรณ์ วิธีที่จะจำคำสั่งนี้คือการจำgit push [remotename] [localbranch]:[remotebranch]ไวยากรณ์ที่เราไปก่อนหน้านี้เล็กน้อย หากคุณละทิ้ง[localbranch]ส่วนนี้คุณก็จะพูดว่า“ อย่าไปทำอะไรข้างฉันแล้วทำมันให้เป็น[remotebranch]

ฉันออกgit push origin: bugfixและมันใช้งานได้อย่างสวยงาม Scott Chacon พูดถูก - ฉันจะอยากฟังหูหน้านั้น

จากนั้นคุณควรดำเนินการนี้ในเครื่องอื่น ๆ

# Fetch changes from all remotes and locally delete 
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune

เพื่อเผยแพร่การเปลี่ยนแปลง


353
อย่าลืมที่จะทำgit fetch --all --pruneบนเครื่องอื่น ๆ หลังจากลบสาขาระยะไกลบนเซิร์ฟเวอร์ ||| หลังจากลบสาขาท้องถิ่นด้วยgit branch -dและลบสาขาระยะไกลด้วยgit push origin --deleteเครื่องอื่น ๆ อาจยังมี "สาขาติดตามล้าสมัย" (เพื่อดูพวกเขาทำgit branch -a) เพื่อกำจัดสิ่งเหล่านี้กันgit fetch --all --pruneเลย
เทรเวอร์บอยด์สมิ ธ

14
นอกจาก @ TrevorBoydSmith git branch -aเพื่อดูสาขาทั้งหมดคุณยังสามารถใช้git branch -rเพื่อดูสาขาระยะไกลเท่านั้น ดูเพิ่มเติมที่git remote show origin- ที่มา: gitready.com/intermediate/2009/02/13/list-remote-branches.html
Sandra

17
ฉันต้องวิ่งgit branch -D Branch_Nameไปกำจัดสาขาในท้องที่
Kolob Canyon

11
@KolobCanyon คุณจะต้องใช้ -D หากสาขาไม่ได้ถูกรวมเข้ากับสาขาอื่น
BTRUE

3
คำถามคือ"ฉันต้องทำอย่างไรจึงจะแตกต่างกันเพื่อลบสาขารีโมท / แหล่งกำเนิด / ข้อผิดพลาดทั้งในระดับท้องถิ่นและใน GitHub?" หลังจากรันคำสั่งในคำตอบที่อัปเดตแล้วสาขาท้องถิ่นจะยังคงปรากฏ มันคงจะดีถ้าคำตอบที่ได้รับการยอมรับเป็นที่สมบูรณ์คำตอบ อย่างน่าทึ่งในวิธีการที่ยาก Git ทำให้งานง่าย ...
jww

3316

คำตอบของแมทธิวนั้นยอดเยี่ยมมากสำหรับการลบกิ่งก้านสาขาที่ห่างไกลออกไปและฉันก็ขอขอบคุณคำอธิบาย แต่ให้แยกความแตกต่างอย่างง่ายระหว่างสองคำสั่ง:

วิธีลบสาขาท้องถิ่นจากเครื่องของคุณ:

git branch -d {the_local_branch}(ใช้-Dแทนการบังคับลบสาขาโดยไม่ตรวจสอบสถานะการรวม)

ในการลบสาขาระยะไกลออกจากเซิร์ฟเวอร์:

git push origin --delete {the_remote_branch}

การอ้างอิง: Git: ลบสาขา (ท้องถิ่นหรือระยะไกล)


250
@megido -Dบังคับให้ลบอย่างดี-dให้เตือนคุณหากยังไม่ได้รวมเข้าด้วย
TankorSmash

8
หากสาขาในประเทศของคุณไม่ได้ควบรวมกับเจ้านาย'git branch -d your_branchแล้ววิ่งคุณจะผิดพลาดอย่างเช่นerror: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
geeks

12
ฉันขอแนะนำให้ใช้ -d แทน -D เพราะปลอดภัยกว่า หาก -d ล้มเหลวเนื่องจากข้อผิดพลาดที่ยังไม่ได้รับการยืนยันคุณต้องประเมินและถ้ามันเป็นเรื่องปกติที่จะลบออกให้ใช้ -D
rooby

7
ส่วนอื่นที่มีที่เก็บโคลนที่รีโมตกิ่งย่อยถูกลบควรรันgit remote prune <name>(เช่นgit remote prune origin) เพื่อที่จะลบเซกเตอร์เก่าที่ไม่มีอยู่ในรีโมต
code_dredd

3
ฉันต้องการเพิ่ม -d ให้คำเตือนหากไม่ได้รวมกับ HEAD ปัจจุบัน หากคุณต้องการความชัดเจนฉันแนะนำคำสั่งนี้git branch -a --merged origin/masterมันจะแสดงรายการสาขาใด ๆ ทั้งในท้องถิ่นและระยะไกล ที่ถูกรวมเข้ากับต้นแบบ ข้อมูลเพิ่มเติมได้ที่นี่
Eric

2041

คำตอบสั้น ๆ

หากคุณต้องการคำอธิบายโดยละเอียดของคำสั่งต่อไปนี้ให้ดูคำตอบแบบยาวในหัวข้อถัดไป

การลบสาขาระยะไกล

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin -d <branch>        # Shorter version (Git 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 remote-tracking branches
git fetch <remote> -p      # Shorter

คำตอบยาว : มีสามสาขาที่แตกต่างกันเพื่อลบ!

เมื่อคุณจัดการกับการลบสาขาทั้งในและนอกเมืองโปรดจำไว้ว่ามีสาขาที่แตกต่างกันสามสาขา :

  1. Xสาขาในประเทศ
  2. Xสาขากำเนิดจากระยะไกล
  3. ท้องถิ่นสาขาที่ห่างไกลการติดตามที่ติดตามสาขาระยะไกลorigin/XX

การแสดงผลของสามสาขา

โปสเตอร์ต้นฉบับที่ใช้:

git branch -rd origin/bugfix

ซึ่งมีเพียงเขาลบสาขาในประเทศระยะไกลติดตาม origin/bugfixและไม่จริงสาขาที่ห่างไกลบนbugfixorigin

แผนภาพที่ 2

ในการลบสาขาระยะไกลที่เกิดขึ้นจริงคุณต้อง

git push origin --delete bugfix

แผนภาพที่ 3

รายละเอียดเพิ่มเติม

ส่วนต่อไปนี้อธิบายรายละเอียดเพิ่มเติมเพื่อพิจารณาเมื่อลบสาขาระยะไกลและสาขาติดตามระยะไกลของคุณ

การกดเพื่อลบสาขาระยะไกลยังเป็นการลบสาขาการติดตามระยะไกลด้วย

โปรดทราบว่าการลบสาขาที่ห่างไกล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

หากคุณไม่ได้ลบสาขาระยะไกลของคุณ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ตัวเลือกต่างๆเพื่อเรียกใช้การดึงข้อมูลจากแหล่งเก็บข้อมูลจำนวนมากและ--pruneตัวเลือกในการลบสาขาการติดตามระยะไกลที่ค้างอยู่ สิ่งเหล่านี้ทำให้ "git remote update" และ "git remote พรุน" ไม่จำเป็น (ไม่มีแผนจะลบ "remote update" หรือ "remote prune")

ทางเลือกสำหรับการตัดอัตโนมัติข้างต้นสำหรับสาขาการติดตามระยะไกลที่ล้าสมัย

อีกทางเลือกหนึ่งแทนการตัดแต่งกิ่งท้องถิ่นล้าสมัยสาขาระยะไกลการติดตามของคุณผ่านgit fetch -p, คุณสามารถหลีกเลี่ยงการดำเนินงานเครือข่ายเป็นพิเศษโดยเพียงแค่ตนเองลบสาขา (e) ด้วย--remoteหรือ-rธง:

git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

ดูสิ่งนี้ด้วย


จากภาพประกอบของคุณฉันเห็นได้ว่ามี repo โคลนในพื้นที่และ repo กำเนิดทางไกล ดังนั้นจึงมีสาขาอย่างน้อยสองสาขา สาขาที่สามที่จะลบอยู่ที่ไหน สาขาที่สามเป็นเพียงตัวชี้ที่ชี้ไปยังการกระทำใน repo โคลนท้องถิ่น
ฮักกี้

6
@huggie ที่ถูกต้องสวยมาก สาขาใน Git เป็นเพียงที่คั่นหนังสือที่แนบมากับการกระทำ ดังนั้นในกราฟของฉันด้านบนมีXและorigin/Xบุ๊กมาร์กในโคลนแบบโลคัล (2 สาขา) จากนั้นก็มีอยู่Xบนรีโมต (ทำ 3 สาขา)

6
+1 สำหรับสาขาการติดตามระยะไกล สาขานี้เป็นสิ่งที่ทำให้เกิดปัญหาเมื่อคุณโคลนสาขาของคนอื่น มันจะติดตามการกระทำของคุณและขอให้คุณถ้าคุณต้องการที่จะผลักดันไปยังสาขาของบุคคลนั้น
Kermit_ice_tea

1
กราฟิกเพียงอย่างเดียวทองทำได้ดี
Mogens TrasherDK

1
เพื่อประโยชน์ของผู้อ่านในอนาคต: อะไร @Kermit_ice_tea มีการพูดคุยเกี่ยวกับการดังกล่าวข้างต้นเป็นสาขาในประเทศ (ตามที่อธิบายไว้ในคำตอบนี้) ไม่ได้เป็นระยะไกลติดตามสาขา เมื่อสาขาในพื้นที่มีการตั้งค่า "สาขาต้นน้ำ" มันจะเริ่มต้นโดยการดึงและผลักดันจากสาขาระยะไกลนั้น สาขาในประเทศที่มีสาขา "ต้นน้ำ" ตั้งอยู่บนมันจะถูกเรียกว่า "สาขาการติดตาม"ดังนั้นจึงเป็นเรื่องง่ายที่จะสับสนกับระยะไกลติดตามสาขาเนื่องจากคำศัพท์ที่คล้ายกัน
David P

1520

ขั้นตอนสำหรับการลบสาขา:

สำหรับการลบสาขาระยะไกล:

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ที่โยนข้อผิดพลาดตามสถานะของสาขาผสาน ...

ฉันยังสร้างภาพด้านล่างเพื่อแสดงขั้นตอน:

ลบสาขาระยะไกลและท้องถิ่นในคอมไพล์


49
git branch -aจะแสดงสาขาท้องถิ่นและระยะไกลมันจะช่วยให้คุณแผนภาพแนะนำ
LoranceChen

4
โปรดทราบว่าหากคุณกำลังตั้งค่าในสาขาที่คุณต้องการลบคุณจะต้องชำระเงินสาขาที่ไม่ใช่สาขาที่คุณต้องการลบ (เช่น: master) ก่อนที่จะลบสาขาท้องถิ่น
BaDr Amer

เมื่อสาขาถูกลบที่จุดเริ่มต้นที่เก็บข้อมูลในเครื่องของคุณจะไม่แจ้งให้ทราบ คุณจะยังมีเวอร์ชันแคชในพื้นที่ของสาขาเหล่านั้น (ซึ่งดีมาก) แต่สาขา git - ยังจะแสดงรายการเป็นสาขาระยะไกล คุณสามารถล้างข้อมูลในเครื่องแบบนี้: git remote prune originสำเนาสาขาที่ถูกลบในเครื่องของคุณจะไม่ถูกลบ สามารถใช้เอฟเฟกต์เดียวกันนี้ได้git fetch --prune
vibs2006

2
ภาพมีสมาธิและใหญ่มากและไม่ได้เพิ่มคำตอบ ฉันหวังว่านี่จะไม่กลายเป็นเทรนด์ของ SO
jmiserez

797

คุณยังสามารถใช้รายการต่อไปนี้เพื่อลบสาขาระยะไกล

git push --delete origin serverfix

ซึ่งทำสิ่งเดียวกัน

git push origin :serverfix

แต่มันอาจจะง่ายกว่าที่จะจำ


1
... และปลอดภัยกว่าที่จะใช้: O
cst1992

1
คุณลืมส่วนที่เกี่ยวกับการลบสาขาท้องถิ่นซึ่งสามารถทำได้โดย: git branch -d <local_branch>หรือ git branch -D <local_branch>สำหรับการลบแรง
Amit Dash

370

เคล็ดลับ: เมื่อคุณลบสาขาที่ใช้

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นี้เป็นปกติ


14
คุณควรชี้แจงว่าการgit pushดำเนินการข้างต้นลบสาขาในพื้นที่และสาขาระยะไกล
Annika Backstrom

22
ทราบว่าgit remote pruneเป็นวิธีที่ค่อนข้างล้าสมัยในการลบล้าสมัยสาขาระยะไกลติดตามวิธีใหม่ที่จะทำก็คือการใช้หรือgit fetch --prune git fetch -p

1
@RRMadhav แน่นอนคุณจะไม่เห็นสาขาที่ถูกลบหลังจากลบเนื่องจากการอ้างอิงไปยังสาขาระยะไกลจะถูกลบสำหรับคุณในพื้นที่ ทุกคนในทีมของคุณที่ตรวจสอบสาขานั้นจะยังคงมีการอ้างอิงนั้นและจะยังคงเห็นมันจนกว่าพวกเขาจะตัดสาขา
pfrenssen

361

หากคุณต้องการที่จะลบสาขาแรกชำระเงินไปยังสาขาอื่นที่ไม่ใช่สาขาที่จะถูกลบ

git checkout other_than_branch_to_be_deleted

การลบสาขาท้องถิ่น:

git branch -D branch_to_be_deleted

การลบสาขาระยะไกล:

git push origin --delete branch_to_be_deleted

260
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>

7
โปรดทราบว่า-D บังคับให้ลบ มันดีกว่าที่จะใช้-dซึ่งจะเตือนถ้าคุณต้องการทำสิ่งที่อันตราย
Jonathon Reinhart

13
ahahah :) ขึ้นอยู่กับคุณ: ใช้ -d ถ้าคุณอยากเห็น git ร้องไห้หรือ -D ถ้าคุณอยากร้องไห้
เฟลิเป้

224

นี่ง่ายมากเพียงรันคำสั่งต่อไปนี้:

หากต้องการลบสาขา Git ทั้งในเครื่องและจากระยะไกลอันดับแรกให้ลบสาขาในเครื่องโดยใช้คำสั่งนี้:

git branch -d example

(นี่exampleคือชื่อสาขา)

หลังจากนั้นให้ลบสาขาระยะไกลโดยใช้คำสั่งนี้:

git push origin :example

199

อีกวิธีคือ:

git push --prune origin

คำเตือน: การดำเนินการ นี้จะลบสาขาระยะไกลทั้งหมดที่ไม่มีอยู่ในเครื่อง หรือมากกว่านั้น

git push --mirror

จะทำให้ที่เก็บข้อมูลรีโมตดูมีประสิทธิภาพเหมือนสำเนาโลคัลของที่เก็บ (โลคัลเฮด, รีโมตและแท็กถูกทำมิรเรอร์บนรีโมต)


1
git push - แหล่งกำเนิดของต้นไม้ไม่ได้ทำอะไรให้ฉันใน gitlab: git clone git: //repo.git; สาขา git -d -r กำเนิด / บางสาขา; git push --prune กำเนิด อัตราผลตอบแทน: ทุกสิ่งที่ทันสมัย; เรียก git; นำสาขาที่ถูกลบในเครื่องกลับมา git push - มิเรอร์; ตอนนี้พวกเขาไปแล้วจริงๆ!
eMBee

165

ฉันใช้สิ่งต่อไปนี้ในการตั้งค่าBashของฉัน:

alias git-shoot="git push origin --delete"

จากนั้นคุณสามารถโทร:

git-shoot branchname

11
ฉันลงเอยด้วยการเพิ่มนามแฝง "shoot" ลงใน. gitconfig shoot = push origin
--delete

หากต้นกำเนิดของคุณคือ Atlassian Stash และสาขาถูกตั้งเป็นค่าเริ่มต้นคุณจะได้รับข้อผิดพลาด "โดยค่าเริ่มต้นการลบสาขาปัจจุบันจะถูกปฏิเสธ ... " ฉันต้องเปลี่ยนสาขาเริ่มต้นใน Stash ให้ชี้ไปที่สาขาอื่นก่อนที่ฉันจะลบได้
neoscribe

สิ่งนี้ง่ายอย่างสมบูรณ์แบบที่คุณทำ แต่ fyi git ยังให้คุณสร้างคำสั่งที่กำหนดเองได้ ใส่git push origin --delete $1ไฟล์ลงบนพา ธ ของคุณที่เรียกว่าgit-shootและgit shoot branchnameจะใช้ได้เช่นกัน
mahemoff

132

ลบในเครื่อง:

หากต้องการลบสาขาท้องถิ่นคุณสามารถใช้:

git branch -d <branch_name>

ในการลบสาขาบังคับใช้แทน-D-d

git branch -D <branch_name>

ลบจากระยะไกล:

มีสองตัวเลือก:

git push origin :branchname

git push origin --delete branchname

ฉันขอแนะนำให้คุณใช้วิธีที่สองเพราะมันใช้งานง่ายมากขึ้น


129

ตั้งแต่มกราคม 2013 GitHub ได้รวมDelete branchปุ่มถัดจากแต่ละสาขาไว้ในหน้า "สาขา" ของคุณ

บล็อกโพสต์ที่เกี่ยวข้อง: สร้างและลบสาขา


3
ฉันเพิ่งเริ่มใช้ Github ในปีนี้ดังนั้นฉันจึงสงสัยว่าทำไมนี่เป็นคำถามที่ได้รับความนิยมสูงและทำไมไม่มีคำตอบอันดับต้น ๆ ที่แนะนำให้ลบออกจากเว็บอินเตอร์เฟส Github! น่าสนใจว่ามันเป็นเพียงส่วนเสริมล่าสุด
Cam Jackson

6
ฉันกำลังจะชี้ประเด็นนี้ออกมา โปรดทราบว่าปุ่มจะไม่ลบสาขาในพื้นที่ของคุณ ... ดูคำตอบสำหรับวิธีการทำเช่นนี้: stackoverflow.com/a/10999165/901641
ArtOfWarfare

126

หากคุณต้องการทำทั้งสองขั้นตอนด้วยคำสั่งเดียวคุณสามารถสร้างนามแฝงได้โดยเพิ่มด้านล่างของคุณ~/.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'

หมายเหตุ : หากใช้-d(ตัวพิมพ์เล็ก d) สาขาจะถูกลบก็ต่อเมื่อมีการรวมเข้าด้วยกัน ในการบังคับให้ลบเกิดขึ้นคุณจะต้องใช้-D(ตัวพิมพ์ใหญ่ D)


6
นี่คือสิ่งที่ฉันกำลังมองหา นามแฝงฟังก์ชันเชลล์ของฉันใช้งานไม่ได้ (EOF ที่ไม่คาดคิด) และฉันไม่สามารถหาสาเหตุได้ แต่สิ่งนี้ใช้ได้ดีมาก! การเปลี่ยนแปลงเพียงอย่างเดียวที่ฉันทำคือแทนที่&&ด้วย;ดังนั้นแม้ว่าคำสั่งแรกล้มเหลวครั้งที่สองจะยังคงดำเนินการ (บางครั้งมีเฉพาะในท้องถิ่นหรือในระยะไกลเท่านั้น)
user1021726

115

หากต้องการลบสาขาของคุณในพื้นที่และจากระยะไกล

  • ชำระเงินที่สาขาหลัก - git checkout master

  • ลบสาขาระยะไกลของคุณ - git push origin --delete <branch-name>

  • ลบสาขาท้องถิ่นของคุณ - git branch --delete <branch-name>


112

คุณสามารถทำได้โดยใช้ git remote prune origin

$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
 * [pruned] origin/some-branchs

มันตัดและลบสาขาติดตามระยะไกลจากgit branch -rรายชื่อ


108

นอกเหนือจากคำตอบอื่น ๆ ฉันมักจะใช้เครื่องมือgit_remote_branch มันเป็นการติดตั้งเพิ่มเติม แต่ทำให้คุณได้รับความสะดวกในการโต้ตอบกับสาขาระยะไกล ในกรณีนี้หากต้องการลบ:

grb delete branch

ฉันพบว่าฉันยังใช้publishและtrackคำสั่งค่อนข้างบ่อย


98

หนึ่งซับคำสั่งลบทั้งในระดับท้องถิ่นและระยะไกล :

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"

17
⚠️ใช้git branch -Dอย่างระมัดระวังในสคริปต์เนื่องจากแรงจะลบสาขาโดยไม่ตรวจสอบว่าถูกผสานแล้ว ใช้-dเพื่อความปลอดภัย
caesarsol

94

การลบสาขา

สมมติว่างานของเราในสาขา "แบบฟอร์มการติดต่อ" เสร็จสิ้นแล้วและเราได้รวมไว้ใน "หลัก" แล้ว เนื่องจากเราไม่ต้องการอีกต่อไปเราจึงสามารถลบได้ (ในเครื่อง):

$ git branch -d contact-form

และสำหรับการลบสาขาระยะไกล:

git push origin --delete contact-form

87

ลบสาขาระยะไกล

git push origin :<branchname>

ลบสาขาท้องถิ่น

git branch -D <branchname>

ลบขั้นตอนสาขาในพื้นที่:

  1. ชำระเงินไปยังสาขาอื่น
  2. ลบสาขาท้องถิ่น

3
การลบสาขาระยะไกลจำเป็นต้องใช้ "git push" ในภายหลังหรือไม่?
Samitha Chathuranga

@SamithaChathuranga ไม่git push origin :<branchname>ได้ผลักสาขา 'ที่ว่างเปล่า' ไปยังรีโมตแล้ว (ดังนั้นจะลบสาขาที่อยู่ห่างไกล)
Michał Szajbe

86

พูดง่าย ๆ :

git branch -d <branch-name>
git push origin :<branch-name>

มันจะทำงานถ้าสาขาของคุณเอง แต่ถ้าคุณตัดกิ่งที่ไม่จำเป็นทั้งหมดใน repo (บางส่วนไม่ใช่ของคุณ) มันจะไม่เพียงพอ
Kermit_ice_tea


81

ตอนนี้คุณสามารถทำได้ด้วยแอปพลิเคชันGitHub บนเดสก์ท็อป

หลังจากเปิดตัวแอพพลิเคชั่น

  1. คลิกที่โครงการที่มีสาขา
  2. เปลี่ยนเป็นสาขาที่คุณต้องการลบ

    เปลี่ยนสาขา

  3. จากเมนู "สาขา" เลือก "เลิกเผยแพร่ ... " เพื่อลบสาขาจากเซิร์ฟเวอร์ GitHub

    เลิกเผยแพร่สาขา

  4. จากเมนู "สาขา" เลือก "ลบ" branch_name "... 'เพื่อให้สาขาถูกลบออกจากเครื่องท้องถิ่นของคุณ (AKA เครื่องที่คุณกำลังทำงานอยู่)

    ลบสาขาท้องถิ่น


15
ฉันไม่ได้ลงคะแนน แต่ความคิดของฉันคือว่ามันไม่ได้ช่วยอย่างมาก เห็นได้ชัดว่าคำถามนี้ถามคำตอบประเภท commandline เพิ่มเติมโดยไม่ต้องใช้โปรแกรมภายนอกหากมีคนคลิกที่นี่พวกเขาอาจจะไม่มองหา gitHub สำหรับเดสก์ท็อป
Daemedeor

12
@Deemedeor ฉันไม่เห็นด้วย ในปี 2010 เมื่อ OP ถามคำถามวิธีการทำ UI ก็ไม่มีอยู่และตัวเลือกเดียวคือบรรทัดคำสั่ง เพื่อระบุว่าคุณต้องการตัวเลือกบรรทัดคำสั่งเท่านั้นควรระบุไว้ในคำถามหรือด้วยแท็กcommand-line-interfaceซึ่งในกรณีนี้ไม่มีอยู่
Eric

3
คำสั่ง git สำหรับการลบสาขาระยะไกล sucks และฉันมักจะลืมมัน (ทั้งเก่าและใหม่) โชคดีที่มีเครื่องมือ GUI ที่มีตัวเลือก Git Gui, TortoiseGit และ GitHub Desktop มีอยู่ - ฉันหวังว่า Git Extensions ก็มีฟังก์ชั่นนี้เช่นกัน อย่างไรก็ตามสิ่งที่ฉันจำได้คือเริ่ม Git Gui จากภายใน Git Extensions เมื่อฉันต้องการลบสาขาระยะไกล
vezenkov

79

มันง่ายมาก:

ต้องการลบสาขาที่ห่างไกล

git push -d origin <branch-name>

หรือ

git push origin :<branch-name>

ในการลบสาขาท้องถิ่น

git branch -D <branch-name>

2
ฉันต้องการใช้--deleteแทนที่จะ-dลบสาขาระยะไกล
ZakJ

-dตัวเลือกที่เป็นนามแฝงสำหรับ--deleteและถ้า--deleteทำงานแล้ว-dยังควรทำงานอย่างแข็งขันถ้าคุณต้องการลบสาขาคุณสามารถใช้-Dแทนหรือ-d --delete
Vivek Maru

78

หากต้องการลบในเครื่อง - (ปกติ)

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.

การแสดงกราฟิก:

ป้อนคำอธิบายภาพที่นี่


68

สิ่งนี้จะไม่ทำงานหากคุณมีแท็กที่มีชื่อเหมือนกับสาขาบนรีโมต:

$ 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 'git@github.com:SomeName/some-repo.git'

ในกรณีนั้นคุณต้องระบุว่าคุณต้องการลบสาขาไม่ใช่แท็ก:

git push origin :refs/heads/branch-or-tag-name

ในทำนองเดียวกันหากต้องการลบแท็กแทนสาขาที่คุณจะใช้:

git push origin :refs/tags/branch-or-tag-name

1
นี่เป็นเรื่องปกติ แต่ผู้คนไม่ควรตั้งชื่อสาขาและแท็กของพวกเขาด้วยชื่อเดียวกันและรูปแบบการตั้งชื่อเดียวกันในตอนแรก

3
สถานการณ์ของฉันคือฉันกำลังแปลงสาขาเป็นแท็กและมันสมเหตุสมผลสำหรับแท็กที่มีชื่อเดียวกันกับสาขา โดยการแปลงผมหมายถึงการรวมสาขา B ไป A และการติดแท็กล่าสุดกระทำในสาขา B กับแท็ก B เพื่อที่ว่าหลังจากลบสาขา B ก็ยังสามารถคืนได้อย่างง่ายดายโดยเพียงแค่การตรวจสอบจากแท็กบี
เกร็ก

53

คำตอบอื่น ๆ อีกมากมายจะนำไปสู่ข้อผิดพลาด / คำเตือน วิธีนี้เป็นวิธีที่ค่อนข้างโง่หลักฐานถึงแม้ว่าคุณอาจยังคงต้อง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ทำสิ่งที่จริงเมื่อ:

ผู้ใช้ A ทำตามขั้นตอนด้านบน ผู้ใช้ B จะเรียกใช้คำสั่งต่อไปนี้เพื่อดูสาขาระยะไกลที่ทันสมัยที่สุด:

git fetch
git remote prune origin
git branch -r

51

ฉันเบื่อ googling สำหรับคำตอบนี้ดังนั้นฉันจึงใช้วิธีคล้ายกับคำตอบที่ crizCraig โพสต์ไว้ก่อนหน้านี้

ฉันได้เพิ่มสิ่งต่อไปนี้ในโปรไฟล์ Bash ของฉัน:

function gitdelete(){
    git push origin --delete $1
    git branch -D $1
}

จากนั้นทุกครั้งที่ฉันทำสาขา (รวมเข้าด้วยกันmaster) ฉันจะเรียกใช้สิ่งต่อไปนี้ในเทอร์มินัลของฉัน:

gitdelete my-branch-name

... ซึ่งจะลบmy-branch-nameจากoriginเช่นเดียวกับในเครื่อง


7
ขยายตัวในสิ่งนี้--delete "$@"และ-D "$@"แทนที่จะ$1จัดการกับหลายสาขา
kunl

3
ผมขอแนะนำให้ทำงานgit branch -d(มีตัวพิมพ์เล็ก 'D') ก่อนเพื่อให้แน่ใจว่าการเปลี่ยนแปลงที่ได้รับรวมและจากนั้นผลักดันหากประสบความสำเร็จ (ใส่&&ในระหว่างคำสั่ง)
บริน

49

ก่อนดำเนินการ

git branch --delete <branch>

ตรวจสอบให้แน่ใจก่อนว่าชื่อที่แน่นอนของสาขาระยะไกลคืออะไรโดยการดำเนินการ:

git ls-remote

นี้จะบอกคุณว่าจะใส่ตรงสำหรับ<branch>ค่า ( branchเป็นกรณี ๆ ไป!)


46

ใช้:

git push origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

หากคุณแน่ใจว่าต้องการลบให้เรียกใช้

git branch -D bugfix

ตอนนี้เพื่อล้างสาขาระยะไกลที่ถูกลบที่รันแล้ว

git remote prune origin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.