19 Bí Kíp Bạn Có Thể Dùng Khi Phạm Sai Lầm Với Git

3175
Bí kíp khi phạm sai lầm với Git

Người viết: Nguyen Anh Tien

Những nội dung sau rất nguy hiểm, nếu bạn làm theo, xin hãy chịu trách nhiệm về bản thân mình.

  Combo các lệnh Git đủ dùng trong một dự án cho người mới bắt đầu
  Những câu hỏi phỏng vấn về GIT cần nhớ ngay

Ở trên local

Có hiệu quả khi làm việc trên môi truờng phát triển của bản thân, không làm ảnh hưởng đến người khác. Khi làm việc trên remote sẽ phát sinh ảnh hưởng đến người khác nên rất nguy hiểm.

Xem thêm Git là gì

Sự cố 1: Khi trong commit message lỡ có những từ cấm kị khiến bạn chỉ muốn chết đi cho xong

Để sửa lại nội dung commit thì rất đơn giản. Cũng có thể thêm được cả file vào trong commit:

Sự cố 2: Khi lỡ tay commit dưới tên của môt user khác

Khi làm việc ở nhà và khi làm việc trên công ty thì hẳn sẽ có lúc sử dung git config khác nhau và cũng có lúc bị nhầm thiết lập.

Ở đây chúng ta đang nói về việc thay đổi tác giả (Author). Hãy đổi Commiter ở .gitconfig hoặc .git/config.

Khi muốn đổi tên user hoặc email của HEAD

Trường hợp muốn sửa lại commit từ lâu rồi

(NGUY HIỂM) Viết lại toàn bộ lịch sử commit

Khi muốn sửa các commit của người dùng (committer) nhất định thì có thể dùng cách sau để sửa.

Lịch sử commit sẽ bị thay đổi hoàn toàn.

Sự cố 3: Khi đã lỡ tay commit một số file thừa nhưng sau khi nghĩ lại thì nên ignore thì hơn

Trường hợp commit xoá

Nếu có những phần thừa thì ta xoá đi rồi thêm vào ignore:

Trường hợp muốn coi như là chưa từng có file đó

Khi mà bạn muốn: “Hả, file nào cơ, là gì có file nào như thế ?”

Sự cố 4: Khi mà tên branch bạn đặt quá là “chuối”

Nếu không ai nhìn thấy thì ta “bí mật” sửa lại tên branch thôi nào !

Sự cố 5: Khi trong phút nông nổi bạn lỡ commit và giờ muốn commit đó biến mất

Không để cho ai biết (= người khác vẫn chưa pull về)

Sửa lại phần lịch sử commit ngay trước đó:

Trường hợp đã bị ai đó phát hiện(= người khác đã pull về)

Nếu thay đổi lịch sử commit sẽ dẫn đến tình trạng lộn xộn nên ta cầm dùng commit xoá để giải quyết:

Sự cố 6: Khi muốn tổng hợp những commit vụn vặt trước đây thành một commit

Sử dụng rebase + squash (or fixup) để tổng hợp lại các commit cũ:

Thay vì dùng squash có thể dùng fixup nhưng khi đó commit message của những commit được fixup sẽ bị mất.

Sự cố 7: Khi bạn muốn chia commit to thành những commit nhỏ hơn một cách thông minh

Ở mục 6, tuy tổng hợp lại là tốt nhưng khi tổng hợp quá nhiều cũng sẽ trở thành vấn đề Rất tiện khi mà những commit chức năng bị lẫn vào những commit sửa bug.

Sự cố 8: Khi lỡ tay commit nhầm sang một branch khác

Có những lúc ta sơ suất lỡ tay commit thẳng vào master trong khi thực ra là muốn commit vào một branch khác.

Sự cố 9: Khi muốn xoá hoàn toàn các file không cần thiết

Có những lúc ta muốn 1 phát xoá tất tần tật những file tự động sinh ra hoặc những file tự động back up. Nếu không phải là những file cần git quản lý hoặc những file sẽ commit thì xoá đi thôi. Ơ mà cái này cũng ko phải là sự cố nhỉ…

Tiện đây thì trong trường hợp chỉ là những file mà git không quản lý thì chỉ như sau là OK

