Xin lưu ý: Tôi không cố gắng khởi động lại đối số cho dù Mercurial hoặc Git là tốt hơn, tôi chỉ có một câu hỏi kỹ thuật mà tôi, như một người sử dụng Mercurial, không hiểu. Tôi cũng không chắc liệu SO là đúng nơi để đặt câu hỏi như vậy, nhưng nó là liên quan đến lập trình. Đã có nhiều cuộc thảo luận về việc hai hệ thống điều khiển phiên bản Git và Mercurial khác nhau như thế nào từ quan điểm của người dùng (ví dụ: và http://felipec.wordpress.com/2011/01/16/mercurial-vs-git-its-all-in-the-branches/), và sự khác biệt chính là xử lý các chi nhánh. Tôi đã đọc qua nhiều cuộc thảo luận này, nhưng tôi cứ tự hỏi mình câu hỏi này:Tại sao Git không lưu tên chi nhánh như một phần của cam kết?
Tại sao Git không lưu tên chi nhánh như một phần của cam kết?
Tôi không thực sự thấy lý do chính đáng để không làm điều đó; nó có nghĩa là dữ liệu không thể chỉ đơn giản biến mất vì không có tham chiếu (tag, branch, anything) poiting cho nó.
Tôi thấy việc lưu trữ chi nhánh trong cam kết là một điểm cộng lớn cho Mercurial, vì điều đó làm cho việc mất dữ liệu trở nên khó khăn hơn.
Điểm chính của đám đông Git ủng hộ mô hình phân nhánh của Git, bạn chỉ có thể xóa nhánh, không ngăn Git lưu tên của chi nhánh như một phần của mỗi cam kết: Nếu cam kết của chi nhánh bị xóa , các tham chiếu đến nhánh đó cũng vậy. Nó cũng sẽ không can thiệp vào đối số "phân nhánh giá rẻ": các chi nhánh sẽ không tốn kém hơn để quản lý. Và tôi không nghĩ rằng lưu trữ bổ sung cần phải được quan tâm: nó chỉ là một vài byte cho mỗi cam kết.
Tôi đang bối rối, khi nào bạn mất dữ liệu vào lúc này? – Useless
Tôi không, nhưng nó có thể: Theo như tôi hiểu, một đầu tách rời sẽ được thu gom rác khi bạn không chỉ một thẻ hoặc một chi nhánh ở đó. –
@danielkullmann: đã thu thập rác, vâng, nhưng không phải trước ít nhất hai tuần: http://stackoverflow.com/questions/5772192/git-how-can-i-reconcile-detached-head-with-master-origin – VonC