2010-10-13 28 views
110

thường tôi sẽ có một công việc như sau:Sửa đổi một cam kết đó không phải là trước đó cam kết

  1. Commit thay đổi cho một nhóm các tập tin
  2. Commit thay đổi cho một nhóm khác nhau của file
  3. Nhận ra tôi đã bỏ lỡ một số thay đổi thuộc trong lần đầu tiên cam kết
  4. Lời nguyền

tôi không thể tận dụng git commit --amend vì nó không th e cam kết gần đây nhất mà tôi cần phải thay đổi. Cách tốt nhất để thêm thay đổi vào cam kết đầu tiên mà không chạm vào thay đổi thứ hai là gì?

+1

Xem thêm http://stackoverflow.com/questions/3940266/edit-the-commit-message-of-any-commit/3940887#3940887 để biết phiên bản theo kịch bản. – VonC

+2

Tôi đã tạo một tập lệnh Bash cho mục đích chính xác này: https://github.com/colinodell/git-amend-old Sau khi cài đặt, bạn sẽ sử dụng nó như sau: 'git modify-old abcd123', trong đó' abcd123 'là cam kết cũ mà bạn muốn sửa đổi với các thay đổi theo giai đoạn của bạn. Hy vọng ai đó thấy nó hữu ích! –

Trả lời

148

Bạn có thể sử dụng git rebase để giải quyết vấn đề này. Chạy git rebase -i sha1~1 trong đó sha1 là băm cam kết của giá trị bạn muốn thay đổi. Tìm commit bạn muốn thay đổi và thay thế "pick" bằng "edit" như được mô tả trong phần bình luận của trình soạn thảo rebase. Khi bạn tiếp tục từ đó, bạn có thể chỉnh sửa cam kết đó.

Lưu ý rằng điều này sẽ thay đổi sha1 của cam kết đó cũng như tất cả trẻ em - nói cách khác, điều này ghi lại lịch sử từ thời điểm đó trở đi. Bạn có thể phá vỡ kho lưu trữ làm điều này, nhưng nếu bạn đã không đẩy, nó không phải là nhiều của một việc lớn.

+26

@rspeicher: Thay vì 'sha1' bạn cũng có thể muốn kiểm tra 'HEAD ~ N', trong đó N là số lần commit trước 'HEAD' nơi bạn muốn bắt đầu rebase của mình. – 3lectrologos

+0

Điều đó có vẻ như vậy. Cảm ơn bạn! –

+0

@ 3lectrologos hoặc bất kỳ cách nào khác liên quan đến cam kết: – MatrixFrog

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