Làm cách nào để xóa chi nhánh Git cục bộ và từ xa?


16957

Tôi muốn xóa một chi nhánh cả cục bộ và từ xa.

Không thể xóa một chi nhánh từ xa

$ 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.

Tôi nên làm gì khác nhau để xóa thành công remotes/origin/bugfixchi nhánh cả cục bộ và từ xa?


1058
Người điều hành lưu ý: Nếu bạn có ý định trả lời câu hỏi này, hãy lưu ý rằng đã có 40 câu trả lời được đăng. Câu trả lời mới của bạn sẽ thêm bất kỳ giá trị đáng kể?
Robert Harvey

54
Lưu ý: đối với Git 2.5+ (quý 2 năm 2015), thông báo chính xác sẽ là " deleted remote-tracking branch": xem github.com/git/git/commit/ mẹo
VonC

Bạn có thể quan tâm đến tập lệnh này giúp đơn giản hóa sự khác biệt giữa việc xóa một nhánh cục bộ VÀ một từ xa: tlbx.app/blog/delete-any-git-branch-the-easy-way
Mig

@RobertHarvey chỉ 39 giờ
Adam

@Adam: 81. 42 câu trả lời đã bị xóa vì nhiều lý do. Nỗi ám ảnh không giải thích được của công chúng về một chủ đề cụ thể là một trong những bí ẩn lớn nhất của cuộc sống.
Robert Harvey

Câu trả lời:


21432

Tóm tắt

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

Lưu ý rằng trong hầu hết các trường hợp tên từ xa là origin. Trong trường hợp như vậy, bạn sẽ phải sử dụng lệnh như vậy.

$ git push -d origin <branch_name>

Xóa chi nhánh địa phương

Để xóa chi nhánh địa phương, sử dụng một trong các cách sau:

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

Lưu ý: Các -dtùy chọn là một bí danh cho --delete, mà chỉ xóa các chi nhánh nếu nó đã được sáp nhập đầy đủ vào chi nhánh thượng nguồn của nó. Bạn cũng có thể sử dụng -D, đó là một bí danh cho --delete --force, nó sẽ xóa chi nhánh "bất kể trạng thái hợp nhất của nó." [Nguồn: man git-branch]

Xóa Chi nhánh từ xa [Cập nhật vào ngày 8 tháng 9 năm 2017]

Kể từ Git v1.7.0 , bạn có thể xóa một nhánh từ xa bằng cách sử dụng

$ git push <remote_name> --delete <branch_name>

có thể dễ nhớ hơn

$ git push <remote_name> :<branch_name>

đã được thêm vào trong Git v1.5.0 "để xóa một nhánh từ xa hoặc thẻ."

Bắt đầu từ Git v2.8.0, bạn cũng có thể sử dụng git pushvới -dtùy chọn làm bí danh cho --delete.

Do đó, phiên bản Git bạn đã cài đặt sẽ ra lệnh cho dù bạn cần sử dụng cú pháp dễ hơn hay khó hơn.

Xóa Chi nhánh từ xa [Câu trả lời gốc từ ngày 5 tháng 1 năm 2010]

Từ Chương 3 của Pro Git của Scott Chacon:

Xóa các chi nhánh từ xa

Giả sử bạn đã hoàn thành với một nhánh từ xa - giả sử, bạn và các cộng tác viên của bạn đã hoàn thành một tính năng và đã hợp nhất nó vào nhánh chính của điều khiển từ xa của bạn (hoặc bất kỳ nhánh nào mà dòng mã ổn định của bạn nằm trong). Bạn có thể xóa một nhánh từ xa bằng cú pháp khá khó hiểu git push [remotename] :[branch]. Nếu bạn muốn xóa chi nhánh sửa máy chủ của mình khỏi máy chủ, bạn chạy như sau:

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

Bùng nổ. Không có thêm chi nhánh trên máy chủ của bạn. Bạn có thể muốn xem lại trang này vì bạn sẽ cần lệnh đó và có thể bạn sẽ quên cú pháp. Một cách để nhớ lệnh này là bằng cách nhớ lại git push [remotename] [localbranch]:[remotebranch]cú pháp mà chúng ta đã đi qua một chút trước đó. Nếu bạn rời khỏi [localbranch]phần đó, thì về cơ bản, bạn đang nói, Hãy không có gì về phía tôi và biến nó thành [remotebranch].

