Tôi hiểu rằng đây là một ý tưởng tồi đối với nhiều trường hợp. Tôi đang học Git và thử nghiệm. Không có mã nào bị tổn hại trong bài tập này.Làm cách nào để đổi tên tin nhắn cam kết trong Git?
Tôi đã tạo ra một cấu trúc như thế này:
* [cf0149e] (HEAD, branch_2) more editing
* [8fcc106] some edit
|
| * [59e643e] (branch_2b) branch 2b
|/
|/
| * [0f4c880] (branch_2_a) branch 2a
|/
|/
* [a74eb2a] checkout 1
* [9a8dd6a] added branch_2 line
|
|
| * [bb903de] (branch_3) branch 3
|/
|
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
Bây giờ tôi muốn đi qua đồ thị này và đổi tên các cam kết khác nhau để họ có ý nghĩa.
Ví dụ:
* | [a74eb2a] checkout 1
* | [9a8dd6a] added branch_2 line
renamed to:
* | [a74eb2a] branch 2 commit 2
* | [9a8dd6a] branch 2 commit 1
Lưu ý rằng:
[cf0149e] (HEAD, branch_2) more editing
[59e643e] (branch_2b) branch 2b
[0f4c880] (branch_2_a) branch 2a
đều phân nhánh ra khỏi:
[a74eb2a] checkout 1
tôi đã thử nghiệm với
git rebase -i 328454f
.210
sau đó thay đổi "chọn" để "chỉnh sửa" trên các cam kết mà tôi muốn sửa đổi và sau đó chạy
git commit --amend -m "the new message"
như quá trình rebase tiếp tục.
Vấn đề với cách tiếp cận này là, sau git rebase --continue
cuối cùng tôi kết thúc với hai cam kết mới (bản sao của hai lần tôi muốn đổi tên) trên nhánh tôi đã xảy ra. Ví dụ, nếu tôi chạy rebase khi TRỤ là tại "branch_2" đồ thị có thể trông như thế này:
* [cf0149e] (HEAD, branch_2) more editing
* [8fcc106] some edit
* [3ff23f0] branch 2 commit 2
* [2f287a1] branch 2 commit 1
|
| * [59e643e] (branch_2b) branch 2b
| /
|/
| | * [0f4c880] (branch_2_a) branch 2a
| |/
| |/
| * [a74eb2a] checkout 1
| * [9a8dd6a] added branch_2 line
|/
|
| * [bb903de] (branch_3) branch 3
|/
|
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
Nói cách khác bây giờ tôi có hai bộ cam kết đại diện cho chính xác tình trạng cùng một mã.
Tất cả những gì tôi muốn làm là thay đổi thông báo cam kết.
Tôi cũng muốn đổi tên thông báo ban đầu từ "thử nghiệm" thành nội dung như "Phiên bản ban đầu". Tôi không thể làm điều đó với git commit --amend -m "Initial version"
vì tôi kết thúc ở chế độ không đầu nếu tôi thanh toán cam kết.
Tôi đang làm gì sai? Chắc chắn nó không thể là khó khăn.
CHỈNH SỬA:
Đây là phương pháp tôi vừa thử làm việc. Tất nhiên, nó viết lại lịch sử. Vì vậy, ngoài những trường hợp rất đặc biệt, đó là một ý tưởng tồi. Đây là các bước:
Thanh toán chi nhánh cần sửa đổi. Tạo các tệp bản vá:
git format-patch HEAD~x // Where x is how far back from HEAD you need to patch
Chỉnh sửa tệp bản vá để thay đổi thông báo cam kết. Bây giờ hãy đặt lại đầu.
git reset --hard HEAD~x // Same x as before
Áp dụng các bản vá lỗi:
git am 000*
cam kết mới sẽ được tạo ra với của SHA1 mới. Nếu bất kỳ chi nhánh nào bây giờ cần phải tham khảo các cam kết mới với các thư đã sửa, bạn phải sử dụng git rebase
để di chuyển chúng.
Để sử dụng ví dụ của riêng tôi, sau khi áp dụng các thủ tục vá Tôi đã kết thúc-up với điều này:
* [7761415] (HEAD, branch_2) branch 2 commit 4
* [286e1b5] branch 2 commit 3
* [53d638c] branch 2 commit 2
* [52f82f7] branch 2 commit 1
| * [bb903de] (branch_3) branch 3
|/
| * [59e643e] (branch_2b) branch 2b
| | * [0f4c880] (branch_2_a) branch 2a
| |/
| * [a74eb2a] checkout 1
| * [9a8dd6a] added branch_2 line
|/
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
Vì vậy, tôi có branch_2 tôi cam kết độc đáo dán nhãn. Bây giờ tôi muốn chuyển branch_2a để nó chi nhánh ra khỏi [53d638c] branch 2 commit 2
Thanh toán branch_2a
git checkout branch_2a
rebase nó
git rebase 53d638c
Bây giờ tôi có:
* [fb4d1c5] (HEAD, branch_2a) branch 2a
| * [7761415] (branch_2) branch 2 commit 4
| * [286e1b5] branch 2 commit 3
|/
* [53d638c] branch 2 commit 2
* [52f82f7] branch 2 commit 1
| * [bb903de] (branch_3) branch 3
|/
| * [59e643e] (branch_2b) branch 2b
| * [a74eb2a] checkout 1
| * [9a8dd6a] added branch_2 line
|/
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
Cùng thủ tục với kết quả chi nhánh_2b trong này:
* [ca9ff6c] (HEAD, branch_2b) branch 2b
| * [fb4d1c5] (branch_2a) branch 2a
|/
| * [7761415] (branch_2) branch 2 commit 4
| * [286e1b5] branch 2 commit 3
|/
* [53d638c] branch 2 commit 2
* [52f82f7] branch 2 commit 1
| * [bb903de] (branch_3) branch 3
|/
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
Đó chính xác là những gì tôi đang tìm kiếm. Không quá lộn xộn. Một lần nữa, không phải cái gì bạn muốn làm bên ngoài các trường hợp rất đặc biệt. Trong trường hợp của tôi, tôi chỉ đang chơi để học Git, vì vậy ở trên không thực sự ảnh hưởng đến một kho lưu trữ mã thực. Thật tuyệt khi biết rằng bạn có thể làm điều này nếu bạn phải làm vậy.
Bây giờ để đổi tên cam kết đầu tiên.
Bạn không thể. Git được cho là không hướng máy chủ. Nếu bạn đẩy nó vào một nơi khác, đúng vậy. –
Làm thế nào bạn có được những biểu đồ mát mẻ của các chi nhánh của bạn và tất cả? Đó có phải là một lệnh git hay bạn đã vẽ nó ra bằng cách sử dụng ASCII chính mình? –