Hầu hết các câu trả lời ở đây là quá phức tạp trong việc phân tích cú pháp đầu ra của git branch -r
. Bạn có thể sử dụng for
vòng lặp sau để tạo các nhánh theo dõi đối với tất cả các nhánh trên điều khiển từ xa như vậy.
Thí dụ
Nói rằng tôi có những chi nhánh từ xa.
$ git branch -r
origin/HEAD -> origin/master
origin/development
origin/integration
origin/master
origin/production
origin/staging
Xác nhận rằng chúng tôi không theo dõi bất cứ điều gì ngoài chủ đã có, cục bộ:
$ git branch -l # or using just git branch
* master
Bạn có thể sử dụng một lớp lót này để tạo các nhánh theo dõi:
$ for i in $(git branch -r | grep -vE "HEAD|master"); do
git branch --track ${i#*/} $i; done
Branch development set up to track remote branch development from origin.
Branch integration set up to track remote branch integration from origin.
Branch production set up to track remote branch production from origin.
Branch staging set up to track remote branch staging from origin.
Bây giờ xác nhận:
$ git branch
development
integration
* master
production
staging
Để xóa chúng:
$ git br -D production development integration staging
Deleted branch production (was xxxxx).
Deleted branch development (was xxxxx).
Deleted branch integration (was xxxxx).
Deleted branch staging (was xxxxx).
Nếu bạn sử dụng công -vv
tắc để git branch
bạn có thể xác nhận:
$ git br -vv
development xxxxx [origin/development] commit log msg ....
integration xxxxx [origin/integration] commit log msg ....
* master xxxxx [origin/master] commit log msg ....
production xxxxx [origin/production] commit log msg ....
staging xxxxx [origin/staging] commit log msg ....
Phân tích vòng lặp for
Vòng lặp về cơ bản gọi lệnh git branch -r
, lọc ra bất kỳ nhánh CHÍNH hoặc nhánh chính nào trong đầu ra bằng cách sử dụng grep -vE "HEAD|master"
. Để lấy tên của các nhánh trừ origin/
chuỗi con, chúng ta sử dụng thao tác chuỗi của Bash ${var#stringtoremove}
. Điều này sẽ loại bỏ chuỗi, "stringtoremove" khỏi biến $var
. Trong trường hợp của chúng tôi, chúng tôi sẽ loại bỏ chuỗi origin/
khỏi biến $i
.
LƯU Ý: Hoặc bạn cũng có thể sử dụng git checkout --track ...
để làm điều này:
$ for i in $(git branch -r | grep -vE "HEAD|master" | sed 's/^[ ]\+//'); do
git checkout --track $i; done
Nhưng tôi không đặc biệt quan tâm đến phương pháp này, vì nó chuyển bạn giữa các chi nhánh khi nó thực hiện kiểm tra. Khi hoàn thành nó sẽ để lại cho bạn trên nhánh cuối cùng mà nó tạo ra.
Người giới thiệu
git checkout --track origin/branchname