Làm cách nào tôi có thể sao chép nội dung của chi nhánh sang chi nhánh địa phương mới?


270

Tôi đã làm việc trên một chi nhánh địa phương và cũng đã đẩy các thay đổi đến từ xa. Tôi muốn hoàn nguyên các thay đổi trên nhánh đó và làm một cái gì đó khác trên nó, nhưng tôi không muốn mất hoàn toàn công việc. Tôi đã nghĩ về một cái gì đó như tạo ra một chi nhánh mới tại địa phương và sao chép chi nhánh cũ ở đó, sau đó tôi có thể hoàn nguyên các thay đổi và tiếp tục làm việc trên chi nhánh cũ. Có cách nào tốt hơn không? Hoặc làm thế nào để tôi làm điều này?


10
4 năm sau, với Git 2.15 (Q4 2017), bạn sẽ có git branch -c A B. Xem câu trả lời của tôi dưới đây
VonC

Câu trả lời:


445
git checkout old_branch
git branch new_branch

Điều này sẽ cung cấp cho bạn một nhánh mới "new_branch" với cùng trạng thái như "old_branch".

Lệnh này có thể được kết hợp với các mục sau:

git checkout -b new_branch old_branch

134
Hoặc thậm chí ngắn hơn git checkout -b new_branch(khi bạn đã bật old_branch).
Koraktor

4
Điều này chỉ tạo ra nhánh mới nhưng không thể sao chép nội dung từ nhánh này sang nhánh khác. Khi tôi thử lệnh này, nó chỉ hiển thị "Chi nhánh có tên **** đã tồn tại".
anoop

7
Tôi nghĩ rằng nếu người ta tạo một nhánh mới như thế này thì ngay lập tức không có bản sao của nhánh cũ mà chỉ đơn giản là một con trỏ mới ở đầu nhánh cũ. Nhưng khi bạn làm một cái gì đó như đánh lại nhánh mới, bạn sẽ thấy nhánh cũ vẫn ở trạng thái ban đầu trong khi nhánh mới được sửa đổi. Vì vậy, tôi nghĩ rằng đó là những gì OP muốn.
uli_1973

1
git checkout old_branch và hơn git Branch new_branch .... Tốt hơn là sử dụng lệnh trên trong sản xuất, vì lệnh dưới đây sẽ tạo nhánh mới và đưa bạn đến nhánh mới (thay đổi nhánh thành nhánh mới) .... git checkout -b new_branch old_branch
Kiran

Để ghi đè lên một nhánh, hãy xem stackoverflow.com/questions/26961371/ cấp
MCCCS

55
git branch copyOfMyBranch MyBranch

Điều này tránh hành động có thể tốn thời gian và không cần thiết để kiểm tra một chi nhánh. Hãy nhớ lại rằng thanh toán sửa đổi "cây làm việc", có thể mất nhiều thời gian nếu nó lớn hoặc chứa các tệp lớn (ví dụ như hình ảnh hoặc video).


1
Tất nhiên, nếu bạn có các tệp nhị phân trong git, đặc biệt là các tệp lớn, có thể đáng để phân tích chiến lược của bạn cho các tệp đã nói. Đương nhiên, các trường hợp bất thường sẽ tồn tại và có tệp nhị phân trong git sẽ hoàn toàn chấp nhận được.
Mục sư

52

Với Git 2.15 (Q4 2017), " git branch" đã học " -c/-C" để tạo một nhánh mới bằng cách sao chép một nhánh hiện có.

Xem cam kết c8b2cec (18 tháng 6 năm 2017) của Ævar Arnfjorð Bjarmason ( avar) .
Xem cam kết 52d59cc , cam kết 5463caa (18 tháng 6 năm 2017) bởi Sahil Dua ( sahildua2305) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết 3b48045 , ngày 03 tháng 10 năm 2017)

branch: thêm tùy chọn --copy( -c) để đi với --move( -m)

Thêm khả năng cho --copymột nhánh và cấu hình và cấu hình của nó, điều này sử dụng cùng một máy móc cơ bản như tùy chọn --move( -m) ngoại trừ việc reflog và cấu hình được sao chép thay vì được di chuyển.

Đây là hữu ích cho ví dụ như sao chép một chi nhánh chủ đề lên phiên bản mới, ví dụ như workđể work-2sau khi nộp các workchủ đề vào danh sách, trong khi vẫn giữ tất cả các thông tin theo dõi và cấu hình khác mà đi với các chi nhánh, và không giống như --moveviệc giữ chi nhánh đã-trình khác xung quanh cho tài liệu tham khảo.

Lưu ý: khi sao chép một nhánh, bạn vẫn ở trên nhánh hiện tại của mình.
Như Junio ​​C Hamano giải thích:

Khi tạo một nhánh mới Bbằng cách sao chép nhánh Ađó là nhánh hiện tại, nó cũng cập nhậtHEAD để trỏ đến nhánh mới.
Có lẽ nó đã được thực hiện theo cách này vì " git branch -c A B" cõng thực hiện trên " git branch -m A B",

Điều này không phù hợp với mong đợi thông thường.
Nếu tôi đang ngồi trên một chiếc ghế màu xanh, và ai đó đến và sơn lại nó thành màu đỏ, tôi sẽ chấp nhận cuối cùng ngồi trên một chiếc ghế màu đỏ (thay vào đó, tôi cũng không thể đứng, vì không còn chiếc ghế màu xanh yêu thích của tôi nữa ).

Nhưng nếu ai đó tạo ra một chiếc ghế đỏ mới, tạo mẫu cho nó sau chiếc ghế màu xanh tôi đang ngồi, tôi không mong đợi được khởi động khỏi chiếc ghế màu xanh và kết thúc bằng việc ngồi trên chiếc ghế màu đỏ mới.

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.