Git Common Commands Quick Reference: A Collection for Beginners

This quick reference is a beginner's guide to Git, covering the following core content: basic configuration (`git config --global user.name/email` to set identity, `git init` to initialize a repository); workspace and staging area operations (`git status` to check status, `git add [file/.]` to stage changes, `git commit -m "description"` to commit); branch operations (`git branch` to create, `git checkout -b` to create and switch, `git merge` to merge, `git branch` to list branches); remote repository (`git remote add origin [URL]` to associate, `git pull` to fetch and merge, `git push -u origin [branch]` to push); undo and recovery (`git reset HEAD` to unstage, `reset --soft/hard` to roll back, `checkout -- [file]` to discard modifications, `git stash` to save changes); viewing history (`git log --oneline` for simplified output); and common issues (manual resolution of conflicts by editing files followed by `add+commit`, and `stash` for incomplete work). The core is the basic workflow of `add→commit`, while branch and remote operations are key for collaboration, requiring practice to master.

Read More
Git Repository Size Optimization: Techniques for Cleaning Large Files and History

The main reasons for a growing Git repository are committing large files (e.g., logs, videos), leftover large files in historical records, and unoptimized submodules. This leads to slow cloning/downloads, time-consuming backup transfers, and local operation lag. Cleanup methods: For recently committed but un-pushed large files, use `git rm --cached` to remove cached files, then re-commit and push. For large files in historical records, rewrite history with `git filter-repo` (install the tool, filter large files, and force push updates). After cleanup, verify with `git rev-list` to check for omissions. Ultimate solution: Batch cleanup can use `--path-glob` to match files. Large submodule files require prior cleanup before updating. Long-term optimization recommends Git LFS for managing large files (track large file types after installation to avoid direct commits). Always back up the repository before operations. Use force pushes cautiously in collaborative environments; ensure team confirmation before execution. Develop the habit of committing small files and using LFS for large files to keep the repository streamlined long-term.

Read More
Git Submodule Update: Methods to Keep Dependencies in Sync

Git submodules are used to address the trouble of code reuse and avoid repeated pasting. The main repository only records the version and location of the sub-repositories, while the sub-repositories store the actual code. Their uses include team sharing of components, version control of third-party dependencies, and code isolation. Usage steps: To clone a repository with nested submodules, use `git clone --recursive`. To initialize and update submodules, use `git submodule update --init --recursive` (to recursively update nested submodules). To update submodules and pull the latest versions, execute `git submodule update --recursive`. After modifying a submodule, first commit within the submodule, then return to the main project, execute `git add <submodule directory>` and `git commit` to update the main project's reference. After pulling updates to the main project, synchronize the submodules. Common issues: If the directory is empty, initialize it. If the version is incorrect, perform a recursive update. If changes were made without syncing the main project, add and commit the reference. Submodules are like Lego parts—independent and reusable. The key points to remember are "clone with --recursive, update and sync with --recursive, and sync references after modifications."

Read More
Summary of Git Undo Operations: Differences Between reset, revert, and restore

Git provides three undo tools: `reset`, `revert`, and `restore`. They have similar functions but different scenarios, so you need to choose based on the situation: - **git reset**: Adjusts the branch pointer and discards partial commits. There are three modes: `--mixed` (default, reverts the pointer and staging area, preserves the working directory), `--soft` (only reverts the pointer, preserves changes), and `--hard` (complete rollback, most dangerous). It is suitable for quick rollbacks of local unpushed changes. `--hard` is strictly prohibited for already pushed branches. - **git revert**: Creates a new commit to reverse the changes, preserving the original history. It has a simple syntax (e.g., `git revert HEAD~1`). It safely rolls back pushed branches without destroying the team's history. - **git restore**: Precisely restores files without affecting the branch. It can undo staging (`git restore --staged <file>`) or restore a single file to a historical version (`git restore --source=HEAD~1 <file>`). It replaces the old `git checkout --` and has a clearer semantic meaning. **Differences**: `reset` adjusts the branch pointer (risky), `revert` adds undo commits (safe), and `restore` restores individual files (precise). Decision mnemonic: For local unpushed changes... (Note: The original Chinese ends with "决策口诀:本地未推用" which is incomplete; the translation assumes the intended context of "For local unpushed changes, use...".)

