Giả sử tôi có 3 cam kết chưa được xóa. Bây giờ tôi muốn thay đổi thông điệp cam kết của lần commit đầu tiên hoặc lần thứ hai (thay đổi chúng cho lần thứ ba là đơn giản bằng cách sử dụng git commit --amend
). Làm thế nào để làm điều đó?Làm cách nào để chỉnh sửa thông báo cam kết của bất kỳ cam kết nào trong git?
Trả lời
Để hồi phục trên-câu hỏi phụ: là có một git commit --amend
cho một trước cam kết (và không chỉ là người cuối cùng), bạn có thể thử một cái gì đó tương tự (không được thử nghiệm, nhưng Colin O'Dell đề cập trong the comments đã viết một kịch bản cho nó colinodell/git-amend-old):
git checkout -b tmp
git reset --hard HEAD~2
git commit -amend
git rebase --onto tmp [email protected]{1} master
Đó sẽ là như sau:
x---x---x---x---x
^
|
(master*) (* = current branch)
git checkout -b tmp
x---x---x---x---x
^
|
(tmp*, master)
git reset --hard HEAD~2
x---x---x---x---x
^ ^
| |
(tmp*) (master)
git commit -amend
y (tmp*)
/
x---x---x---x---x
| ^
([email protected]{1}) |
(master)
git rebase --onto tmp [email protected]{1} master
(tmp)
y---x'---x' (master*)
/
x---x---x---x---x (only referenced in reflog)
Trên 'rebase --onto', xem http://stackoverflow.com/questions/1994463/how-to-cherry-pick-a-range-of-commits-and-merge-into-another-branch/1994491 # 1994491 – VonC
tại sao phải bận tâm? rebase -i đơn giản hơn nhiều – CharlesB
@CharlesB: Tôi đồng ý, 'rebase -i' là đơn giản hơn, nhưng nó cũng * tương tác *. Có nghĩa là bạn không thể bao gồm nó trong một kịch bản hoặc trong một nhóm bí danh một chuỗi các lệnh. – VonC
Đây là công việc cho lệnh mạnh mẽ git rebase -i
. Ngoài ra, hãy xem phần Interactive Rebasing của sách Git.
Có lẽ một câu hỏi ngu ngốc, nhưng có thể 'git rebase -i' được sử dụng không tương tác? – Mot
Không, không phải như vậy. Tuy nhiên, mọi thứ mà 'git rebase -i' có thể (theo lý thuyết) được thực hiện bằng các lệnh Git có thể đọc được. Vì vậy, nó sẽ có thể viết một kịch bản để sửa đổi một tin nhắn cam kết trước đó, nhưng tôi không biết liệu một điều như vậy tồn tại chưa. –
congrats trên huy hiệu vàng thứ 15 của bạn;) Bạn bây giờ là một git đúng! (Err ... git-guru, ý tôi là) (Ý tôi là, guru về tên công cụ git) (ý tôi là, bạn biết ý tôi là gì) – VonC
- 1. Chỉnh sửa thông báo cam kết git trong GitHub
- 2. git không thể chỉnh sửa cam kết
- 3. làm cách nào để sửa lỗi: thông báo pathspec khi cam kết trong git?
- 4. Làm cách nào để chỉnh sửa thông báo cam kết không chính xác trong TortoiseHG Mercurial?
- 5. lỗi cam kết git: pathspec 'cam kết' không khớp với bất kỳ tệp nào đã biết đến git
- 6. Chỉnh sửa thông báo cam kết không chính xác trong Git đã được đẩy
- 7. Làm thế nào để chỉnh sửa thông báo cam kết Mercurial sau khi phân nhánh?
- 8. Thay đổi thông báo cam kết cũ trên Git
- 9. Lấy danh sách các cam kết cùng với thông báo cam kết và băm trong Git
- 10. Làm cách nào để "mở lại" một cam kết git?
- 11. Git: Recover thất bại của cam kết thông báo
- 12. nhận thông báo cam kết trong git hook
- 13. Làm cách nào để chỉnh sửa các cam kết git trước đây để xóa mật khẩu của tôi khỏi nhật ký cam kết?
- 14. Git đẩy tất cả các cam kết dưới dạng cam kết đơn với thông báo tùy chỉnh
- 15. Làm cách nào để chèn cam kết bằng git?
- 16. GIT: Bất kỳ cách nào để cam kết trên nhiều bản lặp lại?
- 17. Xấu cam kết Git
- 18. Tôi làm cách nào để cam kết thẻ git?
- 19. git: Hiển thị thông điệp cuối cùng cam kết trong cam kết mẫu
- 20. Làm cách nào để xóa cam kết git
- 21. git look cam kết đăng nhập cho cam kết id
- 22. git: Chuyển nhánh và bỏ qua bất kỳ thay đổi nào mà không cam kết
- 23. Git: hợp nhất xung đột và cam kết thông báo
- 24. Git: Làm thế nào tôi có thể sửa đổi cam kết của máy chủ?
- 25. 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
- 26. Cách nhanh nhất để chỉnh sửa hàng trăm thư cam kết Git là gì?
- 27. Làm cách nào để đẩy cam kết sửa đổi vào kho lưu trữ Git từ xa?
- 28. Làm cách nào để tìm thấy cam kết git gần đây nhất đã sửa đổi tệp?
- 29. Làm thế nào để tôi cam kết bí mật trong git với ngày cam kết không có trong quá khứ?
- 30. Làm cách nào để liệt kê các cam kết từ một số cam kết nhất định?
Đó là một chút tương tự như http://stackoverflow.com/questions/3926768/amend-a-commit-that-wasnt-the -trước-cam kết. Tôi đã thử (bên dưới) để xem cách 'commit --amend' có thể được viết như thế nào. Cho tôi biết nếu nó hoạt động. – VonC