hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Cấu trúc dữ liệu và giải thuật
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Lập trình C#
      • Lập Trình C# Cơ Bản
      • ASP.NET Core MVC
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Git và Github
  • Tin công nghệ
Các lệnh và thao tác Git nâng cao

Các lệnh và thao tác Git nâng cao

  • 23-01-2026
  • Toanngo92
  • 0 Comments

Mục lục

  • Additional Git Commands – Rebase
  • Visual Representation
  • Key Points of Rebasing
    • 1. Clean Project History
    • 2. Avoiding Merge Commits
    • 3. Improving Bisectability
    • 4. Conflict Resolution
  • Use Cases for Rebasing
  • Practical Examples of Rebasing
    • Syntax
    • Example
  • Interactive Rebase
    • Syntax
    • Example
  • Staging Area
    • Vai trò của staging area:
  • Adding Changes to the Staging Area
  • Adding a Single File
    • Syntax
    • Example
  • Adding Multiple Files
    • Syntax
    • Example
  • Adding All Changes
    • Syntax
    • Example
  • Unstaging and Unmodifying Files
  • Unstaging a Specific File
    • Syntax
    • Example
  • Unstaging All Files
    • Syntax
  • Unmodifying Files
    • Method 1: Using git checkout
    • Method 2: Using git restore
    • Unmodifying All Files
  • Stashing
    • Vai trò của stashing:
  • Creating a Stash
    • Syntax
    • Example
    • Creating a Stash with a Message
    • Tạo stash kèm theo thông điệp
  • Listing Stashes
    • Liệt kê các stash
  • Applying a Stash
    • Áp dụng một stash
  • Applying a Specific Stash
    • Áp dụng một stash cụ thể
  • Popping a Stash
    • Pop stash (áp dụng và xóa stash)
  • Dropping a Stash
    • Xóa một stash
  • Clearing All Stashes
    • Xóa toàn bộ stash
  • Forking and Feature Branches
    • Forking và Feature Branch
  • Forking
    • Fork là gì?
    • Key Benefits of Forking
    • Lợi ích chính của Forking
  • Feature Branches
    • Nhánh tính năng
    • Key Benefits of Feature Branches
    • Lợi ích chính của Feature Branch
  • Ví dụ thực hành với README.md
    • Steps to Make Changes in Your Branch
    • Các bước thực hiện thay đổi trong branch của bạn
      • 1. Check out the Feature Branch
      • 2. Open the README.md File
      • 3. Edit the File
      • 4. Save and Close the File
      • 5. Stage the Changes
      • 6. Commit the Changes
      • 7. Push the Changes to the Remote Repository

Additional Git Commands – Rebase

Rebasing là một lệnh Git nâng cao cho phép lập trình viên tích hợp các thay đổi từ nhánh này sang nhánh khác.
Không giống như merge (tạo ra một commit mới để kết hợp lịch sử của hai nhánh), rebase sẽ viết lại lịch sử commit bằng cách đặt các commit của một nhánh lên trên một nhánh khác.

Quá trình này tạo ra một lịch sử tuyến tính, gọn gàng hơn, tránh cấu trúc phân nhánh phức tạp do merge tạo ra.


Visual Representation

Giả sử có hai nhánh: main và feature.

  • Nhánh main có các commit: A, B, C
  • Nhánh feature có các commit: D, E
trước rebase
sau khi rebase

Key Points of Rebasing

Rebase mang lại nhiều lợi ích rõ ràng trong việc quản lý lịch sử dự án.

1. Clean Project History

Rebasing giúp duy trì lịch sử dự án tuyến tính, dễ theo dõi hơn theo thời gian.
Điều này đặc biệt hữu ích khi review quá trình phát triển dự án vì tránh được sự phức tạp do nhiều nhánh và merge commit gây ra.

2. Avoiding Merge Commits

