Có cách nào tôi có được các cam kết vào repo mới (lần này cam kết đầu tiên là tệp LICENSE) và vẫn giữ thông tin meta cam kết không?
Có, bằng cách thêm một điều khiển từ xa và chọn các cam kết trên đầu cam kết đầu tiên của bạn.
# add the old repo as a remote repository
git remote add oldrepo https://github.com/path/to/oldrepo
# get the old repo commits
git remote update
# examine the whole tree
git log --all --oneline --graph --decorate
# copy (cherry-pick) the commits from the old repo into your new local one
git cherry-pick sha-of-commit-one
git cherry-pick sha-of-commit-two
git cherry-pick sha-of-commit-three
# check your local repo is correct
git log
# send your new tree (repo state) to github
git push origin master
# remove the now-unneeded reference to oldrepo
git remote remove oldrepo
Phần còn lại của câu trả lời này là nếu bạn vẫn muốn thêm LICENSE vào repo trước đó của mình.
Đúng. Bạn có thể đặt cam kết LICENSE của mình làm cam kết đầu tiên bằng cách giảm giá.
Rebasing là cách gits sắp xếp lại thứ tự cam kết trong khi vẫn giữ nguyên tất cả các tác giả cam kết và ngày cam kết.
Khi làm việc trên repo được chia sẻ, thường không được khuyến khích trừ khi toàn bộ nhóm của bạn thông thạo git. Đối với những người không có, họ chỉ có thể sao chép một bản sao mới của kho lưu trữ.
Đây là cách bạn nhận được cam kết LICENSE của mình như là cam kết đầu tiên.
1. Cập nhật và căn cứ lại bản sao cục bộ của bạn
Kiểm tra dự án của bạn và đặt tệp LICENSE trong một cam kết TRÊN ĐẦU của ngăn xếp 3 cam kết hiện tại của bạn.
#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'
Sau đó, thực hiện một rebase tương tác trên nhánh chính để THAY ĐỔI các cam kết.
git rebase -i --root
Nó sẽ mở một trình soạn thảo. Di chuyển dòng dưới cùng (cam kết "Cam kết ban đầu" của bạn, cam kết gần đây nhất) lên đầu tệp. Sau đó, lưu và thoát khỏi trình chỉnh sửa.
Ngay sau khi bạn thoát khỏi trình soạn thảo, git sẽ viết các cam kết theo thứ tự bạn vừa chỉ định.
Bây giờ bạn đã cập nhật bản sao cục bộ của kho lưu trữ. làm:
git log
để xác minh.
2. Buộc đẩy trạng thái repo mới của bạn lên github
Bây giờ bản sao của bạn đã được cập nhật, bạn phải đẩy nó lên github.
git push -f origin master
Điều này sẽ yêu cầu github di chuyển nhánh chính đến vị trí mới của nó. Bạn chỉ nên thúc đẩy trong những trường hợp hiếm hoi như thế này khi mọi người làm việc với nó đều biết về sự thay đổi đang chờ xử lý, nếu không nó sẽ khiến các cộng tác viên của bạn bối rối.
3. Đồng bộ hóa các cộng tác viên với github
Cuối cùng, tất cả các cộng tác viên sẽ phải đồng bộ hóa với kho lưu trữ này.
Đầu tiên chúng phải có kho lưu trữ sạch vì lệnh sau có thể phá hủy nếu có các thay đổi chưa được lưu.
# make sure there are no unsaved changes
git status
# pull the latest version from github
git fetch
# move their master branch pointer to the one you published to github.
git reset --hard origin/master
Đó là nó. Mọi người nên đồng bộ ngay bây giờ.