Khi làm việc với git trong một nhóm sử dụng các nhánh tính năng, tôi thường cảm thấy khó hiểu về cấu trúc nhánh trong lịch sử.
Thí dụ:
Giả sử có một tính năng nhánh / pha cà phê và sửa lỗi tiếp tục trên chủ song song với nhánh tính năng.
Lịch sử có thể trông như thế này:
* merge feature/make-coffee
|\
| * small bugfix
| |
* | fix bug #1234
| |
| * add milk and sugar
| |
* | improve comments
| |
* | fix bug #9434
| |
| * make coffe (without milk or sugar)
| |
* | improve comments
|/
*
Vấn đề
Thoạt nhìn, tôi thấy khó có thể nói được bên nào là nhánh tính năng. Tôi thường cần duyệt một số bình luận ở cả hai phía để có ý tưởng về cái nào. Điều này trở nên phức tạp hơn nếu có nhiều nhánh tính năng song song (đặc biệt nếu chúng dành cho các tính năng liên quan chặt chẽ) hoặc nếu có sự hợp nhất theo cả hai hướng giữa nhánh tính năng và chủ.
Ngược lại, trong Subversion, điều này dễ dàng hơn đáng kể vì tên chi nhánh là một phần của lịch sử - vì vậy tôi có thể nói ngay rằng một cam kết ban đầu được thực hiện trên "tính năng / pha cà phê".
Git có thể làm điều này dễ dàng hơn bằng cách bao gồm tên của nhánh hiện tại trong siêu dữ liệu cam kết khi tạo một cam kết (cùng với tác giả, ngày, v.v.). Tuy nhiên, git không làm điều này.
Có một số lý do cơ bản tại sao điều này không được thực hiện? Hay chỉ là không ai muốn tính năng này? Nếu đó là cái sau, có cách nào khác để hiểu mục đích của các nhánh lịch sử mà không nhìn thấy tên không?