Trong khi giúp một người bạn gặp vấn đề về git ngày hôm nay, tôi đã phải giới thiệu một chi nhánh cần tách biệt hoàn toàn với masterchi nhánh. Nội dung của chi nhánh này thực sự có nguồn gốc khác với những gì đã được phát triển trên masterchi nhánh, nhưng sau đó chúng sẽ được sáp nhập vào masterchi nhánh.
Tôi nhớ từ khi đọc Git của John Wiegley từ dưới lên về cách các nhánh về cơ bản là một nhãn cho một cam kết tuân theo một quy ước nhất định và cách một cam kết được gắn với một cây tệp và, tùy ý cho các cam kết của cha mẹ. Chúng tôi đã tạo ra một cam kết không cha mẹ với kho lưu trữ hiện có bằng cách sử dụng hệ thống ống nước của git:
Vì vậy, chúng tôi đã loại bỏ tất cả các tệp trong chỉ mục ...
$ git rm -rf .
... trích xuất các thư mục và tệp từ tarball, thêm chúng vào chỉ mục ...
$ git add .
... và tạo một đối tượng cây ...
$ git write-tree
( git-write-treenói với chúng tôi sha1sum của đối tượng cây được tạo.)
Sau đó, chúng tôi đã cam kết cây, mà không chỉ định cam kết cha mẹ ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-treenói với chúng tôi sha1sum của đối tượng cam kết đã tạo.)
... và tạo một nhánh mới trỏ đến cam kết mới được tạo của chúng tôi.
$ git update-ref refs/heads/other-branch $COMMIT
Cuối cùng, chúng tôi trở lại masterchi nhánh để tiếp tục làm việc ở đó.
$ git checkout -f master
Điều này dường như đã làm việc theo kế hoạch. Nhưng đây rõ ràng không phải là loại thủ tục tôi muốn giới thiệu cho người mới bắt đầu sử dụng git, nói một cách nhẹ nhàng. Có cách nào dễ dàng hơn để tạo một nhánh mới hoàn toàn không liên quan đến mọi thứ đã xảy ra trong kho lưu trữ cho đến nay?