Tôi đã ban hành git push origin: bugfixvà nó hoạt động rất đẹp. Scott Chacon đã đúng, tôi sẽ muốn tai chó đó (hoặc hầu như là tai chó bằng cách trả lời điều này trên Stack Overflow).

Sau đó, bạn nên thực hiện điều này trên các máy khác

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

để tuyên truyền thay đổi.


353
Đừng quên thực hiện git fetch --all --prunetrên các máy khác sau khi xóa chi nhánh từ xa trên máy chủ. | | Sau khi xóa nhánh cục bộ git branch -dvà xóa nhánh từ xa bằng git push origin --deletecác máy khác, vẫn có thể có "nhánh theo dõi lỗi thời" (để xem chúng làm gì git branch -a). Để thoát khỏi những điều này làm git fetch --all --prune.
Trevor Boyd Smith

14
Ngoài @ TrevorBoydSmith git branch -ađể xem tất cả các chi nhánh, bạn cũng chỉ có thể sử dụng git branch -rđể xem các chi nhánh từ xa. xem thêm git remote show origin- nguồn: git yet.com/interantly/2009/02/13/list-remote-branches.html
Sandra

17
Tôi đã phải chạy git branch -D Branch_Nameđể thoát khỏi chi nhánh địa phương
Kolob Canyon

11
@KolobCanyon Bạn chỉ phải sử dụng -D nếu nhánh chưa được sáp nhập vào nhánh khác.
BTRUE

3
Câu hỏi là "Tôi cần làm gì khác nhau để xóa thành công nhánh từ xa / origin / bugfix cả cục bộ và trên GitHub?" Sau khi chạy các lệnh trong câu trả lời được cập nhật của bạn, nhánh cục bộ vẫn hiện diện. Sẽ thật tốt nếu câu trả lời được chấp nhận là một câu trả lời hoàn chỉnh . Thật tuyệt vời khi Git khó thực hiện các nhiệm vụ đơn giản ...
jww

3316

Câu trả lời của Matthew là tuyệt vời để loại bỏ các nhánh từ xa và tôi cũng đánh giá cao lời giải thích, nhưng để phân biệt đơn giản giữa hai lệnh:

Để xóa một chi nhánh địa phương khỏi máy của bạn:

git branch -d {the_local_branch}(sử dụng -Dthay thế để buộc xóa chi nhánh mà không kiểm tra trạng thái hợp nhất)

Để xóa một nhánh từ xa khỏi máy chủ:

git push origin --delete {the_remote_branch}

Tham khảo: Git: Xóa một nhánh (cục bộ hoặc từ xa)


250
@megido cũng -Dxóa các lực lượng, -dđưa ra cảnh báo nếu nó chưa được hợp nhất.
TankorSmash

8
Nếu chi nhánh địa phương của bạn không hợp nhất với chủ và đã chạy 'git branch -d your_branchthì bạn sẽ gặp lỗi nhưerror: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
geek

12
Tôi sẽ đề nghị sử dụng -d thay vì -D vì nó an toàn hơn. Nếu -d không thành công do các cam kết không được hợp nhất thì bạn cần phải đánh giá điều đó và nếu nó chắc chắn được gỡ bỏ thì hãy sử dụng -D.
rooby 2/2/2016

7
Những người khác có bản sao kho lưu trữ nơi các nhánh từ xa đã bị xóa nên chạy git remote prune <name>(ví dụ git remote prune origin) để xóa cục bộ các nhánh cũ không còn tồn tại trong điều khiển từ xa.
code_dredd

3
Tôi muốn thêm rằng -d đưa ra cảnh báo nếu nó không được hợp nhất với ĐẦU hiện tại. Nếu bạn cần sự rõ ràng, tôi khuyên dùng lệnh này git branch -a --merged origin/masterNó sẽ liệt kê bất kỳ nhánh nào, cả cục bộ và từ xa; đã được sáp nhập vào chủ. Thông tin bổ sung tại đây
Eric

2042

Những câu trả lời ngắn

Nếu bạn muốn giải thích chi tiết hơn về các lệnh sau, hãy xem câu trả lời dài trong phần tiếp theo.

Xóa một nhánh từ xa

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

