Để có câu trả lời chung hơn, chúng tôi sẽ cần một ví dụ lớn hơn. Vì vậy, chúng ta hãy giả vờ bạn đang thực sự trong tình huống này:
---A---B---C <= Master
\
E---F---F---H <= Foo
\
J---K---L---M <= Bar
\
N---O---P---Q <= Baz
Và đây là những gì chúng tôi muốn có ...
---A---B---C <= Master
|\
| E---F---F---H <= Foo
|\
| J---K---L---M <= Bar
\
N---O---P---Q <= Baz
Rất may, Git có một giải pháp đối với chúng tôi trong các tùy chọn cho rebase
lệnh!
git rebase --onto [newParent] [oldParent] [branchToMove]
gì phương tiện này có thể được chia nhỏ thành các phần:
rebase
- Thay đổi bố mẹ của một cái gì đó
--onto
- Đây là lá cờ mà nói với git để sử dụng cú pháp rebase thay thế này
newParent
- Đây là chi nhánh mà chi nhánh bạn đang rebasing sẽ có như là phụ huynh
oldParent
- Đây là chi nhánh mà các chi nhánh bạn đang rebasing có vì nó là cha mẹ
branchToMove
- Đây là chi nhánh mà bạn đang di chuyển (rebasing)
Các chút thông tin về "chi nhánh phụ huynh cũ" có thể có một chút khó hiểu, nhưng những gì nó thực sự làm là nó nói "bỏ qua những thay đổi từ cha mẹ già của tôi khi làm việc rebase". oldParent
là cách bạn xác định nhánh bạn đang di chuyển (ví dụ: branchToMove
) bắt đầu.
Vì vậy, các lệnh để thực thi trong tình huống của chúng ta là gì?
git rebase --onto Master Bar Baz
git rebase --onto Master Foo Bar
Lưu ý rằng thứ tự của các lệnh này quan trọng bởi vì chúng ta cần phải kéo mỗi nhánh của cuối của "chuỗi chi nhánh".
Cảm ơn rất nhiều; phiên bản đã chỉnh sửa hoạt động rất tốt! Trong trường hợp bất kỳ ai cần thêm một số chi tiết về vấn đề này, có phần "Các bản cập nhật thú vị hơn" của sách Pro Git bao gồm hầu hết ví dụ chính xác này: http://git-scm.com/book/en/Git-Branching- Rebasing –
'git rebase --onto master foo bar' có nghĩa là: Lấy" bar "mà không" foo "và đặt nó vào master – schoetbi