2012-09-22 26 views
49

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

Làm cách nào tôi có thể thanh lọc toàn bộ lịch sử và đẩy lịch sử?

+3

này trông rất giống: http://stackoverflow.com/questions/1384325/in-git-is-there-a-simple-way-of-introducing-an-unrelated-branch-to -a-kho – Mark

+0

@Mark cảm ơn, đó là những gì tôi cần. – AoeAoe

Trả lời

100

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

--orphan < new_branch>

Tạo một chi nhánh trẻ mồ côi mới, được đặt tên < 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 rễ của một lịch sử mới hoàn toàn bị ngắt kết nối khỏi tất cả các nhánh và các cam kết khác.

Chỉ mục và cây làm việc được điều chỉnh như thể trước đây bạn đã chạy "git checkout < start_point>". Đ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 cam kết gốc.

Điều này có thể hữu ích khi bạn muốn xuất bản cây từ cam kết mà không hiển thị 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 các mã khác.

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 đường dẫn hoàn toàn khác với < start_point>, thì bạn nên xóa chỉ mục và cây đang hoạt động ngay sau khi tạo chi 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ị tập tin mới của bạn, repopulating cây làm việc, bằng cách sao chép chúng từ nơi khác, trích xuất một tarball vv

Dưới đây là một liên kết đến tài liệu cho checkout. Bạn cũng có thể chạy git help checkout.

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

13

Tôi cần thực hiện việc này để gửi một số freelancer 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 điều gì đó sai hoặc đang quên điều gì đó vì tôi rất không quen thuộc với quản lý kiểm soát nguồn.

  1. Tôi đã đi đến nút thiết bị đầu cuối trên cây nguồn.
  2. Tôi tạo ra một chi nhánh 'mồ côi' mới bằng cách sử dụng lệnh: 'git checkout --orphan sạch-ver' nơi sạch-ver là tên chi nhánh của tôi
  3. Tôi nhắm nhà ga và thấy rằng log cam kết của tôi đã được xóa bởi vì tôi ở trong một chi nhánh trẻ mồ côi mới. Tôi đã dàn dựng tất cả cá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 cửa sổ đó và nhấp vào nút ấn
  6. Tôi đã chọn chi nhánh 'clean-ver' mới của tôi 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.

Hy vọng điều này sẽ giúp ai đó ra ngoài.

11

Tôi làm cách nào để thanh lọc toàn bộ lịch sử và đẩy lịch sử?

git checkout --orphan <name_you_choose_for_orphan_branch> 
git commit 

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

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


của bạn this one-liner

Các vấn đề liên quan