a

Câu hỏi Làm cách nào để xóa chi nhánh Git cả cục bộ lẫn từ xa?


Tôi muốn xóa một chi nhánh cả cục bộ và trên ngã ba dự án từ xa của tôi trên GitHub.

Nỗ lực không thành công để xóa 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 cần làm gì khác để xóa thành công remotes/origin/bugfix chi nhánh cả cục bộ và trên GitHub?


13843
2018-01-05 01:12


gốc


Ghi chú của người kiểm duyệt: Nếu bạn đị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 có thêm bất kỳ giá trị đáng kể nào không? - Robert Harvey♦
Lưu ý: đối với Git 2.5+ (Q2 2015), thông báo chính xác sẽ là "deleted remote-tracking branch": xem github.com/git/git/commit/… - VonC


Các câu trả lời:


Tóm tắt điều hành

$ git push --delete <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.

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

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

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

Chú thích: Các -d tùy chọn là bí danh cho --delete, mà chỉ xóa chi nhánh nếu nó đã được sáp nhập hoàn toàn vào nhánh ngược dòng của nó. Bạn cũng có thể sử dụng -D, là bí danh cho --delete --force, 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 xa chi nhánh 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 Git v1.5.0 "để xóa chi nhánh hoặc thẻ từ xa".

Bắt đầu vào Git v2.8.0 bạn cũng có thể dùng git push với -d tù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ễ 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 bởi Scott Chacon:

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

Giả sử bạn đã hoàn thành với một chi nhánh từ xa - giả sử bạn và 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 chi nhánh chính của từ xa (hoặc bất kỳ chi nhánh nào mà dòng mã ổn định của bạn). Bạn có thể xóa một nhánh từ xa bằng cách sử dụng cú pháp khá thay đổi git push [remotename] :[branch]. Nếu bạn muốn xóa chi nhánh serverfix của bạn khỏi máy chủ, bạn chạy như sau:

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

Boom. Không có thêm chi nhánh trên máy chủ của bạn. Bạn có thể muốn đánh dấu trang này, bởi 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 gọi lại git push [remotename] [localbranch]:[remotebranch] cú pháp mà chúng tôi đã đi qua một chút trước đó. Nếu bạn rời khỏi [localbranch] một phần, sau đó bạn về cơ bản nói, "Không có gì trên mặt của tôi và làm cho nó được [remotebranch]. ”

Tôi đã ban hành git push origin :bugfix và nó hoạt động rất đẹp. Scott Chacon đã đúng - tôi sẽ muốn tai chó trang đó (hoặc tai chó gần như 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

git fetch --all --prune

để tuyên truyền những thay đổi.


17234
2018-01-05 01:13



Nếu bạn biết cú pháp git push origin local_branch:remote_branch, sau đó cú pháp để xóa một nhánh với git push origin :remote_branch là loại dễ thương. Có một khoảng trống trước : - Marc-André Lafortune
Đừng quên làm một git fetch --all --prune trê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 chi nhánh địa phương với git branch -d và xóa chi nhánh từ xa bằng git push origin --delete các máy khác vẫn có thể có "các nhánh theo dõi lỗi thời" (để xem chúng git branch -a). Để loại bỏ những điều này git fetch --all --prune. - Trevor Boyd Smith
ngoài @ TrevorBoydSmith's git branch -a để xem tất cả các chi nhánh, bạn cũng có thể sử dụng git branch -r để chỉ xem các nhánh từ xa. Xem thêm git remote show origin - nguồn: gitready.com/intermediate/2009/02/13/list-remote-branches.html - Sandra
Tôi phải chạy git branch -D Branch_Name để thoát khỏi chi nhánh địa phương - Kolob Canyon
@KolobCanyon Bạn chỉ phải sử dụng -D nếu chi nhánh chưa được sáp nhập vào một chi nhánh khác. - BTRUE


Câu trả lời của Matthew rất tuyệt vời để xóa xa các chi nhánh và tôi cũng đánh giá cao sự giải thích, nhưng để tạo sự phân biệt đơn giản giữa hai lệnh:

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

git branch -d {the_local_branch} (sử dụng -D thay vì 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 từ xa chi nhánh từ máy chủ:

git push origin --delete {the_remote_branch}

Tài liệu tham khảo: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote


2872
2018-06-12 14:51



@megido -D lực lượng xóa, -d cung cấp cho bạn một cảnh báo nếu nó chưa được hợp nhất. - TankorSmash
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_branchsau đó bạn sẽ 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'. - geeks
Tôi sẽ đề nghị sử dụng -d thay vì -D vì nó là an toàn hơn. Nếu -d thất bại do cam kết chưa được nhấn thì bạn cần phải đánh giá đó và nếu nó chắc chắn là OK để loại bỏ sau đó sử dụng -D. - rooby
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) để loại bỏ cục bộ các nhánh cũ mà không còn tồn tại trong điều khiển từ xa nữa. - code_dredd
Nếu chi nhánh của bạn trong ngã ba của bạn (không phải lúc nào cũng xuất xứ), hãy sử dụng kho lưu trữ thích hợp. ví dụ. git push myRepo: mrbranchtodelete - Dhanuka777


Các 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 :<branch>          # Git versions older than 1.7.0

Xóa 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 tracking branches
git fetch <remote> -p      # Shorter

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

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

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

Visualization of 3 branches

Áp phích ban đầu được sử dụng

git branch -rd origin/bugfix

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

Diagram 2

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

git push origin --delete bugfix

Diagram 3

Chi tiết bổ sung

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

Đẩy để xóa các nhánh từ xa cũng xóa các nhánh theo dõi từ xa

Lưu ý rằng xóa nhánh từ xa X từ dòng lệnh bằng cách sử dụng git push  cũng sẽ xóa chi nhánh theo dõi từ xa cục bộ  origin/X, do đó, không cần thiết phải cắt bỏ chi nhánh theo dõi từ xa lỗi thời với git fetch --prune hoặc là git fetch -p, mặc dù nó sẽ không làm hại nếu bạn đã làm nó anyway.

Bạn có thể xác minh rằng nhánh theo dõi từ xa origin/X cũ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 bớt nguồn gốc chi nhánh theo dõi từ xa lỗi thời / X

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

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) chỉ đơn giản là chạy git fetch với --prune hoặc ngắn hơn -p. Lưu ý rằng thao tá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 cho bất kỳ nhánh từ xa nào 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