Read More
Git Commit Message Template: Standardizing Team Collaboration Submission Norms

### Why Unified Commit Specification is Needed? A unified commit specification addresses issues like difficult code reviews, chaotic version iterations, and failed automation tools. It ensures clarity on the purpose and content of each change, facilitating team collaboration. ### Specification Format (Conventional Commits) - **Type** (Required): E.g., `feat` (new feature), `fix` (bug fix), `docs` (documentation). Incorrect types mislead version management. - **Description** (Required): Concise (≤50 characters), verb-starting (e.g., "optimize", "fix"), avoiding ambiguity. - **Body** (Optional): After a blank line, detail the reason for the change, implementation details, or problem-solving process. - **Footer** (Optional): Link to issues (e.g., `Closes #123`) or note breaking changes. ### How to Create a Commit Template? - **Global Template**: Create `.gitmessage` in the user’s root directory and configure Git with `git config --global commit.template ~/.gitmessage`. - **Project-level Template**: Create `.gitmessage` in the project root and run `git config commit.template .gitmessage`. ### Tool Assistance for Enforcing the Specification - **Commit

Read More
Git Remote Repository Migration: A Practical Guide to Migrating from SVN to Git

### Why Migrate: SVN, as a centralized tool, has limitations (requires network for commits, inflexible branch management, frequent conflicts). Git, a distributed version control system, supports local repositories, parallel multi-branching, and offline operations, improving team collaboration efficiency. ### Preparation: Install Git, SVN, and `svn2git` (via RubyGems, requires Ruby environment); create an empty Git repository on platforms like GitHub/GitLab; configure Git identity (`user.name` and `user.email`). ### Migration Steps (Taking GitHub as an Example): 1. **Export SVN History**: Use `svn2git` to convert, specifying the SVN repository URL and branch/tag paths (e.g., `--trunk=trunk --branches=branches --tags=tags`). An `authors.txt` file can map SVN authors to Git users. 2. **Push to Remote**: Navigate to the generated Git repository, link the remote address, then push all branches (`git push -u origin --all`) and tags (`git push -u origin --tags`). 3. **Verify Results**: Check branch lists, commit history, and file integrity. ### Common Issues:

Read More
Git Repository Permission Management: How to Set Access Permissions for Team Members

Git repository permission management serves as the "access control system" for team collaboration, with the core goal of ensuring code security and preventing unauthorized modifications or leaks, while adhering to the principle of least privilege (allocating only the necessary permissions). Common permission categories include: Read (read-only access, suitable for new team members or documentation authors), Write (ability to commit code, for regular developers), and Admin (highest privileges, for project leads). Taking GitHub as an example, the setup steps are as follows: Navigate to the repository → Settings → Manage access → Add collaborator to assign permissions (select Write for regular members, Read for those needing only access, and Admin for project leads). For advanced management, branch protection rules can be configured (e.g., requiring PR reviews and CI tests before merging). Guidelines: Avoid overuse of high-privilege accounts, regularly revoke access for departing members, and use team groups for batch permission management. The core principle is to clarify responsibilities, apply the least privilege, and enforce branch protection, ensuring permissions are "just sufficient."

Read More
Git and Code Review: Complete Process and Guidelines for Pull Requests

The article focuses on the key roles of Git and Pull Requests (PRs) in team collaborative development. Git enables version management through branches (parallel development), commits (saving code snapshots), and pushes (sharing code). As a collaboration bridge, the PR process includes: synchronizing the main branch to ensure the latest code, creating a PR after pushing the branch (with clear descriptions of the modification purpose, test results, etc.), waiting for code review (identifying issues and ensuring quality), and merging and cleaning up. Key specifications: making small, incremental commits to avoid large PRs, having clear commit messages, timely communication of feedback, and respecting review comments. Git and PRs facilitate efficient collaboration, improving code quality and team efficiency.

Read More
Git Branch Renaming: Steps to Safely Modify Local and Remote Branch Names

