- vừa được xem lúc

GitHub 1001 cho sinh viên IT: Dễ Như Ăn Phở – Dù Làm Một Mình Hay Làm Nhóm (P3)

0 0 1

Người đăng: Nam Trần

Theo Viblo Asia

Git Nâng Cao Khi Làm Việc Thực Tế (Phần 3)

phần 1phần 2, chúng ta đã cùng tìm hiểu cách sử dụng Git khi làm việc một mình và khi làm nhóm cơ bản.

Trong blog này, mình muốn chia sẻ những kinh nghiệm thực tế khi dùng Git nâng cao – bao gồm cả những lệnh mình thường xuyên sử dụng và cả cách mình đã xử lý các vấn đề từng gặp phải.

👉 Blog này sẽ được cập nhật thường xuyên khi có thêm tình huống mới. Nếu bạn có thắc mắc hay gặp lỗi “khó nhằn”, đừng ngại comment bên dưới để cùng nhau trao đổi và học hỏi nhé.

Trong phần 3 này, chúng ta sẽ cùng khám phá những lệnh Git nâng cao giúp xử lý công việc hàng ngày gọn gàng, chuyên nghiệp hơn. 🚀

1. .gitignore – Giữ repo sạch sẽ

.gitignore là file giúp bạn khai báo những thứ không muốn đưa lên GitHub.
Ví dụ: thư mục node_modules, file log, file config chứa mật khẩu...

Ví dụ file .gitignore phổ biến:

# Thư mục node_modules
node_modules/ # File log
*.log # File môi trường
.env

🌟Ghi chú nhỏ về pattern .gitignore

  1. dir/ → ignore toàn bộ thư mục dir (và các file con trong đó), bất kể nằm ở đâu.
  2. /dir/ → chỉ ignore thư mục dir ở gốc repo (kèm file con).
  3. *.log → ignore tất cả file có đuôi .log ở mọi nơi.
  4. !important.log → không ignore file important.log (dù rule trên có ignore *.log).

Mẹo nhận biết đã đúng file hay chưa trên VScode

Mình có tạo file .env với nội dung .gitignore như sau:

/.env

Trên VScode sẽ làm mờ file đó đi như hình dưới là đúng file rồi nhé.

2. git stash – Lưu tạm thay đổi

Đôi khi bạn đang code dở dang ở một branch, nhưng sếp kêu chuyển qua branch khác để fix bug gấp.
Nếu bạn chưa muốn commit mớ code dở này, thì git stash chính là cứu tinh 🚀.

Cách dùng cơ bản

# Lưu lại toàn bộ thay đổi chưa commit
git stash # Xem danh sách các stash đã lưu
git stash list # Lấy stash gần nhất ra và áp dụng
git stash pop # Áp dụng stash nhưng vẫn giữ trong danh sách
git stash apply

Ví dụ thực tế

Bạn đang ở branch feature/login và code dở:

git stash # Lưu lại code hiện tại của bạn
git checkout hotfix/payment-bug
Fix xong bug, commit -> push
git checkout feature/login
git stash pop # Lấy lại code dở để làm tiếp

Một số lệnh hay với stash

  1. git stash save "Mô tả nhanh"đặt tên cho stash.
  2. git stash drop stash@{0}xoá stash cụ thể.
  3. git stash clearxoá toàn bộ stash.
  4. git stash -p → chỉ stash những thay đổi bạn chọn (từng file/từng hunk).

Tóm lại: stash giống như cất đồ vào tủ tạm thời, khi cần thì lôi ra dùng tiếp, rất tiện trong môi trường thực tế.

3. git reset – Quay ngược commit (cẩn thận khi dùng)

Đôi khi bạn commit nhầm hoặc có vài chỉnh sửa chỉ để test thử, sau đó quên mất ở đâu.
Khi git pull về thì báo xung đột, nhưng phần test đó cũng không quan trọng → lúc này git reset là giải pháp nhanh để quay lại trạng thái ổn định.

Tuy nhiên, lệnh này ảnh hưởng trực tiếp tới lịch sử commit, nên cần hiểu kỹ trước khi dùng.

🔎 Các tình huống thực tế hay dùng git reset

  1. Commit nhầm file test/nháp

    • Bạn đang test nhanh, commit luôn cả mấy file test.py hoặc debug.log.
    • Sau đó nhận ra không cần chúng nữa → dùng:
      git reset --soft HEAD~1 # Quay lại trước commit đó
      git restore test.py # Loại bỏ file test
      git commit -m "Commit lại, bỏ file test"
      
  2. Lỡ git add . quá tay

    • Bạn chỉ muốn add một file, nhưng gõ git add . → tất cả file thay đổi bị add vào staging.
    • Giải pháp:
      git reset # Gỡ toàn bộ khỏi staging
      git add file_cần_commit # Add lại file cần thiết
      
  3. Pull về bị conflict do code test không quan trọng

    • Bạn chỉnh vài dòng để test, pull code mới về thì conflict với branch main.
    • Vì code test không quan trọng, bạn bỏ hết và quay lại trạng thái như main:
      git fetch origin
      git reset --hard origin/main
      

