2009-05-06 34 views
8

Tôi cần phải chèn một cam kết trong nhánh chính của kho lưu trữ git của tôi giữ lại các lần hợp nhất và cam kết tiếp theo.Làm cách nào để chèn cam kết bằng git?

Tôi hiện đang có một cái gì đó như thế này

A--B--C--D--E--F  master 
     \  \ 
     G--H I--J branches 

và cần phải chèn một cam K như vậy mà cơ cấu mới trở nên

A--B--K    master 
    \ 
    C--D--E--F  new branch 
     \  \ 
     G--H I--J old branches 

Tôi thậm chí không chắc chắn nếu điều này là có thể. Bất kỳ ý tưởng?

Trả lời

10
git checkout master 
git branch new_branch # copy current branch master to new_branch 
git reset --hard B # now master points to B 
(hack, hack, hack) 
git commit -m K  # K on B in master 
+1

Điều này dẫn đến cấu trúc bắt buộc - cảm ơn bạn! –

2

Đổi tên nhánh "chính" thành "nhánh mới". Sau đó, kiểm tra cam kết B, bắt đầu một nhánh mới gọi là "master" từ đó, và thực hiện các thay đổi của bạn. Một cái gì đó như sau nên làm điều đó (không được thử nghiệm).

git branch -m master new_branch 
git branch master B 
git checkout master 
+0

Cảm ơn câu trả lời của bạn. Điều này dẫn đến cam kết A là một thành viên của "chi nhánh mới" và không phải là "chủ". Lịch sử cho master sau đó trở thành "B - K" chứ không phải là "A - B - K". Cấu trúc tương tự này có thể đạt được (với các tên chi nhánh khác nhau) bằng cách phân nhánh đơn giản từ B và cam kết K. –

+0

@ Tôi biết tôi đã trễ 4 năm cho bữa tiệc ở đây và tài khoản của bạn dường như đã biến mất; nhưng cam kết A sẽ là thành viên của cả "new_branch" và "master". Nó là một cái cây, và nhiều nhánh cây có thể cùng chung một tổ tiên. Tất nhiên, nó có thể được ghi chú bằng cách này hay cách khác (ví dụ: bởi 'git log --graph --oneline --all'), nhưng đó chỉ là một ký hiệu -' git log master' và 'git log new_branch' sẽ hiển thị cả hai có A. Nó cũng đúng với đề xuất của bạn để tạo ra cấu trúc tương tự này. – 13ren

0
# git checkout -b new-master B 

Bây giờ thực hiện thay đổi đối với K, cam kết họ và thì đấy, có cấu trúc mà bạn muốn. :)

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