2015-05-09 16 views
14

Tôi đang làm việc trên một chi nhánh tính năng.Git: Làm thế nào để đè bẹp các cam kết có hợp nhất-cam kết ở giữa?

  1. Thực hiện một số cam kết. Cam kết bị đè bẹp.
  2. Thay đổi được đẩy đối với nhánh từ xa. Có xung đột.
  3. Các thay đổi được hợp nhất từ ​​các xung đột chính, đã giải quyết trên chi nhánh tính năng. (git fetch origin master> git hợp nhất FETCH_HEAD> giải quyết xung đột theo cách thủ công> git commit> git push)
  4. Tôi đã thực hiện thêm một cam kết.

Vì vậy, lịch sử cam kết hiện tại trông như thế này. Từ hiện tại để cũ:

  1. cam kết 3
  2. cam M yyy (hợp nhất)
  3. cam 2

Làm thế nào để dẹp trên 3 cam kết vào 1 trước khi tôi sáp nhập chi nhánh tính năng của tôi để bậc thầy?

Trả lời

6

Bạn có thể rebase -i bắt đầu với cha mẹ commit 2 's (có nghĩa là, các cam kết về master mà bạn phân nhánh từ. Bạn có thể sẽ phải làm lại quyết xung đột khi bạn nhận được để việc hợp nhất cam kết.

Vì vậy, nếu lịch sử của bạn trông giống như

* D commit 3 (HEAD) 
    * M merge 
/| 
| * C commit 2 
* | B commit on master 
|/ 
* A (master) 

Bắt đầu với git rebase -i A. bạn sẽ thấy một danh sách các cam kết bao gồm cả masteryour_branch, nhưng không phải là hợp nhất cam kết. pick người đầu tiên (B hoặc C, tùy thuộc vào thời gian) và squash phần còn lại.

+0

Nó hoạt động. Nhưng bạn có thể chỉ cho tôi "lý thuyết" tại sao nó hoạt động? – Miral

+1

Tuyệt đối, hãy xem [bài viết này] (https://www.atlassian.com/git/tutorials/merging-vs-rebasing/workflow-walkthrough) và bình luận lại nếu bạn có một số câu hỏi cụ thể. –

+0

Nhìn lại (và chơi với một đồ chơi repo), có vẻ như 'git rebase -i master' cũng nên làm việc tốt, và nó sẽ không bao gồm' master' commit trong 'squash' của bạn. Đó là những gì bạn đã cố gắng trước đây? Chuyện gì vậy? –

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