2013-03-31 35 views
19

Tôi đang cố gắng để rebase và squash tất cả các cam kết của tôi từ chi nhánh hiện tại để làm chủ. Dưới đây là những gì tôi đang cố gắng để làm:Git: Làm thế nào để rebase và squash cam kết từ chi nhánh đến master?

git checkout -b new-feature 

thực hiện một vài cam kết, sau khi tôi đã cố gắng:

git rebase -i master 

trong trường hợp này cam kết sẽ duy trì trong new-feature chi nhánh

git checkout master 
git rebase -i new-feature 

Nó cung cấp cho tôi và chỉnh sửa cửa sổ bằng thông báo noop.

tôi biết về lệnh:

git merge --squash new-feature 

Nhưng Tôi hiện đang làm việc trên học tập của rebase lệnh.

Trả lời

4

Khi rebasing, Git sẽ không chuyển các cam kết đến một chi nhánh khác. Nó sẽ di chuyển nhánh bao gồm tất cả các cam kết của nó. Nếu bạn muốn đưa các commit vào master sau khi rebasing trên nó, sử dụng git merge <branch tip or commit of branch> để tua nhanh nhánh master tới commit đó.

45

Cho phép thực hiện các bước.

1 - Chúng tôi tạo ra một chi nhánh tính năng mới

git checkout -b new-feature 

2 - Bây giờ bạn có thể thêm/gỡ bỏ và cập nhật bất cứ điều gì bạn muốn trên chi nhánh mới của bạn

git add <new-file> 
git commit -am "Added new file" 
git rm <file-name> 
git commit -am "Removed a file" 
cat "add more stuff to file" >> <new-file> 
git commit -am "Updated files" 

3 - Tiếp theo, chọn và squash bất kỳ cam kết nào vào một thông điệp đẹp đẽ cam kết

git rebase -i master 

Điều quan trọng bạn cần nhớ ở đây là để thay đổi văn bản có nội dung "chọn" thành "bí" cho tất cả các cam kết sau lần commit đầu tiên. Thao tác này sẽ đổ tất cả các cam kết xuống nhánh chính của bạn.

4 - Chọn ngành thạc sĩ

git checkout master 

5 - Di chuyển các HEAD và các chi nhánh tổng thể để nơi mới tính năng là:

git rebase new-feature 

Bạn có thể thử tất cả các lệnh trong này công cụ trực quan: http://pcottle.github.io/learnGitBranching/

+5

Có thể bạn sẽ nhận được thông báo 'không thể đổ bóng mà không có cam kết trước đó' thực hiện việc này. http://stackoverflow.com/questions/2563632/how-can-i-merge-two-commits-into-one – backdesk

+0

Nice ... mặc dù tôi thường sẽ bíp các cam kết của mình 'git rebase -i HEAD ~ ##' trước đây kéo/rebase 'git pull --rebase origin master' Tôi chỉ thích làm nó theo hai bước cho phép tôi xem xét trước/sau khi rebase. – Tracker1

+1

Câu trả lời này có vẻ phù hợp hơn so với cái đã chọn – fernandopasik