2012-06-11 39 views
8

f'I có điều sau đây:git thay đổi nguồn gốc của một chi nhánh (rebase)

A---B---C-----D-- branch dev 
    \--C'-E-/  branch test 

tôi đã làm nó xấu: C và C' là hầu như các cam kết tương tự, nó sẽ có ý nghĩa hơn nếu tôi có thể làm cho chi nhánh kiểm tra bắt đầu trên C, thay vì B.

làm thế nào tôi có thể làm điều đó ?, tôi đoán rebase, nhưng tôi không chắc chắn làm thế nào để sử dụng nó, thx

chỉnh sửa: không rõ ràng những gì tôi muốn:

A---B---C-----D-- branch dev 
     \-E-/  branch test 

hoặc

A - B - D - E - D nếu không thể

Trả lời

8

Bạn có thể rebase nó trên đầu trang của một chi nhánh tạm thời (làm từ C)
Xem git rebaseRebasing, cộng với git branch.

git branch tmp C 
git checkout test 

# rebase the current branch (test) on top of tmp 
git rebase tmp 

git branch -d tmp 

Điều đó sẽ cung cấp cho bạn:

A---B---C-----D--  branch dev 
     \--C''-E'-/  branch test 

tôi đã để lại C '(ở đây là C '') vì C' không phải là chính xác cùng hơn C.
Nhưng khi ams nhận xét, nếu bạn cần C 'biến mất, bạn sẽ

git rebase -i tmp 

Điều đó sẽ giúp bạn có được tương tác rebase, cho phép xóa C' hoàn toàn, chỉ phát lại E ở trên cùng của C.

+0

nhưng tôi cần phải loại bỏ C' sau đó, tiếp tục chỉ E tại các chi nhánh khác, đó là chỉ cần cam kết quan trọng –

+0

Tôi không chắc chắn tại sao @VonC đã để lại 'C''' trong đó. Khi tôi hiểu nó, 'C'' lẽ ra đã bị loại bỏ hoàn toàn. Nếu không, bạn có thể sử dụng 'git rebase -i tmp' và xóa dòng có' C'' trên nó. – ams

+1

Ngoài ra, việc thực hiện rebase này sẽ làm cho nhánh 'test' trông đẹp hơn, nhưng phiên bản cũ sẽ tồn tại trong lịch sử' D', không phải là bạn có thể quan tâm đến điều đó. Nếu 'dev' là một nhánh địa phương không ai khác nhìn thấy, bạn cũng có thể' git reset' để 'C' và làm lại việc hợp nhất. – ams

6

Bạn có thể rebase mới chỉ là khúc bạn muốn vào C:

A---B---C-----D-- branch dev 
    \ 
     C'-E--  branch test 

# git rebase --onto [new base] [starting after this commit] [ending at this commit] 
git rebase --onto C C' E 

A---B---C-----D-- branch dev 
     \ 
      E--  branch test 

Đó là khái niệm tương tự như cherry-hái, ngoại trừ test con trỏ chi nhánh di chuyển cùng với các cam kết rebased.

(Lưu ý rằng C 'cam kết sẽ không thể truy cập sau rebase, nhưng bạn có thể lấy lại cho nó với git reflog.)

+0

Tôi cần làm bài kiểm tra chi nhánh để làm điều đó? Tôi đã sáp nhập thử nghiệm từ dev –

+0

Đối với cờ '--onto', không quan trọng bạn đang ở nhánh nào, bởi vì bạn đang nói chính xác việc cần làm:" Bắt đầu từ đó, di chuyển mọi thứ đến đó ". Tôi không chắc chắn những gì bạn có nghĩa là bởi "thử nghiệm sáp nhập từ dev". – ellotheth

+0

E tham gia D, D là sự hợp nhất giữa 2 chi nhánh –

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