2012-08-08 32 views
9

Tôi có foo chi nhánh của chủ/đầu. Tôi muốn thu thập chủ/đầu và có những thay đổi này được chọn trên nhánh foo. Tôi đã làm như sau:Làm thế nào để git cam kết --amend một cam kết đó là cơ sở của một chi nhánh

git checkout master 
git add ... 
git commit --amend 
git checkout foo 
git rebase master 

Vấn đề là cam kết không được sửa đổi cũ xuất hiện như một phần của chi nhánh foo sau khi sửa đổi và nó đã được hoàn trả lại trên trang cái. Tôi đã làm một git rebase -i và xóa cam kết cũ và đã làm việc, nhưng có cách nào dễ dàng hơn/an toàn hơn để sửa đổi cam kết đó là cơ sở của chi nhánh không? Và vâng, đó là tất cả địa phương cam kết chưa được đẩy ..

Trả lời

11

Tất cả bạn cần làm là nói với git để bắt đầu rebase từ nơi: Bạn có thể làm điều này

git rebase --onto master SOMESHA foo 

đâu SOMESHA là chủ cũ SHA. Đó là nếu cây của bạn bây giờ trông như thế này

* aaaaaa - (master) 
| * bbbbbb - (foo) 
| * cccccc - (old master) 
|/ 
* ffffff 

Và bạn làm

git rebase --onto master cccccc foo 

cây của bạn sau đó sẽ trông như thế này.

* dddddd - (foo) 
| 
* aaaaaa - (master) 
| 
* ffffff 

sang một bên: chúng ta có thể sử dụng tên gọi khác nhau cho cccccc cam kết nếu bạn không thích sử dụng giá trị SHA.

> git reflog master 

aaaaaa [email protected]{0}: reset: moving to something 
cccccc [email protected]{1}: commit: change the froozle 
ffffff [email protected]{2}: commit: snarf the froozle 

Điều này có nghĩa chúng ta có thể tham khảo cccccc như [email protected]{1} (AKA, vị trí trước đó của thầy)

Vì vậy, chúng ta có thể viết những dòng này rebase như

git rebase --onto master [email protected]{1} foo 

Một mô tả về các cam kết ccccccfoo^ (AKA, cam kết parernt cho foo), vì vậy chúng tôi cũng có thể viết điều này là

git rebase --onto master foo^ foo 

Tất cả đều làm chính xác điều tương tự, và bạn có thể thích sử dụng những thứ khác nhau trong các tình huống khác nhau. Tôi thường tìm thấy SHA đơn giản để sử dụng, vì tôi thường sẽ kéo lên một đồ thị của kho lưu trữ của tôi trước khi thực hiện loại hoạt động này.

+0

Cảm ơn, công trình này – Aaron

+0

Thay vì SHA cam kết, bạn cũng có thể sử dụng 'master @ {1}'. – chbaker0

+0

@ chbaker0 bạn hoàn toàn chính xác - Ban đầu tôi nghĩ bạn đang đề xuất điều gì đó khác biệt. Tôi đang thêm gợi ý đó vào câu trả lời với giải thích. –

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