### Guide to Renaming Git Branches Renaming branches is necessary to improve code structure clarity due to early naming inconsistencies, collaboration requirements, or logical adjustments. Ensure no uncommitted changes exist locally (`git status` for verification) and notify the team to avoid conflicts before proceeding. **Renaming a Local Branch**: Execute `git branch -m old_branch_name new_branch_name`, e.g., `git branch -m dev_old dev`. Verify with `git branch`. **Renaming a Remote Branch**: Since Git does not support direct renaming, follow these steps: ① Delete the remote old branch (`git push origin --delete old_branch_name`; irreversible, confirm content first); ② Push the local new branch (`git push origin new_branch_name`); ③ Optionally set upstream tracking (`git branch --set-upstream-to origin/new_branch_name`). Verification: Check remote branches with `git branch -r` and switch to test the new branch. **Notes**: Synchronize with the team when working collaboratively, rename after merging, and back up remote branches before deletion.

Read More
Git Version Control Basics: Core Differences Between Distributed and Centralized Systems

Version control is a core tool for managing code changes in software development, addressing issues such as multi-person collaboration and version rollback. This article compares centralized and distributed version control: Centralized version control systems (e.g., SVN) rely on a central repository, where all code must be uploaded and downloaded through a central server. They depend on network connectivity, have weak offline capabilities, and often lead to file conflicts when multiple users modify the same file simultaneously, which require manual resolution. In distributed version control systems (e.g., Git), each developer maintains a complete local repository, while the central server merely acts as a data synchronization hub. Git supports robust offline operations, enabling local commits and branching. It facilitates flexible collaboration, with conflicts marked by the system for autonomous merging, and ensures high data security due to multiple local backups. Key differences: Centralized systems depend on a central repository, whereas distributed systems feature local independence; centralized systems are constrained by network connectivity, while distributed systems allow seamless offline work; centralized collaboration requires central coordination, whereas distributed systems offer greater flexibility. As a mainstream distributed tool, Git excels with its local repository, offline functionality, and flexible collaboration, making it a standard in development. Beginners should master its basic operations.

Read More
Git Submodules: The Proper Way to Incorporate Third-Party Code into Your Project

Git submodules are used to address issues such as version control loss, collaborative chaos, and code redundancy when a parent project reuses third-party code. The core idea is to embed an independent sub-repository within the parent project, which only records the location and version information of the submodule, facilitating independent tracking of updates. Basic usage: After initializing the parent project, use `git submodule add` to add a third-party repository as a submodule (generating the `.gitmodules` file to record configurations). When cloning a parent project containing submodules, use `--recursive` or manually execute `git submodule update` to pull the submodule code. Submodules can be modified and updated independently, while the parent project needs to commit new references to the submodule to synchronize versions. Note: Submodules do not update automatically; you need to manually enter the submodule directory, execute `git pull`, and then commit the parent project. For multi-person collaboration, `.gitmodules` and submodule versions must be shared to ensure consistent paths and versions. Submodules differ from subtree merging, where the former is maintained independently, while the latter merges code into the parent project.

Read More
Git stash: Scenarios and Operations for Temporarily Saving Uncommitted Code

Git stash is used to temporarily save uncommitted work progress, solving code management issues when switching branches or handling other tasks. Common scenarios include when an urgent repair for an online bug is needed during development, or when temporarily dealing with a simple task, allowing the current modifications to be safely saved. Core operations: Use `git stash save "message"` to save uncommitted changes; use `git stash list` to view the list of saved stashes; use `git stash pop` (restore and delete) or `git stash apply` (restore and keep) to restore the most recent stash; use `git stash drop` to delete a specific stash, and `git stash clear` to delete all stashes. The `-u` parameter can save untracked files. Note: Stash does not save untracked files; for long-term work progress, it is recommended to use `git commit` to avoid relying on stash. Mastering these operations allows flexible management of the development process and ensures code safety.

Read More
Git Commit Message Specification: Enhancing Team Collaboration Efficiency

In daily development, standardized Git commit messages are crucial for team collaboration and issue tracking, as non-standardized messages can lead to version history chaos. The current mainstream specification is Conventional Commits, with the following structure: mandatory type (e.g., `feat` for new features, `fix` for bug fixes, `docs` for documentation), optional scope (limiting module scope, e.g., `user module`), brief description (core content), optional body (detailed explanation), and optional footer (linking to issues or indicating breaking changes). Tools can help develop this habit: `commitizen` (interactive tool) or `commitlint + husky` (automatic pre-commit checks). The benefits of standardization include improved collaboration efficiency, automated version log generation, clear issue tracking, and early warning of breaking changes, making it worthwhile for teams to adopt.

