Làm cách nào để di chuyển một nhánh Git vào kho lưu trữ của riêng nó?


180

Tôi có một nhánh mà tôi muốn chuyển vào một kho Git riêng và lý tưởng là giữ lịch sử của nhánh đó trong quá trình. Cho đến nay tôi đã xem xét git filter-branch, nhưng tôi không thể biết liệu nó có thể làm những gì tôi muốn làm hay không.

Làm cách nào để trích xuất một nhánh Git vào kho lưu trữ của chính nó?

Câu trả lời:


280

Bạn chỉ có thể đẩy một nhánh đến một kho lưu trữ mới. Tất cả lịch sử của nó sẽ đi với nó. Sau đó, bạn có thể chọn xóa chi nhánh khỏi kho lưu trữ ban đầu.

ví dụ

git push url://to/new/repository.git branch-to-move:new-branch-name

Đối với một kho lưu trữ mới, tên nhánh mới thường là chủ.

Tạo một kho lưu trữ mới, trống có thể được thực hiện với git init.


15
Chỉ trong trường hợp có ai thắc mắc, tôi đã thay thế URL bằng đường dẫn đến thư mục kho Git và nó hoạt động hoàn hảo.
Aupajo

48
Bạn cũng có thể đặt tên cho chi nhánh trong kho lưu trữ mới: git push url://to/new/repository.git branch-to-move:new-branch-name
Yves Van Broekhoven

4
Nhận xét trên của Yves là chính xác, nếu không, bạn sẽ không có chủ trong đó và quá trình nhân bản sẽ kết thúc warning: remote HEAD refers to nonexistent ref, unable to checkout.. Nếu đã ở giai đoạn đó, chỉ cần đi cùng git checkout -b branch-to-movevà bạn an toàn hoặc đơn giản là bạn đi cùng git checkout -b masterđể có chi nhánh chính của mình :)
Ain Tohvri

git checkout -b masterđã giải quyết vấn đề của tôi, đó là trên màn hình error: src refspec master does not match any.(chỉ thắc mắc tại sao tôi không thấy tên chi nhánh tôi đang ở) Cảm ơn bạn
kangkyu

2
Trong trường hợp câu trả lời này cũng gây nhầm lẫn cho bạn, đây là cách tôi hiểu về nó để làm cho nó hoạt động: 1) trong thiết bị đầu cuối của bạn, hãy ở trong thư mục chứa repo và chi nhánh bạn muốn tạo thành repo mới; 2) urlnên là một url git, như git@github.com: brianzelip / groceries.git; 3) branch-to-movelà nhánh của repo hiện tại bạn muốn tạo thành repo mới; 4) new-branch-namelà tên bạn muốn cho nhánh mới trong repo mới được tạo, tức là : master.
Brian Zelip

19

Điều này sẽ giữ lịch sử của tất cả các chi nhánh, nhưng làm cho bản sao của bạn trỏ đến một chi nhánh cụ thể:

git clone -b newbranch CurrentRepo NewRepo

Điều này không 'di chuyển' bất cứ điều gì, chỉ tạo một bản sao.


2
Đáng lưu ý đó clone -blà mới. Nó yêu cầu git> = 1.6.5 (phát hành tháng 10 năm 2009).
CB Bailey

Tôi gặp khó khăn khi làm việc này, nhưng đó là trước khi tôi thấy tin nhắn từ Charles Bailey.
Aupajo
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.