Xóa một chi nhánh địa phương

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force-delete un-merged branches

Xóa một nhánh theo dõi từ xa cục bộ

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

Các câu trả lời dài : có ba chi nhánh khác nhau để xóa!

Khi bạn đang xử lý xóa các nhánh cả cục bộ và từ xa, hãy nhớ rằng có ba nhánh khác nhau có liên quan :

  1. Các chi nhánh địa phương X.
  2. Các chi nhánh nguồn gốc từ xa X.
  3. Nhánh theo dõi từ xa cục bộ theo dõi nhánh origin/Xtừ xa X.

Hình dung của ba nhánh

Các poster ban đầu được sử dụng:

git branch -rd origin/bugfix

Mà chỉ xóa chi nhánh theo dõi từ xa cục bộ của mình origin/bugfix, và không phải chi nhánh từ xa thực tế bugfixtrên origin.

Sơ đồ 2

Để xóa chi nhánh từ xa thực tế đó , bạn cần

git push origin --delete bugfix

Sơ đồ 3

Chi tiết bổ sung

Các phần sau đây mô tả chi tiết bổ sung cần xem xét khi xóa các nhánh theo dõi từ xa và theo dõi từ xa của bạn.

Nhấn để xóa các nhánh từ xa cũng loại bỏ các nhánh theo dõi từ xa

Lưu ý rằng việc xóa nhánh từ xa Xkhỏi dòng lệnh bằng cách sử dụng a git push cũng sẽ xóa nhánh theo dõi từ xa cục bộ origin/X , do đó không cần thiết phải cắt nhánh theo dõi từ xa đã lỗi thời bằng git fetch --prunehoặc git fetch -p. Tuy nhiên, nó sẽ không đau nếu bạn làm điều đó.

Bạn có thể xác minh rằng nhánh theo dõi từ xa origin/Xcũng bị xóa bằng cách chạy như sau:

# 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

Cắt xén nguồn gốc chi nhánh theo dõi từ xa cục bộ / X

Nếu bạn không xóa chi nhánh từ xa Xkhỏi dòng lệnh (như trên), thì kho lưu trữ cục bộ của bạn sẽ vẫn chứa (một nhánh theo dõi từ xa đã lỗi thời) origin/X. Điều này có thể xảy ra nếu bạn xóa một chi nhánh từ xa trực tiếp qua giao diện web của GitHub.

Một cách điển hình để loại bỏ các nhánh theo dõi từ xa lỗi thời này (kể từ phiên bản Git 1.6.6) là chỉ cần chạy git fetchvới --prunehoặc ngắn hơn -p. Lưu ý rằng việc này sẽ xóa tất cả các nhánh theo dõi từ xa cục bộ đã lỗi thời đối với mọi nhánh từ xa không còn tồn tại trên điều khiển từ xa :

git fetch origin --prune
git fetch origin -p # Shorter

Dưới đây là trích dẫn có liên quan từ ghi chú phát hành 1.6.6 (nhấn mạnh của tôi):

"git fetch" đã học --all--multiplecác tùy chọn, để chạy tìm nạp từ nhiều kho lưu trữ và --prunetùy chọn để loại bỏ các nhánh theo dõi từ xa đã cũ. Những điều này làm cho "git remote update" và "git remote prune" ít cần thiết hơn (mặc dù không có kế hoạch loại bỏ "cập nhật từ xa" hay "prune remote").

Thay thế cho việc cắt tỉa tự động ở trên cho các nhánh theo dõi từ xa lỗi thời

Ngoài ra, thay vì cắt tỉa các nhánh theo dõi từ xa cục bộ đã lỗi thời của bạn git fetch -p, bạn có thể tránh thực hiện thêm thao tác mạng bằng cách chỉ xóa thủ công các nhánh bằng --remotehoặc -rcờ:

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

Xem thêm


Từ hình minh họa của bạn, tôi có thể thấy có repo bản sao địa phương và repo nguồn gốc từ xa. Vì vậy, có ít nhất hai nhánh vật lý. Chi nhánh thứ ba cần xóa ở đâu? Là nhánh thứ ba chỉ là một con trỏ trỏ đến một cam kết trong repo bản sao cục bộ?
huggie