Read More
Git Quick Start: Master Basic Operations in 30 Minutes

Git is a distributed version control system (VCS) used to record file modification history, enabling team collaboration and personal history回溯 (retrospection). Its core advantages include version rollback (to prevent accidental modifications), multi - person collaboration (code merging), and local security management (operations first local, then cloud - based). Basic concepts are metaphorized by "areas": Working Directory (drafts), Staging Area (items to be committed), Local Repository (file cabinet), and Remote Repository (cloud - based shared library). Basic operations are divided into five steps: 1. Initialize the repository (`git init`); 2. Configure user information (`config`); 3. Track and commit changes (`status` to check status, `add` to stage, `commit` to save); 4. Version management (`log` to view history, `reset` to roll back); 5. Branch operations (`checkout - b` to create a branch, `merge` to combine branches); 6. Remote repository operations (`clone`, `push`, `pull`). The core principles are "timely commits, branch management, and version rollback", with a key command chain: `init→add→commit→log/reset→branch→push/pull`. Basic operations can be mastered in 30 minutes. For common issues like modifying commit messages, use `--amend`.

Read More
Git Ignore Files: Other Exclusion Methods Besides .gitignore

Git, besides `.gitignore`, offers multiple ways to ignore files for different scenarios. `.git/info/exclude` is only for the local repository and its rules are not shared; directly add ignore rules here (e.g., personal IDE configurations). `git update-index --assume-unchanged` is used for tracked files to prevent Git from checking modifications (e.g., local configuration files). `--skip-worktree` is stricter, prohibiting Git from tracking sensitive files (e.g., passwords). `git rm --cached` can remove a tracked file from the repository while keeping it locally. Selection guide: Use `.gitignore` for daily general rules to share them, use `.git/info/exclude` for local personal needs, apply the above two for ignoring already tracked files, and use `git rm --cached` to remove files. Mastering these allows flexible management of the tracking scope, avoiding repository bloat or information leakage.

Read More
Git Repository Backup: A Comprehensive Plan for Regular Backups and Restorations

Git repository backup is crucial for ensuring code security, as it encompasses code, historical records, and branch information. Local corruption, accidental deletion by remote users, or platform failures can all lead to code loss, making regular backups essential. The core principles include multiple backups (local + remote), regular execution, and verification of recovery. For local backups: Copy the repository folder (using `cp -r` for Linux/Mac and direct copying for Windows), with regular updates. For remote backups: Utilize multi-platform backup strategies (e.g., associating two remote addresses) and export using `git bundle` to mitigate platform-specific risks. Automated backups are more reliable: Use `crontab` for Linux/Mac to schedule scripts, and Task Scheduler for Windows. In case of recovery, local corruption can be addressed by overwriting with backups, while remote corruption can be resolved by cloning or using `bundle` files. Key considerations: Separate backup paths, retain the `.git` directory, and conduct regular recovery tests. Adopting the habit of "regular local copying + multi-platform remote backups" ensures code security.

Read More
Git Log Viewing: log Command Parameters and Commit History Analysis

This article introduces the importance and usage of Git logs. Viewing Git logs allows you to understand commit records (who, when, and what was modified), project iteration trajectories, and also helps in locating issues. The basic command `git log` displays commit IDs, authors, times, and commit messages. Common parameters include: `--oneline` for simplified display, showing one commit per line; `-p` to display code differences (diff); `-n` to limit the number of commits (e.g., `-n 3`); `--graph` for graphical representation of branch merges; `--author` to filter by author, `--since`/`--before` to filter by time range; and `--color` for colored output. When analyzing logs, you can quickly pinpoint issues and understand branch logic. Clear commit messages (e.g., "Fix login button") can enhance collaboration efficiency. Mastering these parameters is key to efficient version control.

Read More
Detailed Explanation of Git Workflow: Complete Process from Feature Branches to Main Branch

