2012-05-22 613 views
9

Tôi đang sử dụng luồng git cho các dự án của mình và đã bắt đầu một bộ thay đổi khá phức tạp trong nhánh phát triển, điều này có vẻ mất nhiều thời gian hơn tôi dự kiến ​​trước.Di chuyển các sửa đổi được thực hiện trong chi nhánh phát triển thành chi nhánh tính năng git-flow mới?

Tôi ước mình đã thực hiện điều này trong một nhánh tính năng, vì tôi muốn tạo bản phát hành mới với các thay đổi khác. Làm thế nào tôi có thể di chuyển những thay đổi không được cam kết này thành một nhánh tính năng git-flow mới?

Trả lời

17

Nếu bạn đã thực hiện không có cam kết

Nếu bạn chỉ có một bản sao làm việc dơ bẩn, chỉ cần hành động như bạn đang về để bắt đầu một tính năng mới:

git flow feature start awesomeness 
git commit -va 

Nếu bạn làm thực hiện một số cam kết

Nếu có các cam kết phát triển cần có trong nhánh tính năng của bạn, phía trên eps là như nhau. Ngoài ra, mặc dù bạn sẽ (có thể - điều này không bắt buộc) muốn đặt lại chi nhánh phát triển của bạn trở về vị trí trước khi bạn bắt đầu thực hiện các thay đổi cho chi nhánh của bạn, bạn có thể thực hiện:

git flow feature start awesomeness 
git commit -va 
git checkout develop 
git reset origin/develop --hard 
+0

Tôi không biết tính năng này có thể được bắt đầu sau những thay đổi không được cam kết. Cảm ơn! – plang

2

Dưới đây là một cách để làm điều đó:

git checkout where-you-should-have-made-your-feature-branch 
git branch feature-branch 
git checkout feature-branch 
foreach commit in commits-that-should-have-been-on-your-feature-branch: 
    # do this for each commit in chronological order 
    git cherry-pick commit 

Bây giờ nó phụ thuộc vào việc bạn đã đẩy phát triển chi nhánh của bạn đến một kho lưu trữ công cộng hay không. Nếu mọi thứ vẫn còn riêng tư và bạn muốn viết lại lịch sử:

git checkout develop-branch 
foreach commit in commits-that-should-have-been-on-your-feature-branch: 
    # do this for each commit in reverse chronological order 
    git rebase --onto commit~1 commit develop-branch 

Nếu bạn không muốn phải viết lại lịch sử:

git checkout develop-branch 
foreach commit in commits-that-should-have-been-on-your-feature-branch: 
    # do this for each commit in reverse chronological order 
    git revert commit 

Và rằng nên làm điều đó.

+0

git rebase trong một vòng lặp có vẻ hơi không cần thiết/vụng về - ý tưởng đó là gì? – AD7six

+0

Xin chào, cảm ơn câu trả lời của bạn, nhưng chưa có gì được cam kết. Giải pháp dễ hơn thế. – plang