Điều này có nghĩa là gì
Từ xa ngược dòng của bạn, điều khiển từ xa mà bạn gọi là origin
Hayno có hoặc không bao giờ có (không thể nói từ thông tin này một mình) một nhánh có tên feature/Sprint4/ABC-123-Branch
. Có một lý do đặc biệt phổ biến cho điều đó: ai đó (có thể không phải bạn, hoặc bạn nhớ) đã xóa chi nhánh trong kho Git khác đó.
Phải làm gì
Điều này phụ thuộc vào những gì bạn muốn . Xem phần thảo luận bên dưới. Bạn có thể:
- tạo hoặc tạo lại chi nhánh trên điều khiển từ xa, hoặc
- xóa chi nhánh địa phương của bạn, hoặc
- Bất cứ điều gì khác mà bạn có thể nghĩ đến.
Thảo luận
Bạn phải đang chạy git pull
(nếu bạn đang chạy, git merge
bạn sẽ nhận được một thông báo lỗi khác hoặc không có thông báo lỗi nào cả).
Khi bạn chạy git fetch
, Git của bạn sẽ liên lạc với một Git khác, dựa trên url
dòng trong [remote "origin"]
phần cấu hình của bạn. Git đó chạy một lệnh ( upload-pack
) trong số những thứ khác, gửi cho Git của bạn một danh sách tất cả các nhánh. Bạn có thể sử dụng git ls-remote
để xem cách thức hoạt động của nó (thử nó, nó mang tính giáo dục). Đây là một đoạn về những gì tôi nhận được khi chạy nó trên kho Git cho git
chính nó:
$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1 refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6 refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638 refs/heads/todo
[snip]
Các refs/heads/
mục liệt kê tất cả các nhánh tồn tại trên điều khiển từ xa, 1 cùng với ID cam kết tương ứng (đối với refs/tags/
các mục, ID có thể trỏ đến các đối tượng thẻ thay vì cam kết).
Git của bạn lấy từng tên nhánh này và thay đổi nó theo fetch
(các) dòng trong cùng remote
phần đó. Trong trường hợp này, ví dụ Git của bạn thay thế refs/heads/master
bằng refs/remotes/origin/master
. Git của bạn thực hiện điều này với mỗi tên chi nhánh đi qua.
Nó cũng ghi lại tên gốc trong tệp đặc biệt FETCH_HEAD
(bạn có thể thấy tệp này nếu bạn nhìn trộm vào .git
thư mục của riêng bạn ). Tập tin này lưu tên và ID được tìm nạp.
Các git pull
lệnh có nghĩa là như một vết cắt tiện ngắn: nó chạy git fetch
trên thích hợp từ xa, và sau đó git merge
(hoặc, nếu có chỉ thị, git rebase
) với bất cứ đối số là cần thiết để hợp nhất (hoặc rebase) theo chỉ dẫn của [branch ...]
phần. Trong trường hợp này, [branch "feature/Sprint4/ABC-123-Branch"]
phần của bạn nói để tìm nạp origin
, sau đó hợp nhất với bất kỳ ID nào được tìm thấy dưới tên refs/heads/feature/Sprint4/ABC-123-Branch
.
Vì không có gì được tìm thấy dưới tên đó, git pull
phàn nàn và dừng lại.
Nếu bạn chạy bước này như hai bước riêng biệt, git fetch
và sau đó git merge
(hoặc git rebase
), Git của bạn sẽ xem xét remotes/origin/
các nhánh theo dõi từ xa được lưu trong bộ nhớ cache của bạn để xem những gì sẽ hợp nhất với hoặc khởi động lại. Nếu có là một chi nhánh như cùng một lúc, bạn vẫn có thể có chi nhánh từ xa theo dõi. Trong trường hợp này, bạn sẽ không nhận được thông báo lỗi. Nếu không bao giờ có một nhánh như vậy, hoặc nếu bạn đã chạy git fetch
với --prune
(loại bỏ các nhánh theo dõi từ xa đã chết), do đó bạn không có nhánh theo dõi từ xa tương ứng, bạn sẽ nhận được một khiếu nại, nhưng origin/feature/Sprint4/ABC-123-Branch
thay vào đó , nó sẽ đề cập đến .
Trong cả hai trường hợp , chúng ta có thể kết luận rằng feature/Sprint4/ABC-123-Branch
hiện không tồn tại trên điều khiển từ xa có tên origin
.
Nó có thể đã tồn tại cùng một lúc và có lẽ bạn đã tạo chi nhánh địa phương của mình từ chi nhánh theo dõi từ xa. Nếu vậy, có lẽ bạn vẫn có nhánh theo dõi từ xa. Bạn có thể điều tra để xem ai đã xóa chi nhánh khỏi điều khiển từ xa và tại sao, hoặc bạn có thể chỉ cần đẩy thứ gì đó để tạo lại hoặc xóa chi nhánh theo dõi từ xa và / hoặc chi nhánh địa phương của bạn.
1 Vâng, tất cả những gì nó sẽ thừa nhận , ít nhất là. Nhưng trừ khi họ đặc biệt ẩn một số ref, danh sách bao gồm tất cả mọi thứ.