Chia sẻ kiến thức lập trình, kĩ năng mềm từ góc nhìn của một Engineer

How to resolve problem with git restore

Khi làm việc với git, có nhiều cách để bạn có thể commit code, tuy nhiên thường sẽ phân ra hai kiểu: kiểu người chuyên dùng command line (vì để nhớ lệnh, ngầu,…) và kiểu người chuyên dùng tool (vì nó tiện, không phải nhớ lệnh, cũng không phải gõ)

Hôm nay chúng ta sẽ đàm đạo một chút về việc có nên thường sử dụng command git add . trong việc commit code thường ngày hay không, khi nào nên dùng, khi nào không nên dùng, nếu dùng thường xuyên thì có vấn đề gì hay không? và cách xử dụng git restore để xử lý vấn đề.

Khi nào thì nên dùng git add .

  • Khi init dự án, tạo tác cùng lúc nhiều file, nhiều thư viện: file code, file config, html, css, js,…
  • Sau mỗi lần code feature, đảm bảo code đã coverage đủ các Test Case
  • Mỗi lần update feature, không chỉ update một vài phần, mà update nhiều phần, nhiều logic, xử lý trên nhiều file
  • Cần xử lý nhanh, mà nhiều file thì không thể add từng file một cách thủ công được

Khi nào thì không nên dùng git add .

  • Trong cùng lần commit vừa fixbug, vừa thêm tính năng mới, lại vừa thêm rất nhiều code logic và mỗi logic lại không hề liên quan đến nhau (về bản chất nếu làm điều này thì đã rất là sai rồi nên mình sẽ nói sau)
  • Không tự cover được những sự thay đổi, cũng như vấn đề trong mỗi lần commit
  • Có nhiều khối mã chưa hoàn chỉnh, chưa muốn commit nhưng lại lỡ tay commit lên, gây lủng luồng code cũ.

Cách sử dụng git restore để giải quyết vấn đề

Người ta thường khuyên không nên sử dụng git add . nếu không tự cover được hết các vấn đề, để tránh thêm nhiều rắc rối và khó xử lý về sau.

Tuy nhiên thì trong quá trình làm việc, mình dùng hàng ngày, dùng liên tục, tỉ lệ mình dùng git add . trong công việc là 100%, vậy thì để có thể tự tin sử dụng như thế thì mình đã làm những gì ?

  1. Luôn giữ cho trong mỗi lần commit, những file code có sự thay đổi thì phải thực sự liên quan đến nhau, và nó giải quyết được một vấn đề cụ thể. Điều này rất hữu ích cho các bạn xử lý các vấn đề sau này như là : cherry-pick hay revert code
  2. Luôn đảm bảo code trong mỗi lần commit chạy pass các Test Case, không gây ảnh hưởng đến những tính năng khác
  3. Nếu có quá nhiều sự thay đổi không liên quan theo kiểu: vừa làm tính năng này, vừa fixbug, vừa thêm mới nhiều file, thì chỉ commit lên những file có mối liên quan với nhau

Vậy thì câu hỏi đặt ra là? lỡ git add . cả một đống file, bao gồm cả những file không có sự liên quan về chức năng với nhau thì mình phải xử lý thế nào?

Đơn giản chỉ là sử dụng linh hoạt lệnh git restore để hoàn tác những thay đổi khỏi khu vực stage area mà thôi.

Trước tiên, giả sử mình có một loạt các file đã sửa như bên dưới

git status

Sau đấy dùng lệnh git add . đẩy toàn bộ code sang khu vực Stage Area

git add .

Bây giờ đến việc commit code lên, tuy nhiên mình không muốn commit ba file bên dưới nữa, mà chỉ muốn commit những file ở trên thôi thì dùng command sau:

git restore --staged <file_1> <file_2> <file_3>
git restore –staged <file 1> <file 2> <file 3>

Các bạn muốn restore file nào thì ném đường dẫn của file đó vào command git restore là được, ở trên mình chỉ pick ra ba file để demo. Xem hình là thấy, ba file đó đã chuyển về un-staged

Bây giờ mình lại không muốn pick pick từng file một như thế nữa, rất mất công, giờ mình muốn tất cả các file đều trở về trạng thái như ban đầu (là trạng thái un-staged) thì sẽ làm như sau:

dùng command git restore --staged . để đưa toàn bộ code từ staged về un-staged

git restore –staged .

Vậy là code của bạn đã được hoàn nguyên về khu vực local và xử lý tiếp, các bạn chỉ nên đẩy những phần code có liên quan đến nhau lên repo thôi để sau này đỡ phải xử lý những vấn đề khác vất vả hơn.

Xong, bây giờ mình không muốn commit lên mà muốn nhảy sang branch khác để fixbug thì sử dụng git stash như bài trước mình đã hướng dẫn để lưu tạm code vào một chỗ, lúc sau quay lại làm tiếp.

Một số bài viết liên quan:

1 Comment

  1. Arign

    Thanks for the info, it helped me figure it out.

© 2024 Cafeincode

Theme by Anders NorenUp ↑