Tôi muốn xác định nhánh "root" mới trong kho git này. Bởi nhánh "root", tôi có nghĩa 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 lưu trữ .Cách tạo chi nhánh mới (và trống!) "Root"?
Thật không may, ngay cả cam kết (chúng ta hãy gọi nó là A
) ở chính gốc của cây cam kết của repo chứa rất nhiều tệp (đây là kho lưu trữ đã được khởi tạo trên một dự án đã trưởng thành).
Điều này có nghĩa rằng ngay cả khi tôi đã A
là chi nhánh mới của <start-point>
, chi nhánh mới này sẽ không bắt đầu từ một "slate sạch", nhưng thay vì nó sẽ chứa tất cả các tập tin đã được cam kết trong A
.
Có cách nào để tôi có thể tạo chi nhánh hoàn toàn trống trong kho lưu trữ này, với <start-point>
càng gần với A
càng tốt?
BTW, đây là không tương đương với việc tạo ra một repo mới. Repos riêng biệt 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 vcsjones 'câu trả lời:
# 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 là một chút liên quan, kết quả cuối cùng là một trống cam kết cơ sở có thể đóng vai trò là <start-point>
cho bất kỳ "chi nhánh đá phiến sạch" mới nào; tất cả tôi cần phải làm sau đó là
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
Trong tương lai tôi sẽ luôn luôn tạo ra các kho mới như thế này:
git init
git commit --allow-empty -m 'base commit (empty)'
... để là người đầu tiên cam kết là trống, và luôn luôn có sẵn để bắt đầu một chi nhánh độc lập mới. (Đây sẽ là, tôi biết, một cơ sở rất hiếm khi cần thiết, nhưng nó là khá nỗ lực để làm cho nó có sẵn.)
Duplicate của http://stackoverflow.com/questions/13969050/how-to-create-a-new-empty-branch-for-a-new-project – Anonymoose
@ Anonymoose: Chỉ cần cho hồ sơ (thay vì tranh luận): Tôi không đồng ý với ý kiến của bạn. – kjo
Dường như có một giải pháp đơn giản hơn nhiều dựa trên 'git rebase --onto', xem http://stackoverflow.com/questions/645450/insert-a-commit-before-the-root-commit-in-git –