6
@huggie điều đó khá đúng. Các chi nhánh trong Git chỉ là các dấu trang được đính kèm với các cam kết. Vì vậy, trong các biểu đồ của tôi ở trên, có Xorigin/Xđánh dấu trong bản sao cục bộ (2 nhánh), và sau đó có Xtrên điều khiển từ xa (tạo 3 nhánh).

6
+1 cho nhánh theo dõi từ xa. Chi nhánh này là nguyên nhân gây ra vấn đề khi bạn nhân bản chi nhánh của người khác. Nó tiếp tục theo dõi các cam kết của bạn và hỏi bạn nếu bạn muốn đẩy đến chi nhánh của người đó.
Kermit_ice_tea

1
Đồ họa một mình là vàng Làm tốt.
Mogens TrasherDK

1
Vì lợi ích của độc giả trong tương lai: Những gì @Kermit_ice_tea đang nói ở trên là một nhánh cục bộ (như được mô tả trong câu trả lời này), không phải là một nhánh theo dõi từ xa . Khi một nhánh cục bộ có một "nhánh ngược dòng" được cấu hình cho nó, nó sẽ mặc định kéo từ và đẩy đến nhánh từ xa đó. Một nhánh cục bộ có "nhánh ngược dòng" được đặt trên nó được gọi là "nhánh theo dõi" , do đó rất dễ nhầm lẫn với các nhánh theo dõi từ xa do thuật ngữ tương tự.
David P

1520

Các bước để xóa một chi nhánh:

Để xóa chi nhánh từ xa:

git push origin --delete <your_branch>

Để xóa chi nhánh địa phương , bạn có ba cách :

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

Giải thích: OK, chỉ cần giải thích những gì đang xảy ra ở đây!

Đơn giản chỉ cần làm git push origin --deleteđể xóa chi nhánh từ xa của bạn chỉ , thêm tên của chi nhánh ở cuối và điều này sẽ xóa và đẩy nó đến từ xa cùng một lúc ...

Ngoài ra, git branch -Dmà chỉ đơn giản là xóa các chi nhánh địa phương chỉ ! ...

-Dlà viết tắt của cụm từ --delete --forcesẽ xóa chi nhánh ngay cả khi nó không được hợp nhất (lực lượng xóa), nhưng bạn cũng có thể sử dụng -dtừ viết tắt --deletenào gây ra lỗi tương ứng với trạng thái hợp nhất chi nhánh ...

Tôi cũng tạo hình ảnh dưới đây để hiển thị các bước:

Xóa một chi nhánh từ xa và cục bộ trong git


49
git branch -asẽ hiển thị các nhánh cục bộ và từ xa. Nó sẽ giúp bạn giới thiệu sơ đồ.
LoranceChen

4
lưu ý rằng nếu bạn đang thiết lập trên nhánh bạn muốn xóa, bạn cần kiểm tra một nhánh khác với nhánh bạn cần xóa (ví dụ: master) trước khi xóa nhánh cục bộ.
BaDr Amer

Khi các chi nhánh bị xóa về nguồn gốc, kho lưu trữ cục bộ của bạn sẽ không chú ý đến điều đó. Bạn vẫn sẽ có các phiên bản được lưu trong bộ nhớ cache cục bộ của các nhánh đó (thực sự tốt) nhưng nhánh git -a vẫn sẽ liệt kê chúng là các nhánh từ xa. Bạn có thể xóa thông tin đó cục bộ như thế này: git remote prune originBản sao các nhánh bị xóa cục bộ của bạn không bị xóa bởi điều này. Hiệu quả tương tự đạt được bằng cách sử dụnggit fetch --prune
vibs2006

2
Hình ảnh gây mất tập trung và rất lớn và không thêm gì vào câu trả lời. Tôi hy vọng điều này không trở thành một xu hướng trên SO.
jmiserez

797

Bạn cũng có thể sử dụng cách sau để xóa nhánh từ xa

git push --delete origin serverfix

Mà làm điều tương tự như

git push origin :serverfix

nhưng nó có thể dễ nhớ hơn


1
... và an toàn hơn khi sử dụng: O
cst1992

1
Bạn đã quên phần về việc xóa chi nhánh địa phương có thể được thực hiện bằng cách: git branch -d <local_branch>hoặc git branch -D <local_branch>để xóa lực lượng
Amit Dash

370