Một lợi thế lớn của rebase là tránh tạo merge commit.
Merge commit có thể làm lịch sử trở nên lộn xộn và khó truy vết.
Rebase áp dụng trực tiếp các thay đổi lên nhánh gốc, loại bỏ nhu cầu tạo thêm commit trung gian.

3. Improving Bisectability

Rebase giúp việc sử dụng lệnh git bisect dễ dàng hơn để xác định commit gây lỗi.
Với lịch sử tuyến tính, mỗi commit là hậu duệ trực tiếp của commit trước đó, giúp quá trình bisect chính xác và đơn giản hơn.

4. Conflict Resolution

Trong quá trình rebase, xung đột có thể xảy ra nếu các thay đổi ở nhánh hiện tại và nhánh gốc chồng chéo nhau.
Việc giải quyết xung đột trong rebase đòi hỏi cẩn trọng để đảm bảo lịch sử cuối cùng phản ánh đúng ý định thay đổi.
Dù có thể khó hơn merge, nhưng kết quả thường sạch và rõ ràng hơn.


Use Cases for Rebasing

Rebasing giúp giữ cho code luôn đồng bộ và lịch sử commit gọn gàng.
Hai cách sử dụng rebase phổ biến trong workflow:

  • Giữ feature branch luôn cập nhật với main
    Trước khi merge feature branch vào main, có thể rebase feature branch lên main mới nhất để đảm bảo tương thích và tránh xung đột.
  • Interactive rebasing (git rebase -i)
    Cho phép chỉnh sửa, sắp xếp lại hoặc squash commit trong quá trình rebase.
    Rất hữu ích để làm sạch lịch sử commit trước khi merge vào nhánh dùng chung.

Practical Examples of Rebasing

Sơ đồ dưới đây mô tả quy trình rebase cơ bản:

Syntax

git rebase [branch]

Example

Rebase nhánh feature lên main:

git checkout feature-branch
git rebase main

Lệnh này sẽ di chuyển toàn bộ commit của feature-branch lên đầu nhánh main.


Interactive Rebase

Interactive rebase cho phép chỉnh sửa, sắp xếp lại, squash hoặc xóa commit trong một nhánh, mang lại khả năng kiểm soát cao hơn đối với lịch sử dự án.

Sử dụng:

git rebase -i [base-branch]

Điều này cho phép:

  • Làm sạch commit log
  • Gộp nhiều commit thành một
  • Điều chỉnh message cho rõ ràng và có ý nghĩa hơn

Rất hữu ích khi chuẩn bị merge một nhánh vào main.

Syntax

git checkout features
git rebase -i HEAD~n

(n là số commit cần đưa vào rebase)

Example

git rebase -i HEAD~1
Interactive Rebase Command
Interactive Rebase Interface

Staging Area

Staging area (còn gọi là index) là vùng trung gian nơi các thay đổi được tập hợp trước khi commit vào repository.
Nó đóng vai trò là khu vực chuẩn bị để lập trình viên xem xét và tổ chức các thay đổi trước khi ghi nhận vĩnh viễn vào lịch sử dự án.

Vai trò của staging area:

  • Chọn lọc thay đổi cụ thể để commit
  • Nhóm các thay đổi liên quan vào cùng một commit
  • Review lại thay đổi để đảm bảo chính xác và đầy đủ

Tóm lại:

Thay đổi được thực hiện trong working directory → đưa vào staging area → commit vào local repository.


Adding Changes to the Staging Area

Staging area cho phép thu thập các thay đổi trước khi commit, giúp người dùng kiểm soát chính xác những gì sẽ được đưa vào commit tiếp theo.


Adding a Single File

Syntax

git add <file>

Example

git add test2.txt

(Trước khi chạy lệnh, đảm bảo file tồn tại)

Thêm thay đổi vào khu vực staging

Adding Multiple Files

Syntax

git add <file1> <file2> <file3>

Example

git add test3.txt test4.txt
Thêm các files vào khu vực staging

Adding All Changes

Syntax

git add .

Example

git add .

