2010-12-30 24 views
10

Tôi có một kho lưu trữ nơi tôi đã làm việc trên chi nhánh master có lần cuối thêm vào khoảng 10 cam kết mà bây giờ tôi muốn ở trên một chi nhánh khác, vì chúng mô tả công việc mà bây giờ tôi thấy là thử nghiệm (tôi vẫn đang học thực hành tốt) . Về cơ bản, tôi muốn có 10 cam kết cuối cùng bắt đầu từ một điểm trong master để tạo thành chi nhánh riêng, để tôi có thể có master đối với loại cam kết "phát hành"/"ổn định".git: Làm cách nào để di chuyển N lần commit cuối cùng được thực hiện thành master, thành nhánh riêng?

Những gì tôi có bây giờ, ngoài cùng bên phải X là cam kết cuối cùng thực sự tốt cho phát hành:

 b--b (feature B) 
    /  
X--X--X--Z--Z--Z--Z--Z--Z (master) 
    \ 
    a--a--a (feature A) 

Bạn có thể thấy rằng cả hai XZ đang trên tổng thể, trong khi những gì tôi muốn là cam kết được đánh dấu bằng Z (của tôi "tính năng Z" làm việc) để nằm trên chi nhánh tính năng riêng của họ, do đó, tip của master is at the rightmost X`. Để minh họa biểu đồ mong muốn:

 b--b (feature B) 
    /  
X--X--X (master) 
    \ \ 
    \ Z--Z--Z--Z--Z--Z (feature Z - the new branch I want) 
     \ 
     a--a--a (feature A) 

Bằng cách đó, tôi sẽ có master dành riêng cho chất lượng, hợp nhất các tính năng A, B và Z nếu cần.

Vậy làm cách nào để di chuyển "Z" cam kết trên nhánh của chính họ?

+0

thể trùng lặp của [Move cam kết từ chủ vào một git branch sử dụng] (http: // stackoverflow .com/questions/37 19068/move-commits-from-master-on-a-branch-using-git) –

Trả lời

12
git checkout master 
git branch feature-Z 
git reset <commit_id> 

trong đó commit_id là số nhận dạng của X cuối cùng cam kết trước khi tắt nhánh.

+7

Bạn có thể muốn 'git reset --hard'. Và nếu có bất kỳ sửa đổi nào chưa được kiểm tra, hãy ném vào một 'git stash' trước nó và một' git stash pop' sau nó. –

+0

Đồng ý, về cơ bản. Vì anh ta không nói/yêu cầu bất cứ điều gì về việc bắt đầu/muốn trạng thái cây làm việc, tôi đã ném vào giải pháp gõ tối thiểu đã làm những gì anh ta hỏi. Anh ta trông giống như anh ta biết đủ git để đưa ra các chi tiết của riêng mình. Tôi upvoted bình luận của bạn để giúp giữ cho nó có thể nhìn thấy cho những người khác sẽ không. –

2

Đơn giản chỉ cần đổi tên chủ và bắt đầu một chủ mới tại X lần cuối:

git checkout master; git branch -m feature; git checkout -b master HEAD~6

+0

một hạn chế đối với đề xuất của bạn là tính năng hiện tại đang theo dõi xuất xứ/chính. –

5

Để hoàn chỉnh, câu trả lời là ở đây - http://git-scm.com/docs/git-reset - tìm kiếm các văn bản "Undo một cam kết, làm cho nó một chi nhánh chủ đề "- ví dụ cho thấy làm người cuối cùng 3 cam kết một chi nhánh và đặt lại tổng thể để cam kết trước đó với những cam kết 3:

$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 3 commits. 
# 
nothing to commit (working directory clean) 
$ git branch topic/wip 
$ git reset --hard HEAD~3 
$ git checkout topic/wip 
Switched to branch topic/wip 
+0

Liên kết kernel.org đã mất 404, nhưng 'man git-rebase' sẽ cung cấp phiên bản mới nhất cho phiên bản git của bạn. –

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