Tôi muốn xác định một nhánh "gốc" mới trong kho git này. Theo nhánh "gốc", ý tôi là một nhánh hoàn toàn độc lập với tất cả các nhánh khác trong kho 1 .
Thật không may, ngay cả các cam kết (hãy gọi nó A
) ở chính gốc cây cam kết của repo chứa rất nhiều tệp (đây là một kho lưu trữ được khởi tạo trong một dự án đã khá hoàn thiện).
Điều này có nghĩa là ngay cả khi tôi đã cho A
là chi nhánh mới <start-point>
, chi nhánh mới này sẽ không bắt đầu từ "bảng xếp hạng sạch", mà thay vào đó, nó sẽ chứa tất cả các tệp đã được cam kết A
.
Có cách nào để tôi có thể tạo một nhánh hoàn toàn trống trong kho lưu trữ này, <start-point>
càng gần A
càng tốt không?
1 BTW, điều này không tương đương với việc tạo một repo mới. Repos riêng sẽ ít thuận tiện hơn vì nhiều lý do.
EDIT : OK, đây là những gì tôi đã làm, dựa trên câu trả lời của vcsjones :
# save rev of the current earliest commit
OLDBASE=$(git rev-list --max-parents=0 HEAD)
# create a new orphan branch and switch to it
git checkout --orphan newbranch
# make sure it's empty
git rm -rf .
# create a new empty commit in the new branch, and
# save its rev in NEWBASE
git commit --allow-empty -m 'base commit (empty)'
NEWBASE=$(git rev-list HEAD)
# specify $NEWBASE as the new parent for $OLDBASE, and
# run filter-branch on the original branch
echo "$OLDBASE $NEWBASE" > .git/info/grafts
git checkout master
git filter-branch
# NOTE: this assumes that the original repo had only one
# branch; if not, a git-filter-branch -f <branch> command
# need to be run for each additional branch.
rm .git/info/grafts
Mặc dù thủ tục này có một chút liên quan, kết quả cuối cùng là một cam kết cơ sở trống có thể đóng vai trò <start-point>
cho bất kỳ "nhánh sạch" mới nào; tất cả những gì tôi cần làm sau đó là
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
Trong tương lai tôi sẽ luôn tạo các kho lưu trữ mới như thế này:
git init
git commit --allow-empty -m 'base commit (empty)'
... để cam kết đầu tiên trống và luôn có sẵn để bắt đầu một chi nhánh độc lập mới. (Điều này sẽ là, tôi biết, một cơ sở rất hiếm khi cần, nhưng khá dễ dàng để làm cho nó có sẵn.)
git rebase --onto
, hãy xem stackoverflow.com/questions/645450/iêu