Lệnh này đưa toàn bộ thay đổi trong thư mục hiện tại và các thư mục con vào staging area.


Unstaging and Unmodifying Files

Trong Git, đôi khi cần:

  • Gỡ file khỏi staging area
  • Hoàn tác thay đổi của file

Việc hiểu rõ các thao tác này giúp duy trì working directory sạch và commit chính xác.


Unstaging a Specific File

Syntax

git reset HEAD <file>

Example

git reset HEAD test1.txt

Lệnh này gỡ test1.txt khỏi staging area nhưng giữ nguyên thay đổi trong working directory.


Unstaging All Files

Syntax

git reset HEAD .

Lệnh này gỡ toàn bộ file khỏi staging area, cho phép xem xét lại nội dung commit.


Unmodifying Files

Unmodifying giúp hoàn tác thay đổi trong working directory, đưa file về trạng thái commit gần nhất.

Method 1: Using git checkout

git checkout -- test2.txt

Method 2: Using git restore

git restore test3.txt

Cú pháp git restore trực quan hơn, được giới thiệu ở các phiên bản Git mới.

Unmodifying All Files

git restore .

Lệnh này hủy toàn bộ thay đổi của các file đã track.


Stashing

Stashing cho phép tạm thời lưu các thay đổi trong working directory mà chưa sẵn sàng commit.
Rất hữu ích khi:

  • Cần chuyển nhánh nhanh
  • Cần pull code mới
  • Chưa muốn commit phần đang làm dở

Vai trò của stashing:

  • Context Switching: Chuyển task nhanh
  • Collaboration: Giữ working tree sạch khi làm việc nhóm
  • Experimentation: Thử nghiệm mà không ảnh hưởng lịch sử

Creating a Stash

Syntax

git stash

Example

git stash

Lệnh này lưu trạng thái hiện tại của working directory và staging area, đưa working directory về trạng thái sạch của commit gần nhất.

Creating a Stash with a Message

Tạo stash kèm theo thông điệp

Việc tạo một stash kèm theo thông điệp cho phép lập trình viên lưu các thay đổi với một nhãn mô tả, giúp dễ dàng nhận diện và quản lý nhiều stash khác nhau sau này. Điều này đặc biệt hữu ích khi làm việc trên nhiều tác vụ cùng lúc, vì thông điệp cung cấp ngữ cảnh cho các thay đổi đã được stash.

Cú pháp:

git stash push -m "Your message here"

Ví dụ:

git stash push -m "Stashing with commit message"

Listing Stashes

Liệt kê các stash

Việc liệt kê stash trong Git sẽ hiển thị tất cả các stash đã được lưu trong repository, bao gồm thông điệp và định danh của chúng. Điều này hữu ích cho việc xem lại và quản lý các thay đổi đã được stash, cho phép lập trình viên nhanh chóng tìm, áp dụng hoặc xóa các stash cụ thể khi cần.

Cú pháp:

git stash list

Ví dụ:

git stash list

Lệnh này hiển thị danh sách tất cả các stash cùng với thông điệp và mã định danh tương ứng của chúng.


Applying a Stash

Áp dụng một stash

Việc áp dụng stash trong Git sẽ khôi phục các thay đổi đã lưu từ một stash cụ thể vào thư mục làm việc (working directory) mà không xóa stash đó. Điều này hữu ích để tiếp tục công việc từ các thay đổi đã stash trước đó, đồng thời vẫn giữ stash cho việc sử dụng hoặc tham chiếu sau này.

Cú pháp:

git stash apply

Ví dụ:

git stash apply

Lệnh này áp dụng stash mới nhất vào thư mục làm việc, nhưng không loại bỏ stash khỏi danh sách stash.


Applying a Specific Stash

Áp dụng một stash cụ thể

Việc áp dụng một stash cụ thể trong Git sẽ khôi phục các thay đổi từ một stash xác định vào thư mục làm việc, cho phép tiếp tục đúng vị trí công việc đã dừng lại. Điều này đặc biệt hữu ích khi tồn tại nhiều stash và chỉ cần áp dụng một tập thay đổi cụ thể mà không ảnh hưởng đến các stash khác.