Mẹo: Khi bạn xóa chi nhánh bằng

git branch -d <branchname> # Deletes local branch

hoặc là

git push origin :<branchname> # Deletes remote branch

chỉ các tài liệu tham khảo bị xóa. Mặc dù chi nhánh thực sự bị xóa trên điều khiển từ xa, các tham chiếu đến nó vẫn tồn tại trong kho lưu trữ cục bộ của các thành viên trong nhóm của bạn. Điều này có nghĩa là đối với các thành viên khác trong nhóm, các nhánh bị xóa vẫn hiển thị khi họ thực hiện a git branch -a.

Để giải quyết điều này, các thành viên trong nhóm của bạn có thể cắt tỉa các nhánh bị xóa bằng

git remote prune <repository>

Điều này là điển hình git remote prune origin.


14
Bạn nên làm rõ rằng các git pushhoạt động trên xóa chi nhánh địa phương chi nhánh từ xa.
Backika Annika

22
Lưu ý rằng đó git remote prunelà một cách hơi lỗi thời để loại bỏ các nhánh theo dõi từ xa lỗi thời, cách mới hơn để làm điều đó là sử dụng git fetch --prunehoặc git fetch -p.

1
@RRMadhav, thực sự bạn sẽ không thấy chi nhánh bị xóa sau khi xóa nó vì tham chiếu đến chi nhánh từ xa sẽ bị xóa cho bạn cục bộ. Bất cứ ai khác trong nhóm của bạn đã kiểm tra chi nhánh đó vẫn sẽ có tài liệu tham khảo đó và vẫn sẽ thấy nó trừ khi họ cắt tỉa chi nhánh.
pfrenssen

361

Nếu bạn muốn xóa một nhánh, trước tiên hãy kiểm tra đến nhánh khác ngoài nhánh cần xóa.

git checkout other_than_branch_to_be_deleted

Xóa chi nhánh địa phương:

git branch -D branch_to_be_deleted

Xóa chi nhánh từ xa:

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
Lưu ý rằng -D buộc phải xóa. Nó luôn luôn tốt hơn để sử dụng -d, nó sẽ nhắc nhở nếu bạn cần làm điều gì đó nguy hiểm.
Jonathon Reinhart

13
ahahah :) tùy bạn: sử dụng -d nếu bạn muốn thấy git khóc hoặc -D nếu bạn muốn khóc.
Felipe

224

Điều này rất đơn giản: Chỉ cần chạy lệnh sau:

Để xóa một nhánh Git cả cục bộ và từ xa, trước tiên hãy xóa nhánh cục bộ bằng lệnh này:

git branch -d example

(Đây examplelà tên chi nhánh.)

Và sau đó, xóa nhánh từ xa bằng lệnh này:

git push origin :example

199

Một cách tiếp cận khác là:

git push --prune origin

CẢNH BÁO: Điều này sẽ xóa tất cả các chi nhánh từ xa không tồn tại cục bộ. Hoặc toàn diện hơn,

git push --mirror

sẽ làm cho kho lưu trữ từ xa trông giống như bản sao cục bộ của kho lưu trữ (đầu cục bộ, điều khiển từ xa và thẻ được nhân đôi trên điều khiển từ xa).


1
git push --prune origin không làm gì cho tôi trên gitlab: git clone git: //repo.git; chi nhánh git -d -r gốc / một số chi nhánh; git đẩy - nguồn gốc; sản lượng: Mọi thứ cập nhật; git lấy; đưa các chi nhánh bị xóa cục bộ trở lại; git đẩy --mirror; bây giờ họ thực sự đã biến mất
eMBee

165

Tôi sử dụng như sau trong cài đặt Bash của mình :

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

Sau đó, bạn có thể gọi:

git-shoot branchname

11
Cuối cùng tôi chỉ cần thêm bí danh "bắn" vào .gitconfig bắn = đẩy gốc --delete
hdost

Nếu nguồn gốc của bạn là Stlass Atlassian và nhánh được đặt làm mặc định, bạn sẽ gặp lỗi "Theo mặc định, việc xóa nhánh hiện tại bị từ chối ...". Tôi đã phải thay đổi nhánh mặc định trong Stash để trỏ đến nhánh khác trước khi tôi có thể xóa.
neoscribe

