2010-11-08 49 views
18

Tôi đã thực hiện một loạt các thay đổi trên nhánh chính của kho lưu trữ git của mình và đẩy nó lên trên (mặc dù tôi là người duy nhất làm việc trong số này). là để kéo những lần commit cuối cùng này ra, quay trở lại master trước các commit đã được gỡ bỏ, áp dụng lại các commit vào nhánh phát triển, và sau đó merge lại vào master.Di chuyển các cam kết từ một chi nhánh này sang một chi nhánh khác

Đây là những gì kho của tôi trông giống như bây giờ:

a [master] [remotes/origin/master] 
| 
b 
| 
c 
| 
d (merge branch 'develop') 
|\ 
| \ 
| e [develop] [remotes/origin/develop] 
| | 
q f 
| | 
r g 

Và đây là những gì tôi muốn nó trông giống như:

Z [master] [remotes/origin/master] 
|\ 
| \ 
| A 
| | 
| B 
| | 
d C 
|\ | 
| \| 
| e [develop] [remotes/origin/develop] 
| | 
q f 
| | 
r g 

Tôi có thể nhận được một số giúp đỡ về vấn đề này? Tôi nghĩ đây là một công việc cho rebase, nhưng tôi không hoàn toàn chắc chắn làm thế nào để làm cho nó xảy ra.

+5

sơ đồ của bạn nhầm lẫn tôi một chút - trong tương lai, bạn có thể muốn gắn nhãn các cam kết của mình theo thứ tự thời gian thay vì ngược lại. – Cascabel

Trả lời

27

Ở đây bạn là:

# move cba onto e 
git branch foo 
git rebase --onto <SHA1-e> <SHA1-d> foo 

# rewind master to d 
git checkout master 
git reset --hard <SHA1-d> 

# merge 
git merge foo 

Bạn có thể muốn chọn một tên chi nhánh mô tả hơn foo, vì nó sẽ được ghi vào hợp nhất cam kết thông báo cho Z.

+0

Cảm ơn, đó là những gì tôi cần. Tôi đã nhận được một phần cách đó, nhưng thiết lập lại là những gì tôi đã mất tích. – Doug

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