2013-03-26 21 views
6

Khi làm việc trên một chi nhánh cụ thể cho từng chi nhánh (từ nhánh 'phát triển'), tôi đã sử dụng sai (một vài lần: /) và về cơ bản muốn xóa tất cả cam kết của tôi trên nhánh này trước cam kết hiện tại của tôi.Cách diễn dịch "xóa bởi chúng tôi" sau khi git rebase tương tác

Điều tôi đã làm trước đây trong trường hợp này là thực hiện git rebase -i development và xóa tất cả các cam kết trước khi tôi muốn giữ lại (mới nhất) và sau đó thực hiện lệnh git push --force để cập nhật repo từ xa chỉ chứa cam kết vàng gần đây nhất của tôi.

Sau khi thực hiện việc này, khi đến lúc tôi thực hiện các thay đổi cho lần commit này, có vẻ như git đang trả lời một chút lạ với yêu cầu của tôi. Có một vài tệp có nội dung là

both modified:  app/helpers/statistics_helper.rb 
deleted by us:  app/models/referrals/chart.rb 
deleted by us:  app/views/statistics/_referrals.html.haml 
deleted by us:  app/views/statistics/_referrals2.html.haml 
deleted by us:  app/views/statistics/_referrals3.html.haml 

Tôi không biết cách phản hồi lại điều này. nếu tôi git add các tệp được bắt đầu bằng "xóa bởi chúng tôi", liệu nó có xóa các tệp này không?

Trả lời

1

Bằng cách xóa các cam kết, như thể chúng chưa bao giờ xảy ra. Vì vậy, nếu bạn thêm bất kỳ tập tin trong các cam kết trước đó đã được chỉ cần gỡ bỏ những tập tin đó sẽ được gỡ bỏ, quá. Đó có thể là trong khi bạn đang nhìn thấy thông điệp đó. Điều này có thể sẽ xóa các thay đổi đối với các tệp đã tồn tại trước đó mà bạn muốn cũng như một phần của kết quả cuối cùng của mình. Tôi nghĩ rằng bạn đang sử dụng rebase không chính xác.

Nếu vào cuối lần commit cuối cùng của bạn, mọi thứ ở trạng thái bạn muốn là bạn chỉ cần bíp lần commit cuối cùng thay thế. Bạn có thể làm điều này một vài cách. Sử dụng rebase -i như bạn đã làm và chỉ định s hoặc squash thay vì edit cho tất cả các dòng cam kết trừ trường hợp đầu tiên sẽ thực hiện điều đó.

Một cách khác để làm điều đó sẽ là:

git reset --soft HEAD~<N> 
git commit 

đâu <N> là số cam kết sao bạn cần phải dẹp.

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