Cú pháp:

git stash apply stash@{index}

Ví dụ:

git stash apply stash@{0}

Lệnh này thay thế {index} bằng mã định danh của stash cụ thể trong danh sách stash.


Popping a Stash

Pop stash (áp dụng và xóa stash)

Lệnh pop stash trong Git sẽ khôi phục các thay đổi đã lưu từ một stash vào thư mục làm việc đồng thời xóa stash đó khỏi danh sách stash. Điều này hữu ích khi muốn tiếp tục làm việc với các thay đổi đã stash và giữ danh sách stash gọn gàng, sạch sẽ.

Cú pháp:

git stash pop

Ví dụ:

git stash pop

Lệnh này áp dụng stash mới nhất vào thư mục làm việc và xóa stash đó khỏi danh sách.


Dropping a Stash

Xóa một stash

Việc xóa (drop) một stash trong Git sẽ xóa vĩnh viễn một stash cụ thể khỏi danh sách stash mà không áp dụng các thay đổi của stash đó. Điều này hữu ích khi dọn dẹp các stash đã lỗi thời hoặc không còn cần thiết, đảm bảo chỉ giữ lại các stash liên quan trong repository.

Cú pháp:

git stash drop stash@{index}

Ví dụ:

git stash drop stash@{0}

Lệnh này xóa một stash cụ thể khỏi danh sách stash.


Clearing All Stashes

Xóa toàn bộ stash

Việc xóa toàn bộ stash trong Git sẽ xóa vĩnh viễn tất cả các stash khỏi repository. Điều này hữu ích khi dọn dẹp danh sách stash sau khi tất cả các thay đổi đã được áp dụng hoặc không còn cần thiết, giúp duy trì môi trường dự án gọn gàng và không bị lộn xộn.

Cú pháp:

git stash clear

Ví dụ:

git stash clear

Lệnh này xóa toàn bộ stash khỏi danh sách stash.


Forking and Feature Branches

Forking và Feature Branch

Hãy cùng thảo luận về forking và feature branch.


Forking

Fork là gì?

Forking là một khái niệm nền tảng trong Git, đặc biệt khi làm việc với các dự án mã nguồn mở hoặc cộng tác giữa nhiều nhóm khác nhau. Fork về bản chất là một bản sao cá nhân của một repository, được lưu trữ trên một máy chủ từ xa như GitHub hoặc GitLab.

Khi bạn fork một repository, bạn tạo ra một phiên bản riêng của dự án đó dưới tài khoản của mình, cho phép bạn tự do thử nghiệm các thay đổi mà không ảnh hưởng đến repository gốc.


Key Benefits of Forking

Lợi ích chính của Forking

Forking giúp việc quản lý thay đổi và cộng tác trong dự án trở nên dễ dàng hơn.

Isolation of Changes – Cô lập thay đổi
Forking cho phép bạn tách công việc của mình khỏi dự án gốc. Điều này đặc biệt hữu ích khi bạn muốn đề xuất các thay đổi lớn hoặc thử nghiệm các tính năng mới mà không làm ảnh hưởng đến sự ổn định của dự án chính.

Collaborative Development – Phát triển cộng tác
Forking hỗ trợ cộng tác, vì mỗi người cộng tác có thể làm việc trên fork của riêng mình và sau đó đề xuất các thay đổi quay lại repository gốc thông qua pull request.

Ownership and Control – Quyền sở hữu và kiểm soát
Khi người dùng fork một repository, họ có toàn quyền kiểm soát fork đó, bao gồm việc đẩy (push) thay đổi, tạo branch và quản lý repository theo nhu cầu của riêng mình.


Feature Branches

Nhánh tính năng

