Tôi muốn chia commit đầu tiên trong kho git của mình, nhưng tôi không thể sử dụng rebase để làm điều này bởi vì một nút cha là bắt buộc. Tôi đã tìm thấy Edit the root commit in Git? hữu ích để sửa đổi cam kết đầu tiên, nhưng không chia tách nó. Làm thế nào tôi có thể chia nó?Tách cam kết đầu tiên trong git
Trả lời
Bạn chỉ có thể làm theo chính xác quá trình tương tự trong câu hỏi bạn đã liên kết với, nhưng sau khi kiểm tra ra các gốc cam, bạn có thể sử dụng git commit --amend
để sửa đổi bản gốc cam kết và sau đó git commit
để làm cho thêm cam kết trước khi tiếp tục với lệnh rebase.
Tùy thuộc vào cách bạn muốn tách cam kết, bạn có thể sử dụng git rm --cached
để xóa tệp mà bạn muốn thêm vào lần commit thứ hai trước git commit --amend
và chỉnh sửa bất kỳ tệp nào bạn muốn khác trước khi gọi git add
trên các tệp đó một lần nữa trước khi bạn gọi git commit --amend
.
Sau khi gọi git commit --amend
, để đảm bảo rằng bạn cam kết chính xác tình trạng của rễ gốc cam kết bạn có thể gọi:
git checkout <sha1-of-original-root> -- .
trước khi gọi git commit
để làm cam kết thứ hai của rễ chia cam kết.
Bạn có thể sử dụng tùy chọn --root
nói rebase
mà bạn muốn viết lại root/đầu tiên cam kết:
$ git rebase --interactive --root
Sau đó, rễ cam kết sẽ hiển thị trong danh sách rebase TODO, và bạn có thể chọn để chỉnh sửa nó:
edit <root commit sha> <original message>
pick <other commit sha> <message>
...
Đây là lời giải thích của --root
từ the Git rebase docs:
Khôi phục tất cả các cam kết có thể truy cập từ
<branch>
, thay vì giới hạn chúng bằng một số<upstream>
. Điều này cho phép bạn rebase (các) commit gốc trên một nhánh.
- 1. xóa cam kết git đầu tiên
- 2. octopress cam kết đầu tiên
- 3. tìm cam kết đầu tiên của một tệp trong git
- 4. Sự cố với cam kết đầu tiên về kho git
- 5. đăng nhập đầu tiên 10 trong git
- 6. Sử dụng git diff trong cùng một tệp giữa cam kết đầu tiên và lần cuối
- 7. Làm cách nào để xóa cam kết đầu tiên trong git?
- 8. Thay đổi cam kết đầu tiên của dự án với Git?
- 9. (khác) sửa đổi lịch sử git để thêm cam kết đầu tiên
- 10. gì để làm với cam kết thực hiện trong một đầu tách ra
- 11. Hợp nhất Git cam kết
- 12. Xấu cam kết Git
- 13. Tìm cam kết đầu tiên cụ thể cho chi nhánh
- 14. Cam kết trong một gói git
- 15. Cách khôi phục cam kết từ 'trạng thái đầu bị tách rời'?
- 16. git add/rm (cam kết)
- 17. Git cam kết từ python
- 18. git look cam kết đăng nhập cho cam kết id
- 19. nhận thẻ cam kết trong git
- 20. vô tình đã cam kết trong git
- 21. Rác thu thập cam kết trong git
- 22. Viết GIT tiền cam kết trong java?
- 23. git: Hiển thị thông điệp cuối cùng cam kết trong cam kết mẫu
- 24. Xóa git cũ cam kết
- 25. Khôi phục cam kết git trước đó?
- 26. Tách chuỗi tại không gian đầu tiên
- 27. Git: di chuyển cam kết "lên trên"
- 28. Git cam kết vấn đề: Không thể nối thêm .git/
- 29. Làm cách nào để hoàn tác git rm -rf dirname mà không có cam kết đầu tiên?
- 30. Hoàn nguyên một phần của cam kết với git
(được viết lại) Bạn không muốn 'git reset --hard' tại đây. Bạn có thể sử dụng 'git reset - .', nhưng điều đó sẽ không" khôi phục "cây đang hoạt động, chỉ có chỉ mục. Có lẽ ý tưởng tốt nhất là 'git checkout - .' sẽ cập nhật chỉ mục và cây làm việc chứ không phải HEAD (để lại cho bạn sẵn sàng cam kết phần thứ hai của việc chia tách gốc). . Ý tưởng chính ở đây là cả * reset * và * checkout * sẽ thay đổi HEAD trừ khi bạn cho chúng một đối số đường dẫn. –
@ Chris Johnsen: Bạn hoàn toàn chính xác. Tôi đã nghĩ về một giai đoạn hai thiết lập lại, con đường sau đó '- hard' nhưng sau đó đã không thực sự viết đó. Giải pháp thanh toán tốt hơn. –