2011-07-18 32 views
11

Có thể tham gia nhiều cam kết khác nhau không?Tham gia nhiều cam kết khác nhau mà không cần hợp nhất

Đây là trường hợp của tôi:

runst Ứng dụng của tôi trong OSX 10,6 và 10,7 nên Tôi đã cố định một số nội dung cho 10,6 sau đó cam kết, đổi thành 10,7 và cố định các bản sửa lỗi một lần nữa vì vậy chúng tương thích, sau đó cam kết một lần nữa . sau đó quay lại 10.6 và kiểm tra lại và thực hiện một cam kết nhỏ lần nữa, v.v. (ba hoặc bốn cam kết trong tổng số và tất cả các cam kết này cho cùng một vấn đề)

Như bạn thấy tất cả các cam kết này có liên quan chặt chẽ vì vậy tôi muốn tham gia cùng họ, điều này có thể không?

Tôi vẫn phải làm việc thêm một vấn đề nữa vì vậy tôi không có kế hoạch hợp nhất nhánh hiện tại. Lý tưởng nhất là tôi chỉ muốn có một cam kết cho mỗi vấn đề/lỗi mà tôi giải quyết.

EDIT:

tôi đã đẩy cam kết của tôi kể từ khi tôi phải làm điều này trong máy tính khác nhau nhưng các chi nhánh không được sử dụng bởi người khác, không được nêu ra.

+0

Tại sao tôi nhận được "-1"? – nacho4d

+0

Đồng ý. Tại sao -1? Đây là một câu hỏi hợp lý, đặc biệt là từ một người dùng git mới. –

+2

upvote để phủ nhận -1 – rasjani

Trả lời

15

Một cách tương tác tốt đẹp là với git rebase -i. Kiểm tra một chi nhánh, nhìn vào lịch sử, và chọn một cam kết đó là trước khi cam kết đầu tiên bạn muốn "tham gia" (nó được gọi là squashing). Sau đó,

git rebase -i <the commit> 

Trong trình chỉnh sửa, bạn sẽ được hiển thị một danh sách các cam kết từ bên phải sau lần commit bạn chọn gần nhất. Có vẻ như

pick 2f4b7fa Some commit message 
pick 19f58bd Some other commit message 

Tìm cam kết đầu tiên trong danh sách bạn muốn tham gia. Để lại một thiết lập để "chọn". Sau đó, cho tất cả những cái bạn muốn đánh vào đó, thay đổi "pick" thành "squash" hoặc chỉ "s". Đánh dấu một cam kết "squash" có nghĩa là nó sẽ được kết hợp với các cam kết ngay trước (trên) nó. Sau đó lưu và thoát. Bạn sẽ được nhắc nhở cho một thông điệp cam kết mới cho cam kết mới sẽ được tạo ra. Lưu và thoát và bạn đã hoàn tất. Lưu ý rằng bạn cũng có thể sử dụng chế độ xem lại để di chuyển các cam kết xung quanh bằng cách xáo trộn các đường xung quanh. Vì vậy, nếu bạn có một số cam kết đó là ra khỏi trật tự hoặc bạn cần phải di chuyển cam kết với nhau để bí họ, bạn có thể làm điều đó, quá. Một lưu ý khác: nếu bạn đã đẩy các cam kết của bạn đến một điều khiển từ xa, điều này có thể kích hoạt mọi thứ, đặc biệt nếu bạn đang làm việc với những người khác kéo từ xa đó.

Chỉnh sửa: Vì bạn đã đẩy chi nhánh, và bạn biết rằng không ai khác đang sử dụng nó, chỉ cần làm theo các bước trên, và sau đó thực hiện git push origin master -f, giả sử repo từ xa là "origin" và bạn ' đang ở trên nhánh chính. Đó là một push bình thường, nhưng -f nói với nó để ghi đè lên bất cứ điều gì là trên điều khiển từ xa và buộc thay đổi của bạn được áp dụng thay thế. Đó là khi bạn đang làm việc từ một repo được chia sẻ bởi những người khác rằng điều này trở nên nguy hiểm và/hoặc khó hiểu.

+2

Lưu ý: với các phiên bản git mới hơn, bạn cũng có tùy chọn 'f' (' fixup'), giống như squash, nhưng chỉ giảm thông điệp cam kết của cam kết liên quan. – Benjol

+0

@ naocho4d: đã cập nhật câu trả lời của tôi cho tài khoản của bạn để chỉnh sửa –

+0

@Ryan, tôi sẽ hỏi cách đẩy nó từ khi thực hiện theo cách thông thường không có hiệu ứng mong muốn trong trường hợp này nhưng bạn đã chỉnh sửa nó! Cảm ơn bạn :) – nacho4d

2

Bạn đã đẩy các cam kết của mình chưa? Nếu không, bạn có thể thử git rebase -i. Nó có một lựa chọn squash để kết hợp các cam kết. Here's một liên kết hữu ích.

0

Nếu bạn đang sử dụng hộp cửa sổ, cách thoải mái hơn là sử dụng tính năng TortoiseGIT.

  • Chỉ cần mở tùy chọn 'Hiển thị log' trong popup menu
  • chọn cam kết
  • nhấn chuột phải
  • 'Kết hợp với một cam kết'

sẽ làm tất cả công việc cho bạn, mà không có điệu nhảy VIM khủng khiếp :)

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