Điều này hoàn toàn đơn giản như bạn đã làm, nhưng fyi git cũng cho phép bạn thực hiện các lệnh tùy chỉnh. Đặt git push origin --delete $1trong một tập tin trên đường dẫn của bạn được gọi git-shootgit shoot branchnamecũng sẽ làm việc.
mahemoff

132

Xóa cục bộ:

Để xóa một chi nhánh địa phương, bạn có thể sử dụng:

git branch -d <branch_name>

Để xóa một nhánh cưỡng bức, sử dụng -Dthay vì -d.

git branch -D <branch_name>

Xóa từ xa:

Có hai lựa chọn:

git push origin :branchname

git push origin --delete branchname

Tôi sẽ đề nghị bạn sử dụng cách thứ hai vì nó trực quan hơn.


129

Kể từ tháng 1 năm 2013, GitHub đã bao gồm một Delete branchnút bên cạnh mỗi chi nhánh trong trang "Chi nhánh" của bạn.

Bài đăng trên blog có liên quan: Tạo và xóa chi nhánh


3
Tôi chỉ bắt đầu sử dụng Github trong năm nay, vì vậy tôi đã tự hỏi tại sao đây lại là một câu hỏi được đánh giá cao như vậy và tại sao không có câu trả lời hàng đầu nào đề nghị xóa nó khỏi giao diện web của Github! Điều thú vị là nó chỉ là một bổ sung gần đây.
Cam Jackson

6
Tôi sẽ chỉ ra điều này. Lưu ý rằng nút sẽ không xóa chi nhánh địa phương của bạn ... xem câu trả lời này để biết cách thực hiện: stackoverflow.com/a/10999165/901641
ArtOfWarfare

126

Nếu bạn muốn hoàn thành cả hai bước này bằng một lệnh duy nhất, bạn có thể tạo bí danh cho nó bằng cách thêm vào bên dưới vào ~/.gitconfig:

[alias]
    rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"

Ngoài ra, bạn có thể thêm phần này vào cấu hình toàn cầu của mình từ dòng lệnh bằng cách sử dụng

git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'

LƯU Ý : Nếu sử dụng -d(chữ thường d), nhánh sẽ chỉ bị xóa nếu nó đã được hợp nhất. Để buộc xóa xảy ra, bạn sẽ cần sử dụng -D(chữ hoa D).


6
Đây là những gì tôi đang tìm kiếm. Bí danh hàm shell của riêng tôi không hoạt động (EOF bất ngờ) và tôi không thể hiểu tại sao, nhưng điều này hoạt động rất tốt! Thay đổi duy nhất tôi đã thực hiện là thay thế &&bằng ;ngay cả khi lệnh đầu tiên thất bại, lệnh thứ hai vẫn sẽ thực thi (đôi khi chỉ tồn tại cục bộ hoặc chỉ tồn tại từ xa).
dùng1021726

115

Để xóa chi nhánh của bạn cục bộ và từ xa

  • Thanh toán cho chi nhánh chính - git checkout master

  • Xóa chi nhánh từ xa của bạn - git push origin --delete <branch-name>

  • Xóa chi nhánh địa phương của bạn - git branch --delete <branch-name>


112

Bạn cũng có thể làm điều này bằng cách sử dụng git remote prune origin

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

Nó cắt tỉa và xóa các nhánh theo dõi từ xa khỏi git branch -rdanh sách.


108

Ngoài các câu trả lời khác, tôi thường sử dụng công cụ git_remote_branch . Đó là một cài đặt bổ sung, nhưng nó giúp bạn có một cách thuận tiện để tương tác với các chi nhánh từ xa. Trong trường hợp này, để xóa:

grb delete branch

Tôi thấy rằng tôi cũng sử dụng các lệnh publishtrackkhá thường xuyên.


98

Một one-liner lệnh để xóa cả hai địa phương và từ xa :

D=branch-name; git branch -D $D; git push origin :$D

Hoặc thêm bí danh dưới đây vào ~ / .gitconfig . Sử dụng:git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git push origin --delete \"$1\"; };f"

17
Sử dụng git branch -Dcẩn thận trong một tập lệnh, vì nó buộc xóa một nhánh mà không kiểm tra nó đã được hợp nhất. Sử dụng -dđể được an toàn.
caesarsol