Git workflow serves as the "traffic rules" for team collaboration, stipulating code submission, merging, and version management rules to ensure orderly collaboration. A simplified Git Flow strategy is recommended: the main branch (`main`) stores stable deployable code, feature branches (e.g., `feature/xxx`) are developed independently, and merged into the main branch after completion and testing. Essential basic commands include cloning, creating a branch (`git checkout -b`), staging (`git add .`), committing (`git commit`), pulling (`git pull`), merging (`git merge`), and pushing (`git push`). Taking the development of the login feature as an example, the complete workflow steps are: 1. Ensure the main branch (`main`) is up-to-date (`git checkout main` + `git pull`); 2. Create a feature branch (`git checkout -b feature/login`); 3. After development, commit (`git status` + `add` + `commit`); 4. Synchronize with main branch updates (pull main branch and merge); 5. Push the feature branch to the remote; 6. Merge into the main branch (via PR if applicable) and clean up the branch. When conflicts occur, manually edit the conflict file (remove `<<<<<<<`

Read More
详解 Git 重置(Reset)操作:硬重置、软重置与混合重置 详解 Git Reset Operations: Hard, Soft, and Mixed Resets

In Git, "Reset" is used to undo or modify commit history by adjusting branch pointers and the state of the working directory/staging area. Beginners often make mistakes due to confusion about the different types. The following outlines the three common types and their core distinctions: **Soft Reset (--soft)** Only moves the HEAD pointer while preserving the working directory and staging area. Useful for modifying commit messages or re-staging changes for re-commit (e.g., `git reset --soft HEAD~1`). **Mixed Reset (default --mixed)** Moves the HEAD and resets the staging area, but retains the working directory. Ideal for undoing commits and reorganizing changes before re-committing (no parameters needed by default). **Hard Reset (--hard)** Moves the HEAD and completely resets the staging area and working directory, permanently discarding all modifications. Use only when certain changes are unnecessary (e.g., `git reset --hard HEAD~1`), as this operation is irreversible. **Key Distinctions**: - Reset modifies local commit history (suitable for unshared changes). - Revert creates new commits (use when changes have been pushed). - Hard reset requires caution: always confirm status with `git status` before use. Unbacked-up changes can sometimes be recovered via `reflog` (only applicable for unshared local commits). **Summary**: - Soft reset is lightweight for modifying history. - Mixed reset is the default and most commonly used. - Hard reset is dangerous and requires careful verification.

Read More
Synchronizing Git Remote Branches: How to Pull the Latest Remote Branches and Update Local Repository

In a Git project with multi - person collaboration, syncing remote branches is to ensure that the local code is in line with the latest progress of the remote repository and avoid conflicts or missing new features. The core steps are as follows: First, ensure that the local repository is connected to the remote. Use `git remote -v` to check. If not connected, add it with `git remote add origin <address>`. Then check the branch status: remote branches with `git branch -r` and local branches with `git branch`. There are two methods to pull updates: Method 1 is `git pull` (the most commonly used), which directly pulls and merges the remote branch into the current branch. The steps are: switch to the target branch (e.g., `git checkout dev`), then execute `git pull origin dev`; Method 2 is `git fetch` + `merge`, first pull the updates (`git fetch origin dev`), then merge (`git merge origin/dev`), which is suitable for scenarios where you need to confirm the update content. If there is a conflict during pulling, Git will mark the conflicted files (such as `<<<<<<< HEAD` and others). You need to manually edit the files to delete the markers, then use `git add <file>` and `git commit` to resolve the conflict. Common issues: When there are uncommitted modifications causing conflicts, use `git stash` to temporarily store the changes before pulling; when there is no remote branch locally, use `

Read More
Git Version Comparison: Practical Tips for Viewing Code Changes with the diff Command

The `git diff` command in Git is used to view code changes between versions, a fundamental and practical tool. It can compare differences between the working directory and the staging area, the staging area and historical commits, historical versions, and different branches. Core scenarios and corresponding commands are as follows: `git diff <filename>` for comparing the working directory with the staging area; `git diff --staged` for comparing the staging area with historical commits; `git diff <hash1> <hash2>` for comparing historical versions; and `git diff <branch1> <branch2>` for comparing different branches. Useful parameters include: `-w` to ignore whitespace changes, `--name-only` to only display filenames, `--stat` to show line modification statistics, and `--binary` to compare binary files. In the output, `+` indicates added content and `-` indicates deleted content. Mastering `diff` enables efficient management of code changes and helps avoid accidental commits.

Read More
A Guide to Git Submodules: Managing Dependent Code in Projects

Git submodules are tools for reusing independent code (such as common libraries) in large projects, solving problems like duplicate copying and version synchronization. Core advantages include: space savings through code reuse, independent maintenance for easy modification and submission, and version specification by the main project to ensure consistency. Essentially, submodules are independent Git repositories, with the main project recording configurations and version references via .gitmodules and .git/config. Core usage steps: Add submodules to the main project using `git submodule add`; clone projects with submodules using `--recursive`, otherwise use `init+update`; commit main project references after modifying submodules; update with `git submodule update`; clean configurations when deleting submodules. Common issues: Empty repositories after cloning (supplement with `--recursive` or `update`), unupdated main project after submodule modifications (supplement with commits), version conflicts (agree on branches). Summary: Suitable for independently reusable dependencies, following the process: add → clone/update → modify and commit → update main project references, improving maintenance efficiency.

Read More
Git and CI/CD: Implementing Automated Deployment and Testing with Git

This article introduces the core concepts of Git and CI/CD and their combined application. Git is a version control tool, like a "code diary," which records modifications, manages collaboration, and avoids conflicts and version chaos. CI/CD (Continuous Integration/Continuous Delivery/Deployment) replaces manual processes with automation, enabling automatic testing and deployment after code submission to improve efficiency. The combination of the two is a "golden partnership": developers commit code to a Git repository, and CI/CD tools automatically trigger processes such as testing, building, and deployment (e.g., deploying a frontend project to Netlify using GitHub Actions). The combined advantages are significant: reducing errors (through automated testing), accelerating iteration (completing the entire process in minutes), lowering costs (reducing manual labor), and facilitating traceability (enabling checks on deployment sources). Git lays the foundation for version management, while CI/CD enables process automation. Their combination transforms development from manual to smooth, making it an essential skill in modern development.

Read More
Git Common Commands Quick Reference: Remember These 10 Commands, Git Operations Will Be Easy

This article introduces 10 core and commonly used Git commands to help beginners quickly master basic operations. The core commands cover the complete workflow from initialization to collaboration: - **Initialization/Clone**: `git init` initializes a local repository, and `git clone` copies code from a remote repository; - **Modify and Commit**: `git add` stages changes (use `.` for a single file or entire directory), and `git commit -m "message"` commits to the local repository (with clear commit messages); - **Status and History**: `git status` checks repository status, and `git log` views commit history (`--oneline` for a concise format); - **Branch Management**: `git checkout -b branch-name` creates and switches to a branch, and `git merge branch-name` merges branches (note conflict handling); - **Collaboration Operations**: `git pull` fetches and merges remote code, and `git push origin branch-name` pushes a local branch to the remote. The core workflow is: Initialize/Clone → Stage modifications (add) → Commit → Branch management → Collaboration (pull/push). Beginners can gradually become proficient through practice, reducing version management chaos.

Read More
Git Repository Cleanup: Methods to Delete Unused Local and Remote Branches

The article introduces the necessity, steps, and precautions for cleaning up useless Git branches. Necessity: reducing repository clutter, lowering the risk of accidental deletion, and saving storage space. Before cleaning, confirm permissions, check branch status (whether merged), and back up important branches. For local deletion: First, list branches with `git branch --merged main_branch` to filter merged branches. After confirmation, delete merged branches with `git branch -d branch_name`, and use `-D` for unmerged branches (high risk). For remote deletion: Directly delete remote branches with `git push origin --delete branch_name`, or use `git fetch -p` to clean up locally tracked remote obsolete branches. Advanced tips: Batch delete merged branches locally using `git branch --merged master | grep -v '^\*\|master\|main' | xargs git branch -d`, and similar looping commands for remote branches. Precautions: Confirm if branches are in use by others, avoid deleting unmerged branches by mistake, and note that recovery is difficult after deletion. When regularly cleaning, confirm status first to ensure safety and efficiency.

Read More