Sự cố 10: Khi tạm thời cần tạm dừng công việc hiện tại và chuyển sang một branch khác

Tuy mình không xấu nhưng có những lúc cần phải tạm dừng công việc để làm việc khác:

Sự cố 11: Khi lỡ tay xoá mất một commit cực kì cực kì quan trọng

Đây hẳn là sự cố khủng khiếp nhất. Có thể xảy ra khi lỡ tay git reset --hard Tuy nhiên, commit nào cũng có thể hồi phục được.

Sự cố 12: Khi lỡ tay xoá mất branch và muốn lấy lại

Nếu vẫn còn reflog thì không có sao. Vẫn có thể hồi phục lại được Nếu commit lên một branch không tên, sau đó check out sang một branch khác bị xoá mất thì cũng tương tự.

Tương tự giống như sự cố 13 dưới đây:

Sự cố 13: Khi muốn thay đổi một phần nội dung commit

Khi có những typo nhỏ và muốn chỉnh sửa thì ko cần thiết phải tạo commit mới để sửa mà hãy tiến hành sửa lại luôn:

Sự cố 14: Khi có conflict trong quá trình rebase

Khi không merge mà tiến hành rebase thì nếu có conflict, chắc hẳn là hoảng loạn rồi:

Sự cố 15: Khi đã merge nhưng lại muốn trở lại như lúc trước

Chỉ cho trường hợp mà người khác vẫn chưa pull code về

Ở trên Remote

Sự cố 16: Khi pull từ remote về thì có quá nhiều conflict nên tạm thời muốn trở lại như cũ

Sau khi pull code về cập nhật nhưng thấy conflict nhiều như núi thì quả là muốn trở lại như cũ Gần giống như sự cố 15:

Sự cố 17: Lỡ tay push force lên master trên remote

Việc push -f lên origin/master là việc bị cấm Tuy nhiên thì thỉnh thoảng vẫn có một số người làm…

Ta sẽ sửa lại như sau.

Trường hợp chỉ cần push về 1 commit trước đó

Nếu trên local cũng muốn như vậy thì tiến hành reset cũng tốt.

Nếu muốn xoá đi vài commit trước đó

Sự cố 18: Sau khi release phát hiện thấy có bug và muốn trở về như cũ

Do phát sinh thiệt hại nên những thứ đã merge và maste cần phải chuyển tạm thời về như cũ Tuy nhiên không thể revert từng commit 1 nếu có nhiều commit:

Nếu vẫn chưa có ai kéo phần code này về thì có thể làm đươc cả những việc sau nữa(Cái này nguy hiểm):

Sự cố 19: Khi sau khi chuyển lại và đã commit thêm một số commit mới nhưng không thể merge lại được

Ở sự cố 18, khi đã xoá bỏ merge, tiến hành chỉnh sửa nhưng merge lại không được.

commit revert không có nghĩa là sẽ ko còn commit merge nữa mà là làm ngược lại những việc mà commit merge làm.

Thế nên, khi merge lại thì cần phải revert lại commit revert:

Khi muốn thử những điều trên ở một môi trường an toàn thì

Đúng là nếu chưa quen mà tự nhiên lại thực hành luôn thì rất vất vả.

Những ai đã có sản phầm thì có thể clone về và dùng cái đó để test thử.

Nếu thế thì cho dù có bị thất bại thì cũng không gây ảnh hưởng gì đến môi trường làm việc chính.

Những ai chưa có sản phẩm có thể lên Github, tìm hiếm 1 repo nào đó nổi tiếng, clone về rồi thực hành.

Tuy nhiên cần chú ý 1 điều là những cái này chỉ được thử ở trên môi trường local thôi nhé.

Nếu muốn thử cả ở trên remote nữa thì có thể chuẩn bị sẵn môi trường test trên Github, clone về rồi thử.

Hình dung cơ bản như sau:

Bài viết được dịch từ bài Gitでやらかした時に使える19個の奥義 của tác giả muran001 trên Qiita.

Có thể bạn quan tâm:

Xem thêm việc làm Software Developers tại TopDev

TopDev via viblo.asia

  10 Vấn đề về Git thường gặp và Giải pháp
  Git - Học nghiêm túc một lần (Phần 1)