94

Xóa chi nhánh

Giả sử công việc của chúng tôi trên nhánh "mẫu liên hệ" đã hoàn thành và chúng tôi đã tích hợp nó vào "chính chủ". Vì chúng tôi không cần nó nữa, chúng tôi có thể xóa nó (cục bộ):

$ git branch -d contact-form

Và để xóa chi nhánh từ xa:

git push origin --delete contact-form

87

Xóa chi nhánh từ xa

git push origin :<branchname>

Xóa chi nhánh địa phương

git branch -D <branchname>

Xóa các bước chi nhánh địa phương:

  1. kiểm tra chi nhánh khác
  2. xóa chi nhánh địa phương

3
Việc xóa chi nhánh từ xa có yêu cầu "git đẩy" sau đó không?
Samitha Chathuranga

@SamithaChathuranga không, git push origin :<branchname>đã đẩy một nhánh 'rỗng' đến điều khiển từ xa (do đó xóa nhánh từ xa)
Michał Szajbe

86

Nói một cách đơn giản:

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

Điều này hoạt động nếu chi nhánh của riêng bạn. Nhưng nếu bạn cắt tỉa tất cả các nhánh không cần thiết trong repo (một số không phải của bạn) thì sẽ không đủ
Kermit_ice_tea

83
git push origin --delete <branch Name>

dễ nhớ hơn

git push origin :branchName

81

Bây giờ bạn có thể làm điều đó với ứng dụng GitHub Desktop .

Sau khi ra mắt ứng dụng

  1. Bấm vào dự án chứa chi nhánh
  2. Chuyển sang chi nhánh bạn muốn xóa

    Chi nhánh chuyển mạch

  3. Từ menu "Chi nhánh", chọn "Hủy xuất bản ...", để xóa chi nhánh khỏi máy chủ GitHub.

    Chi nhánh chưa được công bố

  4. Từ menu "Chi nhánh", chọn, 'Xóa " Branch_name " ...', để xóa chi nhánh khỏi máy cục bộ của bạn (AKA máy bạn hiện đang làm việc)

    Xóa chi nhánh địa phương


15
Tôi đã không downvote, nhưng suy nghĩ của tôi là nó không thực sự giúp đỡ. Câu hỏi rõ ràng là yêu cầu một câu trả lời loại dòng lệnh nhiều hơn mà không phải sử dụng một chương trình bên ngoài, nếu mọi người nhấp vào đây, họ có thể sẽ không tìm kiếm một github cho các cách để bàn.
Daemedeor

12
@Daemedeor, tôi không đồng ý. Vào năm 2010 khi OP đặt câu hỏi, cách thức thực hiện UI không tồn tại và lựa chọn duy nhất là dòng lệnh. Để chỉ ra rằng bạn muốn một tùy chọn chỉ dòng lệnh, nó phải được nêu trong câu hỏi hoặc với thẻ, giao diện dòng lệnh , trong trường hợp này là không có.
Eric

3
Lệnh git để xóa một nhánh từ xa hút và tôi có xu hướng quên nó (cả mới và cũ). May mắn thay, có các công cụ GUI có tùy chọn. Git Gui, TortoiseGit và GitHub Desktop có nó - Tôi ước Git Tiện ích mở rộng cũng có chức năng này. Dù sao, điều tôi nhớ là bắt đầu Git Gui từ bên trong Tiện ích mở rộng Git khi tôi cần xóa một chi nhánh từ xa.
vezenkov

81

Nó rất đơn giản:

Để xóa chi nhánh từ xa

git push -d origin <branch-name>

Hoặc là

git push origin :<branch-name>

Để xóa chi nhánh địa phương

git branch -D <branch-name>

2
Tôi cần phải sử dụng --deletethay vì -dxóa chi nhánh từ xa.
ZakJ

-dtùy chọn là một bí danh cho --deletevà nếu --deletecông việc thì -dcũng nên hoạt động, nếu bạn muốn xóa một nhánh bạn có thể sử dụng -Dthay vì-d hoặc --delete.
Vivek Maru

78

Để xóa cục bộ - (bình thường)

git branch -d my_branch

