Visual Studio Code - loại bỏ các nhánh đã xóa trên GitHub vẫn hiển thị trong VS Code?


88

Trong VSCode, sau khi tôi thực hiện yêu cầu kéo và xóa nhánh trên GitHub, nhánh đó vẫn hiển thị trong Visual Studio Code. Nếu tôi chọn nhánh, nó sẽ báo Lỗi, như mong đợi.

Làm cách nào để xóa các nhánh đã xóa này khỏi VSCode - tôi có thể thực hiện tự động không?


2
Để theo dõi (3 năm sau), câu trả lời chính xác cho tôi là sự kết hợp của git fetch --prunecập nhật / xóa tham chiếu nhánh từ xa và git branch -d <branch-name>xóa nhánh cục bộ ( -Dbuộc). Khởi động lại bảng làm mới VSCode
Drenai

Không cần khởi động lại VS Code, chỉ cần nhấn nút Làm mới trong menu Kiểm soát nguồn
AS

Tôi thực sự xây dựng một chức năng để xử lý điều này và viết một bài báo nhỏ về nó. Liên kết
davidhu

Câu trả lời:


145

Rõ ràng, tính năng này là cố ý. Tôi phát hiện ra rằng một cách chính xác để loại bỏ tất cả các nhánh từ xa đã bị xóa khỏi Github là chạy lệnh sau.

git fetch --prune

Sau đó khởi động lại visual studio để xóa các nhánh khỏi bảng lệnh


6
@Brian, điều này không xóa bất kỳ chi nhánh cục bộ nào bạn có. Lệnh này xóa origin/branch_namekhỏi menu git chuyển đổi nhanh trên VSCode. Ví dụ: nếu bạn có một nhánh cục bộ testvà đẩy nó lên Github, có hai nhánh testorigin/testtrên menu nhánh git, cây tỉa chỉ loại bỏ origin/testnhánh chứ không phải testnhánh.
davidhu

@ Brian tôi thấy rằng điều này sẽ xóa các chi nhánh xóa từ xa sau khi khởi động lại VS Mã
David Wilton

lệnh này không hoạt động. Tôi vẫn nhìn thấy tất cả các chi nhánh trong danh sách cả khi làm lệnh git branchhoặc bấm vào tên chi nhánh để xem một danh sách thả xuống với tất cả các chi nhánh có sẵn
Anna Olshevskaia

@AnnaOlshevskaia git branchchỉ liệt kê các nhánh cục bộ, lệnh này có nhiệm vụ loại bỏ các remotes/branch_namenhánh. Cố gắng git branch -axem mọi thứ.
davidhu

2
Không cần khởi động lại VS Code, chỉ cần nhấn nút Làm mới trong menu Kiểm soát nguồn
AS

67

Có thể xóa các nhánh cục bộ khỏi Visual Studio Code bằng cách mở Command Pallete (Ctrl-Shift-P) rồi Chọn Git: Delete Branch ... , sau đó bạn có thể xóa nhánh cục bộ bằng cách chọn cái thích hợp từ danh sách.


1
Chưa kiểm tra nó thông qua, nhưng nó dường như chỉ hiển thị các nhánh cục bộ, vì vậy nó sẽ hoạt động như mô tả.
jave.web

2
@TylerBell Như anh ấy đã nói, đó là phương pháp loại bỏ nhánh cục bộ chứ không phải nhánh từ xa.
Anbuselvan Rocky

2
đây lẽ ra phải là câu trả lời. Tôi không biết tại sao tôi lại ngu ngốc khi không biết điều này. cảm ơn bạn @ Matthew-Disney-nấu ăn
Serzhan Akhmetov

16

Các nhánh bị xóa khỏi GitHub cũng ... chỉ bị xóa khỏi GitHub. Bạn vẫn có bản sao cục bộ của chi nhánh trên máy của mình. Để xóa chạy chi nhánh cục bộ git branch -d the_local_branch. Không có lệnh trong VS Code để làm như vậy, nhưng bạn có thể bắt đầu thiết bị đầu cuối trong VSCode bằng cách sử dụng View: Toggle Integrated Terminallệnh và chạy lệnh từ nó.

Để biết thêm thông tin về quản lý chi nhánh, vui lòng truy cập tài liệu git - https://git-scm.com/book/be/v2/Git-Branching-Branch-Management


Này cảm ơn nhé. Vâng, tôi sử dụng các lệnh git hiện tại .. nhưng hy vọng đồng bộ hóa vscode git sẽ phát hiện ra rằng điều khiển từ xa đã loại bỏ chúng - hoặc đánh dấu chúng. Đoán không :-)
Drenai

Khá ngớ ngẩn rằng họ không hỗ trợ các lệnh git gốc trong dòng lệnh git của họ. Thiết kế xấu.
Steven

cũng đang đợi phần mở rộng ở đây :)
Marko

1
Vui lòng xem câu trả lời ở trên từ @ matthew-disney-cook
Orangutech,

16

Mở bảng lệnh (Ctrl + Shift + P) và chọn Git: Fetch (Prune) .

Đây tính năng đã được sáp nhập vào VS Mã trên 20 tháng 11 năm 2018.


