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 master
chi 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 master
chi nhánh, nhưng sau đó chúng sẽ được sáp nhập vào master
chi 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-tree
nó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-tree
nó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 master
chi 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?