2013-01-24 29 views
18

Giả sử trong master Tôi đã tắt tính năng. Tôi làm việc trên tính năng đó trên chi nhánh feature, vì vậy tôi có một cam kết đặc biệt $ ở đó chỉ cho phép tính năng đó. Bây giờ tôi muốn hợp nhất các thay đổi mà tôi đã thực hiện trong feature thành master, nhưng vẫn giữ nguyên cho phép. Vì vậy, nó giống nhưGit: di chuyển cam kết "lên trên"

main: A--B--X--Y 
feature: A--B--$--C--D 

Vì vậy, chúng ta hãy nói rằng tôi muốn làm điều đó, bằng cách di chuyển $ cam kết trên đầu trang của tính năng:

new feature: A--B--C--D--$ 

Làm thế nào tôi sẽ đi về làm điều đó?

Trả lời

20

git rebase -i B, sau đó di chuyển $ vào cuối danh sách hiển thị trong trình chỉnh sửa của bạn. Nó sẽ bắt đầu như là dòng đầu tiên trong tệp mở ra. Bạn cũng có thể xóa toàn bộ dòng đó, điều này sẽ chỉ xóa bỏ cam kết đó khỏi lịch sử của chi nhánh của bạn.

+0

Cảm ơn bạn! Bây giờ rõ ràng là tôi nên sử dụng rebase, tôi cứ cố gắng giải quyết nó bằng những quả anh đào trước đó vì một lý do nào đó. –

+0

@AdrianPanasiuk, bạn cũng có thể sử dụng lựa chọn anh đào, nhưng có lẽ sẽ có nhiều nỗ lực hơn nữa. –

5

Nếu bạn muốn giữ cho bạn cam kết theo thứ tự như trên feature bạn nên tạo một chi nhánh mới và thực hiện các thao tác sau. Nếu không chỉ làm điều này trên feature

git rebase -i <sha for commit B> 

Move cam kết $ để dưới cùng của danh sách

git checkout master 
git rebase feature <or the other branch name> 

Nó không phải là rõ ràng với tôi về vấn đề nhưng nếu bạn không muốn $ ở tất cả, thay vì di chuyển nó xóa nó sau git rebase -i Mặc dù bạn sẽ muốn làm điều này trên một chi nhánh mới để bạn không bị mất nó. Khi bạn đang thay đổi lịch sử.

Điều này cũng giả định rằng chi nhánh feature chưa được đẩy tới điều khiển từ xa vì lịch sử viết lại không tốt.