2012-05-25 34 views
15

Tôi biết rằng có những câu hỏi như this, nhưng đó không phải là những gì tôi yêu cầu."git checkout tag-name" vs "git reset --hard tag name"

tôi cũng biết rằng:

git checkout tag-name:

  • tách bạn khỏi các chi nhánh. (Ví dụ: di chuyển con trỏ HEAD, giữ BRANCH con trỏ)

git reset --hard tag-name:

  • Không tách bạn khỏi các chi nhánh, nhưng làm cho các cam kết trước đó để trở thành "lủng lẳng". (Ví dụ: di chuyển cả HEADBRANCH con trỏ)

Tôi tự hỏi cái nào ý nghĩa hơn cho cập nhật lên một thẻ, ví dụ nên một sản xuất được reseted hoặc kiểm tra ra. Tôi biết rằng một nhà sưu tập rác có thể chạy, loại bỏ cam kết lơ lửng, nhưng sau đó một lần nữa, nếu sản xuất luôn luôn "kéo" trước khi quá trình cập nhật vào một thẻ, tôi thấy không có gì xấu ở đó.

Bản cập nhật sản xuất có nên gắn thẻ với reset hoặc checkout, xem xét rằng pull luôn được thực hiện trước cuộc gọi cập nhật này không?

Trả lời

14

Tôi tự hỏi cái nào ý nghĩa hơn cho cập nhật lên một thẻ

sản xuất của bạn cài đặt nên được kiểm tra ra một thẻ.

Hãy suy nghĩ theo cách này: cài đặt sản xuất của bạn là chỉ đọc. git reset --hard tag-name sẽ sửa đổi chi nhánh hiện đã được kiểm tra.

Ngoài ra

Đó là thực tế phổ biến rằng ngoài việc tạo ra một thẻ, bạn có một chi nhánh mà chỉ đơn giản là phiên bản mới nhất. Trong trường hợp nào bạn muốn, ví dụ: hợp nhất để làm chủ và tạo một thẻ từ đó; và về cài đặt sản xuất của bạn, bạn chỉ cần cập nhật đơn giản bằng git pull (trên bản chính).

Các vấn đề liên quan