Các giải pháp rất đơn giản:
git filter-branch [options] -- --all
Note bốn dấu gạch ngang (hai bộ dấu gạch ngang đôi với một không gian ở giữa) trong -- --all
.
Nếu bạn nhìn vào các tài liệu cho git-filter-branch
, nó nói này:
git filter-branch [--env-filter <command>] [--tree-filter <command>]
[--index-filter <command>] [--parent-filter <command>]
[--msg-filter <command>] [--commit-filter <command>]
[--tag-name-filter <command>] [--subdirectory-filter <directory>]
[--prune-empty]
[--original <namespace>] [-d <directory>] [-f | --force]
[--] [<rev-list options>…]
Đọc trên, phần đầu của tài liệu nói: "Cho phép bạn viết lại lịch sử git sửa đổi bằng cách viết lại các ngành được đề cập trong < tùy chọn danh sách rev >, áp dụng các bộ lọc tùy chỉnh trên mỗi bản sửa đổi. "
Vì vậy, việc kiểm tra các tài liệu cho rev-list
cho:
< rev-danh sách tùy chọn> ... Arguments cho git rev-list. Tất cả các tham chiếu tích cực được bao gồm bởi các tùy chọn này được viết lại. Bạn cũng có thể chỉ định các tùy chọn chẳng hạn như --all, nhưng bạn phải sử dụng - để tách chúng khỏi các tùy chọn git lọc-chi nhánh.
Và các tài liệu cho git-rev-list
nói:
--all
Pretend as if all the refs in refs/ are listed on the command line as <commit>.
Nguồn
2011-09-15 12:27:25
chỉ để làm rõ, thông thường 'filter-branch' được liệt kê với' HEAD' ở cuối, '- --all' thay thế' HEAD' – EoghanM
Làm cách nào để làm cho nó hoạt động trong PowerShell (Windows)? Nó giữ lỗi và hiển thị thông báo trợ giúp cho 'filter-branch'. Tôi đã cố gắng thay đổi để báo giá gấp đôi theo câu trả lời của Paul, nhưng tôi không thể thoát khỏi dấu nháy kép ở đó (xem nhận xét của tôi về câu trả lời). – ADTC
Tôi đã giải quyết vấn đề trên bằng cách sử dụng các đường ống (trong chức năng PowerShell). Về cơ bản: 'git rev-list --all | git filter-branch [options] '(không có danh sách rev ở cuối) thay vì' git filter-branch [options] - --all'. – ADTC