2010-07-12 25 views
9

Tôi tự hỏi, làm thế nào tôi có thể tránh một cam kết trong những thay đổi thực sự nhỏ của mã. Ví dụ, đôi khi tôi bỏ lỡ một không gian giữa các tham số hoặc loại định dạng mã nhỏ. Lý do tôi hỏi điều này là vì sau này tôi phải đẩy các cam kết của mình đến một kho lưu trữ từ xa và tôi không muốn bao gồm những thay đổi nhỏ đó.Làm cách nào để tránh thực hiện các thay đổi nhỏ trong git?

Bất kỳ ý tưởng nào? Cảm ơn

+2

Xem thêm http://stackoverflow.com/questions/2302736/trimming-git-checkins-squashing-git-history/2302947#2302947 cho cam kết bẻ khóa – VonC

+0

Bạn cũng có thể muốn xem xét thêm một móc trước cam kết để trợ giúp xem lại kiểu mã hóa của bạn. Với điều đó, bạn có thể có git phàn nàn nếu bạn cố gắng cam kết mã vi phạm một số tiêu chuẩn mà bạn đã đặt. Bạn có thể giúp ngăn chặn các cam kết xấu ngay từ đầu! Ví dụ trước commit hook ('.git/hooks/pre-commit.sample') tìm kiếm những thứ như dấu cách sau dấu phẩy. Bạn có thể bọc GNU thụt lề trong một tập lệnh, ví dụ, để thực thi một kiểu mã hóa cụ thể, và đặt nó vào móc trước của bạn. –

Trả lời

20

Cập nhật: Như những người khác đã chỉ ra, không làm bất kỳ việc rebasing hoặc lịch sử viết lại bất kỳ loại nào nếu bạn đã đẩy đến nguồn gốc từ xa và chia sẻ mã này với các nhà phát triển khác. Câu trả lời ngắn: Nguy hiểm và nguy hiểm!

Tôi khuyên bạn nên kiểm tra lệnh rebase cho việc này. Nó thực hiện chính xác những gì bạn đang yêu cầu

gì điều này là lấy cam nhỏ hơn và kết hợp chúng thành những người lớn hơn

Để sử dụng nó:

git rebase -i HEAD~5 

biên tập viên của bạn sẽ bật lên với 5 người cuối cùng cam kết từ người đứng đầu chi nhánh hiện tại, với một số tài liệu. Trong trường hợp của bạn, bạn sẽ muốn sử dụng squash. Các trang web tôi liên kết giải thích nó thực sự tốt, họ có ví dụ này:

pick 01d1124 Adding license 
squash 6340aaa Moving license into its own file 
squash ebfd367 Jekyll has become self-aware. 
squash 30e0ccb Changed the tagline in the binary, too. 

này sẽ đóng gói 3 cam kết trước đó và đặt chúng tất cả dưới một trong những bạn đã đánh dấu là pick. Sau đó, bạn có thể sửa đổi thông báo cam kết và v.v.

Have fun

+0

Tại sao lại là downvote? – meagar

+0

+1. Squashing là con đường để đi. Thông tin thêm tại đây: http: //www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html – Jeet

+2

Bất cứ điều gì bạn làm, * không * làm điều này nếu bạn đã đẩy các thay đổi của mình: S – andrewdotnich

16

Cách duy nhất để thực hiện thay đổi là với cam kết. Tuy nhiên, bạn có thể sửa đổi cam kết trước đây để bao gồm thay đổi mới nếu bạn muốn. Đây có thể là giải pháp tốt nhất khi bạn chưa đẩy cam kết trước đó vào một kho lưu trữ từ xa.

Có thông tin tốt về việc sửa đổi cam kết git in the Git user's manualin a blog post.

+0

Cảm ơn các liên kết. Tuy nhiên, tôi không thích kiểu liên kết [clickhere]. Đây là một bookmarklet hữu ích để tạo ra các liên kết mô tả: [Sao chép liên kết đánh dấu hoặc chỉnh sửa nó] (http://pastebin.com/qEafAErg) (liên kết pastebin) – takeshin

3

Một trong những cách tốt nhất để giải quyết vấn đề này là sử dụng git difftool để chạy một công cụ trực quan như xdiff hoặc WinMerge trên tất cả các tập tin được sửa đổi trước khi cam kết. Điều này giúp bạn dễ dàng hoàn tác các thay đổi nhỏ và sẽ nắm bắt những thay đổi đáng kể mà bạn quên bạn đã thực hiện và chưa sẵn sàng. Tôi bắt được một số lỗi công bằng theo cách này. Ví dụ: một thẻ html bị thiếu hoặc thừa có thể khó phát hiện khi bạn đang xem mã, nhưng rất dễ phát hiện khi bạn thực hiện một khác biệt.

+1

Có lý do nào bạn không muốn ' t chỉ sử dụng 'git diff'? Đó là một trong những mục đích chính của nó ... – Cascabel

+0

@ Jefromi, git diff không cho phép tôi chỉnh sửa mã và hoàn nguyên các phần của tệp. Ngoài ra, tôi tìm thấy nó giúp đỡ nhiều hơn để có một sự khác biệt bên cạnh của nội dung tập tin đầy đủ giúp tôi bắt những sai lầm tôi có thể bỏ lỡ với một dòng bằng cách khác (tôi sẽ không ngạc nhiên nếu có một tùy chọn cho điều này, nhưng nó sẽ không bù đắp cho sự thiếu chỉnh sửa) – mikerobi

+0

Bạn đã thử git difftool chưa? – bstpierre

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