1
có cách nào để thực hiện hành vi mặc định này của git kéo trong vscode không?
Tuncay Göncüoğlu

9

Tôi giải thích câu hỏi là: làm thế nào tôi có thể xóa các nhánh cục bộ của mình đã được hợp nhất, vì tôi đã sử dụng Git Fetch (Prune) từ bảng lệnh. Đây có thể được coi là một "hack", nhưng đó là những gì tôi sử dụng. Trong thiết bị đầu cuối PowerShell:

$branches = (git branch --merged).replace(" ", "").replace("*", "") | ? { $_ -ne "develop" -and $_ -ne "master" }
foreach ($branch in $branches) { git branch $branch -d }

Trong trường hợp bạn không quen thuộc với PoSH, đây là những gì sẽ làm được: dòng đầu tiên lấy tên của tất cả các nhánh đã hợp nhất (ngoại trừ Develop và master), và dòng thứ hai lặp lại danh sách đó và chạy "git branch-d ". Miễn là nhánh được hợp nhất hoàn toàn, bạn sẽ thấy:

Deleted branch <branch name> (was <commit ID>).

cho mỗi nhánh. Đôi khi, tôi sẽ gặp phải một nhánh không thể xóa được - nếu điều này xảy ra và bạn chắc chắn rằng nó an toàn để bị xóa (tức là bạn sẽ không mất công việc cục bộ chưa được lưu trữ), bạn có thể chạy:

git branch <branch name> -D

Lưu ý chữ viết hoa D - buộc phải xóa nhánh cục bộ.


Đó là một lệnh PowerShell điên rồ😊 Tôi phải ủng hộ sự dũng cảm vì đã chạy lệnh đó trên repo của bạn
Drenai 14/03 '19

2
Có một ranh giới nhỏ giữa thiên tài và điên rồ. Điều này hoàn toàn khác với ranh giới đó, về mặt điên rồ.
Darren G

1
Không, không phải. Nó không quá phức tạp khi bạn nhìn vào nó, và dù sao, nó chỉ là một bản dịch các câu trả lời từ đây: stackoverflow.com/questions/6127328/…
Scott Stafford

@ScottStafford Đối với tôi một lệnh 170 ký tự để xóa các nhánh nằm ở phía phức tạp của sự simple | complexphân chia😉
Drenai

6

Tất cả những gì bạn cần làm là chạy lệnh này:

git remote prune origin

Điều gì đó bổ sung mà bạn có thể làm, bởi vì đôi khi thật khó chịu khi mở một thiết bị đầu cuối chỉ để làm điều đó .. bạn có thể thêm một nhiệm vụ trong vscode.

Để làm điều đó, vui lòng thực hiện theo các bước sau:

  1. Trong VSCode View> Command Palette (cmd / ctrl + Shift + P)
  2. Cấu hình tác vụ
  3. Chọn Tạo tệp task.json từ mẫu và một tệp mới sẽ được tạo trong thư mục .vscode .
  4. Bên trong mảng nhiệm vụ thêm điều này:

{"label": "Git Prune", "type": "shell", "command": "git remote snine origin", "problemMatcher": []}

Làm thế nào để sử dụng nó:

  1. Mở bảng lệnh
  2. Run Task và chọn nó
  3. Chọn Git Prune

Tài liệu tham khảo:

  1. Git tỉa

Bạn có biết nếu git remote prune originkhác với câu trả lời được chấp nhận của git fetch --prune? Chi tiết Chạy nhiệm vụ là rất tốt, nhờ gửi bài cho nó
Drenai

@Drenai Không, chúng giống nhau. Nhưng đối với một phản ứng đầy đủ trông đây
Bogdan Alexandru Militaru

5

Bạn có thể xóa tất cả các nhánh cục bộ (trừ nhánh chính) bằng:

git branch -r | grep -v "master" | xargs git branch -D

Và bạn có thể xóa tất cả các nhánh vẫn xuất hiện như origin/XXXXtrong VSCode nhưng đã bị xóa trong origin:

git fetch --prune

Ghi chú:

Lệnh đầu tiên ở trên (lấy từ https://stackoverflow.com/a/52006270/3120163 ):

  • liệt kê tất cả các chi nhánh
  • xóa nhánh chính khỏi danh sách
  • xóa các nhánh trong danh sách

Sẽ thật tuyệt nếu bạn có thể thêm lời giải thích về lệnh đầu tiên - nó rất tiện dụng 👍
Drenai

2
Tôi đã thêm lời giải thích @Drenai
Adrien Renaud

4

Tôi đã tìm ra cách để sửa lỗi này. Vì vậy, bạn cần xóa điều khiển từ xa liên kết đến repo Github, sau đó thêm lại điều khiển từ xa.

Tất cả các nhánh bị xóa khỏi Github sẽ không hiển thị trong vscode nữa. Giả sử đó originlà tên của repo từ xa.

git remote remove origin

Sau đó

git remote add origin git@github.com:your-username/repo-name.git

1
Không phải là tôi biết. Đó là cách duy nhất tôi tìm thấy để loại bỏ các nhánh từ xa không còn tồn tại.
davidhu

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.