⚠️ Lưu ý quan trọng:
Chỉ nên dùng git reset cho commit chưa push.
Nếu đã push lên remote (GitHub/GitLab), hãy cân nhắc dùng git revert thay vì reset để không phá lịch sử chung.

4. git revert – Đảo ngược commit an toàn

Nếu git reset giống như “quay ngược thời gian và xoá commit cũ”,
thì git revert giống như tạo thêm một commit mới để huỷ hiệu ứng commit trước đó.

👉 Điểm mạnh: an toàn khi làm việc nhóm vì không xoá lịch sử chung.

Ví dụ thực tế

  1. Commit nhầm file .env đã push

    • Bạn push commit chứa .env lên GitHub.
    • Không thể reset (vì sẽ làm rối lịch sử của team).
    • Giải pháp:
      git revert HEAD
      
      → Git sẽ tạo ra một commit mới đảo ngược thay đổi trong commit vừa rồi.
  2. Revert một commit cụ thể

    • Muốn bỏ commit có ID abc123:
      git revert abc123
      

    Cách xem ID (SHA) của commit trong Git

    1. Xem nhanh lịch sử với --oneline Hiển thị danh sách commit với SHA rút gọn và message:
    git log --oneline
    

    output example: image.png

    Bạn chọn commit mình muốn revert và dùng lệnh ở trên nhé!

So sánh nhanh với reset

  • git reset

    • Quay ngược, xoá commit.
    • Chỉ an toàn khi chưa push.
    • Thường dùng để chỉnh sửa lại lịch sử cá nhân.
  • git revert

    • Không xoá gì cả, chỉ thêm commit mới “đảo ngược”.
    • An toàn khi đã push và team đang cùng làm việc.

👉 Tóm lại:
Nếu lỡ commit nhầm nhưng chưa push → dùng reset.
Nếu commit đã push chung cho team → dùng revert để sửa mà không phá repo.

🙏 Lời cảm ơn

Cảm ơn bạn đã dành thời gian đọc đến cuối blog này.
Hy vọng những chia sẻ trên sẽ giúp bạn sử dụng Git một cách chuyên nghiệp hơntự tin xử lý các tình huống thực tế.

👉 Nếu thấy bài viết hữu ích, hãy chia sẻ cho bạn bè hoặc đồng nghiệp để cùng học hỏi.
👉 Và đừng quên để lại comment bên dưới nếu bạn có thắc mắc hay mẹo Git hay ho khác. Mình sẽ rất vui được thảo luận và cập nhật thêm vào blog cho mọi người cùng tham khảo. 🚀

Hẹn gặp lại bạn ở Phần 4: Git & CI/CD với GitHub Actions!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Thao tác với File trong Python

Python cung cấp các chức năng cơ bản và phương thức cần thiết để thao tác các file. Bài viết này tôi xin giới thiệu những thao tác cơ bản nhất với file trong Python.

1 1 172

- vừa được xem lúc

Tập tành crawl dữ liệu với Scrapy Framework

Lời mở đầu. Chào mọi người, mấy hôm nay mình có tìm hiểu được 1 chút về Scrapy nên muốn viết vài dòng để xem mình đã học được những gì và làm 1 demo nho nhỏ.

1 1 261

- vừa được xem lúc

Sử dụng Misoca API (oauth2) với Python

Với bài viết này giúp chúng ta có thể nắm được. ・Tìm hiểu cách xử lý API misoca bằng Python.

1 1 141

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 3)

Tiếp tục phần 2 của series Pandas DataFrame nào. Let's go!!. Ở phần trước, các bạn đã biết được cách lấy dữ liệu một row hoặc column trong Pandas DataFame rồi phải không nào. 6 Hoc.

1 1 161

- vừa được xem lúc

Lập trình socket bằng Python

Socket là gì. Một chức năng khác của socket là giúp các tầng TCP hoặc TCP Layer định danh ứng dụng mà dữ liệu sẽ được gửi tới thông qua sự ràng buộc với một cổng port (thể hiện là một con số cụ thể), từ đó tiến hành kết nối giữa client và server.

0 0 170

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 2)

Nào, chúng ta cùng đến với phần 2 của series Pandas DataFrame. Truy xuất Labels và Data. Bạn đã biết cách khởi tạo 1 DataFrame của mình, và giờ bạn có thể truy xuất thông tin từ đó. Với Pandas, bạn có thể thực hiện các thao tác sau:.

0 0 194