Như đã đề cập bởi ecdpalmabelow, git 1.7.12+ (tháng 8 năm 2012) đã tăng cường các lựa chọn --root
cho git rebase
:
"git rebase [-i] --root $tip
" hiện có thể được sử dụng để ghi lại tất cả lịch sử dẫn đến "$tip
" xuống đến cam kết gốc.
Đó hành vi mới là bước đầu discussed here:
Cá nhân tôi nghĩ "git rebase -i --root
" nên được thực hiện để chỉ làm việc mà không đòi hỏi "--onto
" và cho phép bạn "chỉnh sửa" ngay cả những người đầu tiên trong lịch sử.
Có thể hiểu được rằng không ai bận tâm, vì mọi người ít thường xuyên viết lại gần đầu lịch sử hơn là khác.
patch followed.
(câu trả lời ban đầu, tháng 2 năm 2010)
Như đã đề cập trong Git FAQ (và SO question này), ý tưởng là:
- Tạo chi nhánh tạm thời mới
- Tua lại nó vào cam kết bạn muốn thay đổi bằng cách sử dụng
git reset --hard
- Thay đổi cam kết đó (nó sẽ là đầu HEAD hiện tại và bạn có thể sửa đổi nội dung của bất kỳ tập tin)
chi nhánh rebase trên đầu trang của thay đổi cam kết, sử dụng:
git rebase --onto <tmp branch> <commit after changed> <branch>`
Bí quyết là để đảm bảo các thông tin mà bạn muốn loại bỏ không được giới thiệu lại bởi một sau cam kết ở một nơi khác trong tệp của bạn. Nếu bạn nghi ngờ rằng, sau đó bạn phải sử dụng filter-branch --tree-filter
để đảm bảo nội dung của tệp đó không chứa trong bất kỳ cam kết thông tin hợp lý nào.
Trong cả hai trường hợp, bạn kết thúc viết lại SHA1 của mọi cam kết, vì vậy hãy cẩn thận nếu bạn đã xuất bản chi nhánh bạn đang sửa đổi nội dung.Có thể bạn không nên làm điều đó trừ khi dự án của bạn chưa được công khai và những người khác không dựa vào những cam kết bạn sắp viết lại.
Trên OS X Mountain Lion với hệ thống cài đặt git 1.7.9.6 (Apple Git-31.1) tôi đặt '' để là cùng một băm tôi đã sử dụng trong lệnh 'git reset --hard'. Bên cạnh đó một thay đổi nhỏ, điều này hoạt động tốt đẹp để cập nhật thông tin tác giả trên tất cả các cam kết trong một repo. –
berto
bạn có thể cung cấp ví dụ về những gì nên là $ tip. 'git rebase -i --root' làm việc cho tôi. –
@ RémiBenoit có, '$ tip' có thể là bất kỳ cam kết nào bạn muốn. 'master' (nghĩa là' master HEAD' commit) là tốt. – VonC