2013-05-28 29 views
5

Bạn có tùy chọn nào nếu bạn muốn "hoàn tác" chi nhánh tính năng? Giả sử bạn thêm một tính năng mới supercool-feature mà bạn hoàn thành (hợp nhất vào phát triển và xóa chi nhánh tính năng) và sau đó nó đi vào bản phát hành. Nhưng sau đó người dùng của bạn thực sự không thích điều này supercool-feature. Làm cách nào để hoàn tác/tua lại/đảo ngược tính năng này đã được hợp nhất thành phát triển và bản phát hành?Git-Flow hoàn tác chi nhánh đã hoàn thành

Tôi đang sử dụng SourceTree để làm phiên bản của mình.

+1

Vâng, bạn phục hồi các merge ... Rõ ràng nó một chút phức tạp hơn thế nhưng chi tiết nằm ở cách tổ chức mã của bạn và các bài kiểm tra của bạn, v.v. Tôi cảm thấy có nhiều câu hỏi hơn. –

+0

Ngoài ra, đây không phải là câu hỏi cụ thể về dòng chảy. Những gì git-flow đã làm cho bạn chỉ là tạo ra chi nhánh tính năng của bạn từ phát triển và sau đó hợp nhất nó trở lại vào phát triển. Không có ma thuật nào xảy ra trong luồng máu, tất cả chỉ là git. –

+0

@AlexBrown vậy làm cách nào để hoàn nguyên quá trình hợp nhất? Tôi không chắc chắn nếu bạn đã quen thuộc với cách thức hoạt động của quá trình git-flow. Nhưng khi bạn hoàn thành một tính năng trong luồng git, nó sẽ được hợp nhất thành một nhánh "phát triển" và sau đó nhánh tính năng sẽ bị xóa. Khi bạn quyết định thực hiện một bản phát hành, bạn tạo một nhánh mới từ sự phát triển và bạn thực hiện các thay đổi phát hành cụ thể của bạn và sau đó hợp nhất thành "master". Vì vậy, làm thế nào tôi sẽ trở lại 'supercool-feature' đã được sáp nhập vào phát triển? –

Trả lời

12

Chạy lệnh này

git revert -m 1 <sha1 of M> 

Giải thích

tình hình của bạn sắp như sau:

A-B-----C---D-M  # master 
    \  /
    X-Y---Z-  # supercool-feature 

A, B, C và D đang ở áo ngực chủ của bạn nch, X, Y và Z trong chi nhánh tính năng của bạn. Khi bạn đã thực hiện git merge supercool-feature Git đã tạo "cam kết hợp nhất" M cho bạn. Cam kết này bao gồm tất cả các cam kết từ nhánh tính năng của bạn cũng như các bản sửa lỗi có thể có để sửa các xung đột hợp nhất. Vì vậy, nếu bạn revert rằng một trong những cam kết, mọi thay đổi từ featurebranch của bạn sẽ biến mất một lần nữa.

+1

+1 để thực hiện nỗ lực nghệ thuật ASCII :) – bigge

+0

người bảo vệ quỷ: làm cách nào để biết cách xóa mọi thứ khỏi tính năng siêu dữ liệu XZY chứ không phải mọi thứ từ bản chính (CD)? hợp nhất là đối xứng ... – mnagel

+0

Hợp nhất không đối xứng. 'git merge' nhìn vào changeset từ nhánh được hợp nhất (' git diff B ..Z') và đổ nó vào một cam kết. –

1

Thực ra lệnh là

git revert -m 1 <sha1 of M> 

mà loại bỏ M di chuyển trở lại chi nhánh chứa X, Y, Z mà không phải là Mainline 1.