2010-06-29 31 views
12

Tôi đã cam kết một vài tệp nguồn vào kho lưu trữ git của mình và gắn thẻ nó là phiên bản mới của phần mềm của tôi. Nhưng tôi đã thấy một sai lầm mà tôi vừa tạo và sử dụng tính năng "sửa đổi" để cam kết các tệp đã sửa.Điều gì sẽ xảy ra trong Git đối với thẻ khi bạn sửa đổi cam kết đã được gắn thẻ?

Bây giờ, tôi thấy rằng thẻ không được chuyển sang cam kết mới (thẻ được tạo bằng tính năng "sửa đổi"). Nhưng tôi cũng có thể thấy rằng thẻ vẫn tồn tại ...

Tôi muốn biết điều gì đã xảy ra với thẻ. Hành vi này có phải là lỗi không? Thẻ có được liên kết với cam kết không tồn tại nữa không?

Tôi biết tôi có thể buộc việc tạo cùng một thẻ trên cam kết mới, nhưng tôi tin rằng phải có cách tốt hơn (như tham số dòng lệnh trên cam kết sử dụng "sửa đổi").

+0

Không có tham số nào cho 'commit --amend' vì các thẻ được dự định đánh dấu một cam kết đã cho; bạn không nói chung muốn di chuyển chúng xung quanh bất cứ khi nào bạn mess với cam kết. – Cascabel

Trả lời

10

Đây là theo thiết kế. Git theo dõi các cam kết, thẻ, blob và cây dưới dạng hàm băm SHA-1 trong nội dung của chúng. Chúng chỉ đơn giản là con trỏ tới các đối tượng. Đối tượng mà thẻ trỏ đến vẫn ở đó. Đây là phiên bản của cam kết trước khi bạn sửa đổi nó. Chỉ cần xóa thẻ và tạo lại. Đảm bảo rằng bạn cho phép những người khác đang sử dụng kho lưu trữ biết bạn đã làm gì nếu họ bắt đầu bất cứ điều gì từ cam kết đó.

Để có được một nền tảng tốt về cách thức hoạt động của git, hãy xem Hội thảo Rails của Scott Chacon nói về git trên gitcasts.com. Ngoài ra, đọc cuốn sách ngắn về git: progit.org/book.

+0

Cảm ơn. Tôi biết Git đã sử dụng SHA-1 nhưng tôi nghĩ tính năng sửa đổi vừa loại bỏ cam kết trước đó và do đó, thẻ không có gì để trỏ đến nữa. –

+1

@Fififox, đó là một trong những điều tốt đẹp về git, bạn không bao giờ có thể mất một cái gì đó miễn là bạn đã có một tham chiếu đến nó ở đâu đó. – kubi

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