Đây là báo giá liên quan từ Ghi chú phát hành 1.6.6 (tôi nhấn mạnh):

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

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

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

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

Xem thêm


1641
2018-05-30 18:32



Từ hình minh họa của bạn, tôi có thể thấy có repo bản sao cục bộ và repo 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? Chi 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
@huggie đó là khá nhiều chính xác. Các nhánh trong Git chỉ là các dấu trang gắn liền với các cam kết. Vì vậy, trong biểu đồ của tôi ở trên, có X và origin/X dấu trang trong bản sao cục bộ (2 nhánh), và sau đó có X trên điều khiển từ xa (tạo 3 nhánh).
1 cho chi nhánh theo dõi từ xa. Nhánh này là nguyên nhân gây ra vấn đề khi bạn nhân bản 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à yêu cầu bạn nếu bạn muốn đẩy đến chi nhánh của người đó. - Kermit_ice_tea


Các bước xóa chi nhánh:

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

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 đến 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ó vào điều khiển từ xa cùng một lúc ...

Cũng thế, git branch -D, chỉ đơn giản là xóa chi nhánh địa phương CHỈ CÓ! ...

-D viết tắt của --delete --force sẽ xóa chi nhánh ngay cả khi nó không được hợp nhất (buộc xóa), nhưng bạn cũng có thể sử dụng -d Viết tắt của --delete đưa 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 bên dưới để hiển thị các bước:

delete a remote and local branch in git


927
2018-06-27 13:13



git branch -a sẽ hiển thị các nhánh địa phương và từ xa. Nó sẽ giúp bạn giới thiệu sơ đồ. - LoranceChen
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 phải thanh toán chi nhánh khác với nhánh bạn cần xóa (ví dụ: master) trước khi xóa chi nhánh cục bộ. - BaDr Amer
[tắt chủ đề] làm cách nào bạn tạo ra hình ảnh tuyệt vời ở trên? - Lucas Caton


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

git push --delete origin serverfix

Điều tương tự như

git push origin :serverfix

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


703
2017-10-27 22:22



... và an toàn hơn để sử dụng: O - cst1992
Bạn đã quên một phần về việc xóa chi nhánh cục bộ có thể thực hiện bằng cách: git branch -d <local_branch> hoặc là git branch -D <local_branch> để xóa lực - Amit Dash


Nếu bạn muốn xóa một chi nhánh, trước tiên thanh toán cho chi nhánh khác với chi nhánh sẽ bị 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 nhánh từ xa:

git push origin --delete branch_to_be_deleted

344
2017-10-07 13:52





Mẹo: Khi bạn xóa các nhánh bằng cách sử dụng

git branch -d <branchname>    # deletes local branch

hoặc là

git push origin :<branchname> # deletes remote branch

chỉ các tham chiếu bị xóa. Mặc dù nhánh thực sự bị loại bỏ trên điều khiển từ xa nhưng các tham chiếu đến nó vẫn tồn tại trong các 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 chi nhánh đã xóa vẫn hiển thị khi họ thực hiện 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 với

git remote prune <repository>

Điều này thường git remote prune origin.


329
2017-11-07 13:02



Bạn nên làm rõ rằng ở trên git push hoạt động xóa chi nhánh địa phương và nhánh từ xa. - Annika Backstrom
Lưu ý rằng git remote prune là 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 để thực hiện nó là sử dụng git fetch --prune hoặc là git fetch -p.
@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 nhánh từ xa sẽ bị xóa cho bạn cục bộ. Bất kỳ ai khác trong nhóm của bạn đã kiểm tra chi nhánh đó vẫn sẽ có tham chiếu đó và sẽ vẫn thấy nó trừ khi họ cắt cành. - pfrenssen


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

247
2017-10-24 17:36



Lưu ý rằng -D  lực lượng việc xóa. Nó luôn luôn tốt hơn để sử dụng -d, sẽ nhắc nhở nếu bạn cần làm điều gì đó nguy hiểm. - Jonathon Reinhart
ahahah :) tùy thuộc vào bạn: sử dụng -d nếu bạn muốn xem git khóc hoặc -D nếu bạn muốn khóc. - Felipe


Đ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ộ lẫn từ xa, trước hết hãy xóa nhánh nội bộ bằng lệnh:

git branch -d example

(đây example là tên chi nhánh)

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

git push origin :example

212
2018-02-15 15:20