Nếu chi nhánh của bạn đang trong quá trình sắp xếp lại / sáp nhập và điều đó không được thực hiện đúng, điều đó có nghĩa là bạn sẽ gặp lỗi Rebase/Merge in progress, vì vậy trong trường hợp đó, bạn sẽ không thể xóa chi nhánh của mình.

Vì vậy, hoặc bạn cần phải giải quyết việc nổi loạn / sáp nhập. Nếu không, bạn có thể buộc xóa bằng cách sử dụng,

git branch -D my_branch

Để xóa trong điều khiển từ xa :

git push --delete origin my_branch

Bạn có thể làm tương tự bằng cách sử dụng:

git push origin :my_branch   # Easy to remember both will do the same.

Biểu diễn đồ họa:

Nhập mô tả hình ảnh ở đây


68

Điều này sẽ không hoạt động nếu bạn có một thẻ có cùng tên với chi nhánh trên điều khiển từ xa:

$ 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'

Trong trường hợp đó, bạn cần xác định rằng bạn muốn xóa chi nhánh, không phải thẻ:

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

Tương tự, để xóa thẻ thay vì chi nhánh bạn sẽ sử dụng:

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

1
Điều này là tốt, nhưng mọi người thực sự không nên đặt tên các nhánh và thẻ của họ có cùng tên và cùng một sơ đồ đặt tên ở vị trí đầu tiên.

3
Vâng, kịch bản của tôi là tôi đã chuyển đổi một nhánh thành một thẻ và nó có ý nghĩa cho thẻ có cùng tên với chi nhánh. Bằng cách chuyển đổi, tôi có nghĩa là hợp nhất nhánh B thành A và gắn thẻ cam kết cuối cùng trong nhánh B với thẻ B để sau khi xóa nhánh B, nó vẫn có thể được khôi phục dễ dàng bằng cách kiểm tra thẻ B.
Greg

53

Nhiều câu trả lời khác sẽ dẫn đến lỗi / cảnh báo. Cách tiếp cận này là bằng chứng tương đối ngu ngốc mặc dù bạn vẫn có thể cần git branch -D branch_to_deletenếu nó không được hợp nhất hoàn toàn some_other_branch, chẳng hạn.

git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete

Cắt tỉa từ xa không cần thiết nếu bạn xóa chi nhánh từ xa. Nó chỉ được sử dụng để có được các điều khiển từ xa cập nhật nhất có sẵn trên kho lưu trữ mà bạn đang theo dõi. Tôi đã quan sát git fetchsẽ thêm điều khiển từ xa, không loại bỏ chúng. Đây là một ví dụ về khi nào git remote prune originthực sự sẽ làm một cái gì đó:

Người dùng A thực hiện các bước trên. Người dùng B sẽ chạy các lệnh sau để xem các nhánh từ xa cập nhật nhất:

git fetch
git remote prune origin
git branch -r

51

Tôi phát ốm vì câu trả lời này, vì vậy tôi đã thực hiện một cách tiếp cận tương tự với câu trả lời mà crizCraig đã đăng trước đó.

Tôi đã thêm vào sau đây vào hồ sơ Bash của tôi:

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

Sau đó, mỗi khi tôi hoàn thành với một nhánh (chẳng hạn được sáp nhập vào master), tôi sẽ chạy như sau trong thiết bị đầu cuối của mình:

gitdelete my-branch-name

... mà sau đó xóa my-branch-nametừ origincũng như cục bộ.


7
mở rộng về điều này, --delete "$@"-D "$@"thay vì $1sẽ xử lý nó cho nhiều chi nhánh.
kunl

3
Tôi khuyên bạn nên chạy git branch -d(với chữ thường 'd') trước để đảm bảo các thay đổi đã được hợp nhất và sau đó đẩy nếu thành công (đặt &&giữa các lệnh)
bryn

49

Trước khi thực hiện

git branch --delete <branch>

trước tiên hãy chắc chắn rằng bạn xác định tên chính xác của nhánh từ xa là gì bằng cách thực thi:

git ls-remote

Điều này sẽ cho bạn biết những gì để nhập chính xác cho <branch>giá trị. ( branchlà trường hợp nhạy cảm!)


46

Sử dụng:

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

Nếu bạn chắc chắn muốn xóa nó, hãy chạy

git branch -D bugfix

Bây giờ để dọn dẹp các chi nhánh từ xa bị xóa chạy

git remote prune origin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.