Feature branch là một công cụ mạnh mẽ để quản lý công việc trên các tính năng hoặc sửa lỗi cụ thể trong một dự án Git. Feature branch là một nhánh riêng được tạo ra từ nhánh main (hoặc master), nơi lập trình viên có thể tập trung phát triển một tính năng hoặc tác vụ cụ thể.

Khi công việc trên feature branch hoàn tất, nhánh này có thể được merge trở lại nhánh main.


Key Benefits of Feature Branches

Lợi ích chính của Feature Branch

Feature branch giúp các nhóm làm việc có tổ chức và hiệu quả hơn khi xử lý các tác vụ cụ thể.

[ảnh minh họa]

Focused Development – Phát triển tập trung
Feature branch cho phép lập trình viên tập trung vào một tác vụ hoặc tính năng duy nhất, giữ cho công việc được tổ chức và tách biệt khỏi các hoạt động phát triển khác trong dự án.

Parallel Development – Phát triển song song
Nhiều feature branch có thể được tạo và làm việc đồng thời, cho phép các nhóm phát triển nhiều tính năng song song mà không gây xung đột.

Easy Integration – Dễ dàng tích hợp
Khi một tính năng hoàn thành và đã được kiểm thử, feature branch có thể dễ dàng merge trở lại nhánh main, đảm bảo chỉ những công việc ổn định và hoàn chỉnh mới được tích hợp vào dự án.

Better Collaboration – Cộng tác tốt hơn
Feature branch giúp việc cộng tác trở nên dễ dàng hơn vì mỗi lập trình viên có thể làm việc trên branch riêng mà không làm gián đoạn công việc của người khác. Điều này cũng đơn giản hóa quá trình review code vì các thay đổi được cô lập trong từng branch cụ thể.


Ví dụ thực hành với README.md

Giả sử chúng ta có một file tên là README.md trong repository và nhiệm vụ là thêm một section mới vào file này.


Steps to Make Changes in Your Branch

Các bước thực hiện thay đổi trong branch của bạn

1. Check out the Feature Branch

Chuyển sang feature branch.

Cú pháp:

git checkout -b featurebranch

Lưu ý: Thay featurebranch bằng tên branch thực tế của bạn.


2. Open the README.md File

Mở file README.md bằng bất kỳ trình soạn thảo văn bản nào (ví dụ: Notepad hoặc VS Code).

Cú pháp:

notepad README.md

3. Edit the File

Trong file README.md, thêm nội dung sau vào cuối file:

## New Feature: Enhanced Documentation

This section provides an overview of the new features added to the project.

It includes updates and enhancements to the existing documentation.

4. Save and Close the File

Lưu các thay đổi và đóng trình soạn thảo sau khi thêm nội dung.


5. Stage the Changes

Sau khi thực hiện thay đổi, đưa file đã chỉnh sửa vào staging area.

Cú pháp:

git add README.md

6. Commit the Changes

Commit các thay đổi với thông điệp commit phù hợp.

Cú pháp:

git commit -m "Added a new section for enhanced documentation in README.md"

7. Push the Changes to the Remote Repository

Đẩy các thay đổi lên feature branch trên GitHub.

Cú pháp:

git push origin featurebranch

Bài viết liên quan:

Phân nhánh, Gộp nhánh và Giải quyết xung đột
Các lệnh Git cơ bản và Quản lý Commit
Giới thiệu về Hệ thống Quản lý Phiên bản (VCS), Git và GitHub
DCL Trong MySQL – Quản Lý Quyền Truy Cập Với GRANT và REVOKE
Biến và kiểu dữ liện trong Dart
Giới Thiệu Về Ngôn Ngữ Lập Trình Dart Cơ Bản
Event trong Component
Các hàm làm việc với number và các hàm toán học trong PHP

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

Các lệnh và thao tác Git nâng cao

Phân nhánh, Gộp nhánh và Giải quyết xung đột

Các lệnh Git cơ bản và Quản lý Commit

Giới thiệu về Hệ thống Quản lý Phiên bản (VCS), Git và GitHub

Con trỏ trong C (Pointers)

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×