Cách đẩy nhánh mới mà không cần lịch sử


93

Tôi có git repo với hai nhánh không liên quan, chính và cấu hình. Tôi đã tạo cấu hình, xóa tất cả các tệp và sau đó chỉ đặt trong các tệp cấu hình. Bây giờ tôi muốn đẩy điều này lên repo từ xa, nhưng vì nó là nhánh mới, trống (không có nhật ký về tất cả các thay đổi của tôi và các bản sửa đổi cũ của nhánh gốc).

Làm thế nào tôi có thể xóa tất cả lịch sử và đẩy nó?


3
Điều này trông rất giống: stackoverflow.com/questions/1384325/…
Đánh dấu

Câu trả lời:


155

Xóa tất cả các tệp không loại bỏ lịch sử. Trước tiên, bạn cần tạo một nhánh không có lịch sử và thêm các tệp cấu hình của bạn. Những ngày git checkoutnày có một --orphantùy chọn tạo ra một chi nhánh không có lịch sử. Đây là thông tin về --orphantùy chọn:

--orphan <new_branch>

Tạo một nhánh mồ côi mới, có tên là <new_branch>, bắt đầu từ <start_point> và chuyển sang nó. Cam kết đầu tiên được thực hiện trên nhánh mới này sẽ không có cha mẹ và nó sẽ là gốc của một lịch sử mới hoàn toàn bị ngắt kết nối với tất cả các nhánh và cam kết khác.

Chỉ mục và cây làm việc được điều chỉnh như thể bạn đã chạy "git checkout <start_point>" trước đó. Điều này cho phép bạn bắt đầu một lịch sử mới ghi lại một tập hợp các đường dẫn tương tự như <start_point> bằng cách dễ dàng chạy "git commit -a" để thực hiện root commit.

Điều này có thể hữu ích khi bạn muốn xuất bản cây từ một cam kết mà không để lộ toàn bộ lịch sử của nó. Bạn có thể muốn làm điều này để xuất bản một nhánh mã nguồn mở của một dự án có cây hiện tại là "sạch", nhưng lịch sử đầy đủ của nó chứa các bit mã độc quyền hoặc bị chặn.

Nếu bạn muốn bắt đầu lịch sử bị ngắt kết nối ghi lại một tập hợp các đường dẫn hoàn toàn khác với đường dẫn trong <start_point>, thì bạn nên xóa chỉ mục và cây làm việc ngay sau khi tạo nhánh mồ côi bằng cách chạy "git rm-rf. " từ cấp cao nhất của cây làm việc. Sau đó, bạn sẽ sẵn sàng chuẩn bị các tệp mới của mình, lưu trữ lại cây làm việc, bằng cách sao chép chúng từ nơi khác, giải nén tarball, v.v.

Đây là một liên kết đến tài liệu để thanh toán . Bạn cũng có thể chạy git help checkout.

Khi bạn đã tạo chi nhánh của mình mà không có lịch sử, thì khi bạn đẩy nó lên máy chủ, nó cũng sẽ không có lịch sử đó. FWIW, nó giúp tôi nghĩ git pushlà "làm cho chi nhánh từ xa trông giống như chi nhánh cục bộ của tôi". Vì vậy, nếu bạn có lịch sử, và thúc đẩy, nó sẽ có lịch sử. Nếu bạn không, thì nhánh được đẩy sẽ không.


36

Làm thế nào tôi có thể xóa tất cả lịch sử và đẩy nó?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Sau đó, bạn có thể chạy

git push <remote-name> <branch-name>


cf. một lớp lót này


16

Tôi cần làm điều này để gửi cho một freelancer một số mã mà không cần chia sẻ thông tin cá nhân hoặc xóa lịch sử của tôi.

Trong trường hợp bất kỳ ai trong số các bạn đang sử dụng SourceTree, đây là cách tôi quản lý để làm điều đó. Vui lòng cho tôi biết nếu tôi đã làm sai điều gì đó hoặc quên điều gì đó vì tôi không quen với quản lý kiểm soát nguồn.

  1. Tôi đã đi đến nút đầu cuối trên cây nguồn.
  2. Tôi đã tạo một chi nhánh 'mồ côi' mới bằng cách sử dụng lệnh: 'git checkout --orphan clean-ver' trong đó clean-ver là tên chi nhánh của tôi
  3. Tôi đã đóng thiết bị đầu cuối và thấy rằng nhật ký cam kết của tôi đã bị xóa vì tôi đang ở trong một chi nhánh mồ côi mới. Tôi đã dàn dựng tất cả mã nguồn của mình và cam kết các thay đổi.
  4. Tôi đã thiết lập kho lưu trữ bitbucket của mình trong một trong hai kho lưu trữ> thêm từ xa hoặc kho lưu trữ> cài đặt kho lưu trữ> thêm.
  5. Tôi đã đóng nó và nhấp vào nút nhấn
  6. Tôi đã chọn chi nhánh 'clean-ver' mới của mình cho biết ok.

Khi tôi kiểm tra bitbucket, có vẻ như điều này dường như đã hoạt động và loại bỏ lịch sử cam kết của tôi.

Mong rằng nó giúp ai đó thoát.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.