Tôi vừa phát hiện và sử dụng FETCH_HEAD
. Tôi muốn có một bản sao cục bộ của một số phần mềm từ máy chủ và tôi đã làm
git fetch gitserver release_1
gitserver
là tên của máy tôi lưu trữ kho git.
release_1
là một thẻ cho một phiên bản của phần mềm. Thật ngạc nhiên, release_1
sau đó không tìm thấy ở đâu trên máy cục bộ của tôi. Tôi phải gõ
git tag release_1 FETCH_HEAD
để hoàn thành bản sao của chuỗi cam kết được gắn thẻ (phát hành_1) từ kho lưu trữ từ xa đến kho lưu trữ cục bộ. Fetch đã tìm thấy thẻ từ xa, sao chép cam kết vào máy cục bộ của tôi, không tạo thẻ cục bộ, nhưng đã đặt thành FETCH_HEAD
giá trị của cam kết, để tôi có thể tìm và sử dụng nó. Sau đó tôi đã sử dụng FETCH_HEAD
để tạo một thẻ cục bộ khớp với thẻ trên điều khiển từ xa. Đó là một minh họa thực tế về những gì FETCH_HEAD
và làm thế nào nó có thể được sử dụng, và có thể hữu ích cho người khác tự hỏi tại sao git fetch không làm những gì bạn mong đợi một cách ngây thơ.
Theo tôi, tốt nhất nên tránh cho mục đích đó và cách tốt hơn để đạt được những gì tôi đang cố gắng làm là
git fetch gitserver release_1:release_1
tức là tìm nạp phiên bản_1 và gọi nó là phát hành_1 cục bộ. (Đây là nguồn: Dest, xem https://git-scm.com/book/en/v2/Git-Iternals-The-Refspec ; chỉ trong trường hợp bạn muốn đặt cho nó một tên khác!)
FETCH_HEAD
Đôi khi bạn có thể muốn sử dụng : -
git fetch gitserver bugfix1234
git cherry-pick FETCH_HEAD
có thể là một cách hay để sử dụng bản sửa lỗi số 1234 từ máy chủ Git của bạn và để bộ sưu tập rác của Git xử lý bản sao từ máy chủ sau khi bản sửa lỗi được chọn vào nhánh hiện tại của bạn. (Tôi giả sử rằng có một cam kết được gắn thẻ sạch đẹp chứa toàn bộ sửa lỗi trên máy chủ!)
git fetch origin master
sẽ thực sự cập nhậtorigin/master
, không chỉFETCH_HEAD
. Xem stackoverflow.com/a/20967347/6309