Hãy rõ ràng lên một vài chi tiết nhỏ đầu tiên:
- Chi nhánh là "ref" dưới namespace
refs/heads
. Chỉ cần ls .git/refs/heads
và cat
các tệp ở đó để xem ý tôi là gì.
- Thẻ là "ref" trong không gian tên
refs/tags
. Chỉ cần ls .git/refs/tags
để xem cho chính mình.
HEAD
chỉ là một "ref" khác, nhưng nó đặc biệt ở khía cạnh mà nó có thể là "biểu tượng". Chỉ cần cat .git/HEAD
và xem những gì nó nói.
Hoạt động push
hoạt động trên "ref" và "ánh xạ" mặc định giữ lại không gian tên. Điều này có nghĩa là khi tôi đẩy nhánh, nó sẽ xuất hiện như một nhánh trên điều khiển từ xa; khi tôi đẩy thẻ, thẻ sẽ xuất hiện dưới dạng thẻ trên điều khiển từ xa. Hãy xem xét các tình huống sau:
Tôi muốn đẩy thẻ moo
và làm cho nó xuất hiện như là một chi nhánh trên máy chủ từ xa (vâng, tôi về cơ bản "chuyển đổi" một thẻ vào một chi nhánh). Đây là cách tôi sẽ làm điều đó:
git push origin moo:refs/heads/moo
Git cần một cách để phân biệt giữa nhanh về phía trước và không ff đẩy, vì vậy mà người ta không kết thúc ghi đè lên công việc của người khác do nhầm lẫn. Giả sử tôi muốn đẩy các chi nhánh master
, next
và pu
, trong đó chỉ pu
là không phải ff. Đây là cách tôi sẽ làm điều đó (lưu ý rằng bạn phải cung cấp một bản đồ rõ ràng khi bạn đang sử dụng +
):
git push origin master next +pu:pu
Bây giờ, chúng ta hãy cho câu hỏi của bạn. Bạn muốn đẩy HEAD
của mình để nó xuất hiện trong không gian tên refs/heads
trên điều khiển từ xa dưới dạng nhánh có tên "ignore-netbeans-config". Nếu nhánh này không tồn tại trước đây, hoặc nếu bạn ghi đè lên một số cam kết trong đó (ví dụ: push không phải ff), hãy sử dụng +
. Nếu không, đừng. Kết quả cuối cùng:
git push origin +HEAD:refs/heads/ignore-netbeans-config
TL; DR phiên bản: git push origin +HEAD:refs/heads/ignore-netbeans-config
Câu hỏi hay! Tất nhiên, nếu bạn có thể làm bất kỳ chỉnh sửa thêm ở đây, bạn muốn đi trước và tạo một chi nhánh để được an toàn. – Cascabel