Git 的核心概念

在使用 Git 之前,理解几个核心概念能让你更好地理解它的工作方式:

  • 仓库 (Repository / Repo):你的项目文件及其所有历史记录的集合。可以存在于本地(本地仓库)或远程服务器(远程仓库,如 GitHub)。
  • 工作区 (Working Directory):你当前正在进行修改的文件。
  • 暂存区 (Staging Area / Index):一个介于工作区和本地仓库之间的区域。你将要提交的修改会先放到这里。
  • 提交 (Commit):将暂存区的修改永久保存到本地仓库。每次提交都代表项目历史的一个快照。
  • 分支 (Branch):独立的代码开发线。你可以在不影响主线代码的情况下进行新功能开发或 bug 修复。
  • 主分支 (Main / Master Branch):项目的主开发分支,通常包含稳定的、可发布的代码。
  • 远程 (Remote):通常指远程仓库,例如 GitHub 上的仓库。
  • HEAD:指向当前所在分支的最新提交。

Git 的基本工作流程

一个典型的 Git 工作流程如下:

  1. 初始化仓库或克隆远程仓库:开始一个新项目或从现有项目入手。
  2. 修改文件:在工作区对文件进行增、删、改。
  3. 暂存修改:将你想要提交的修改添加到暂存区。
  4. 提交修改:将暂存区的修改保存到本地仓库,并附带一条描述信息。
  5. 推送到远程仓库(可选):将本地的提交同步到远程仓库,与团队成员共享。
  6. 拉取远程更新(可选):从远程仓库获取最新的修改并合并到本地。

Git 常用命令详解

下面是一些最常用的 Git 命令及其用途:

1. 设置 Git 用户信息

首次使用 Git 时,你需要配置你的用户名和邮箱,这些信息会记录在你的提交中。

Bash

git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

2. 初始化或克隆仓库

  • 初始化新仓库:在一个空文件夹中启动一个新的 Git 仓库。

    Bash

    cd my-project # 进入你的项目目录
    git init      # 初始化一个空的Git仓库
    
  • 克隆远程仓库:从远程服务器(如 GitHub)复制一个现有仓库到本地。

    Bash

    git clone [远程仓库URL]
    # 示例: git clone https://github.com/username/repo-name.git
    

3. 查看仓库状态

  • git status:显示工作区和暂存区的状态,告诉你哪些文件已修改、哪些已暂存、哪些未被跟踪等。

    Bash

    git status
    

4. 添加文件到暂存区

  • git add [文件名]:将指定文件添加到暂存区。

    Bash

    git add index.html
    
  • git add .:将所有修改过(包括新增、修改、删除)的文件添加到暂存区。

    Bash

    git add .
    

5. 提交修改

  • git commit -m "提交信息":将暂存区的内容提交到本地仓库,并附带一条简明的提交信息。

    Bash

    git commit -m "Add initial homepage content"
    

6. 查看提交历史

  • git log:显示所有提交历史,包括提交哈希、作者、日期和提交信息。

    Bash

    git log
    
  • git log --oneline:以简洁的一行显示提交历史。

    Bash

    git log --oneline
    

7. 分支管理

  • git branch:列出所有本地分支。

    Bash

    git branch
    
  • git branch [分支名]:创建新分支。

    Bash

    git branch feature-x
    
  • git checkout [分支名]:切换到指定分支。

    Bash

    git checkout feature-x
    
  • git checkout -b [新分支名]:创建并立即切换到新分支(相当于 git branch [新分支名]git checkout [新分支名] 的组合)。

    Bash

    git checkout -b new-feature
    
  • git merge [源分支名]:将源分支的修改合并到当前分支。

    Bash

    git checkout main      # 切换到主分支
    git merge feature-x    # 将 feature-x 分支的修改合并到 main
    
  • git branch -d [分支名]:删除指定分支(只有在合并后才能删除)。

    Bash

    git branch -d feature-x
    

8. 远程仓库操作

  • git remote -v:查看已配置的远程仓库。

    Bash

    git remote -v
    
  • git push [远程仓库名] [本地分支名]:将本地的提交推送到远程仓库。

    Bash

    git push origin main # 将本地的 main 分支推送到名为 origin 的远程仓库
    
  • git pull [远程仓库名] [远程分支名]:从远程仓库拉取最新的修改并合并到当前本地分支。

    Bash

    git pull origin main # 从名为 origin 的远程仓库拉取 main 分支的修改
    

9. 撤销操作

Git 提供了多种撤销方式,但使用时需要谨慎,特别是涉及已推送到远程的提交。

  • git reset [文件名]:将文件从暂存区移回工作区(取消暂存)。

    Bash

    git reset index.html
    
  • git reset --hard HEAD危险操作! 彻底丢弃所有未提交的修改,将工作区和暂存区回退到最近一次提交的状态。谨慎使用,因为它会丢失你的工作。

    Bash

    git reset --hard HEAD
    
  • git revert [提交哈希]:创建一个新的提交来撤销指定提交的更改。这是一种更安全的撤销方式,因为它不会改写历史,适合在共享分支上使用。

    Bash

    git revert abc1234 # 撤销哈希为 abc1234 的提交
    

.gitignore 文件

在你的项目根目录下创建一个名为 .gitignore 的文件,可以在其中指定 Git 应该忽略的文件或目录,避免将它们添加到版本控制中。这对于编译生成的文件、日志文件、敏感配置等非常有用。

示例 .gitignore 文件:

# 忽略所有 .log 文件
*.log

# 忽略 node_modules 目录
node_modules/

# 忽略特定文件
.env

Git 工作流建议

  • 特性分支工作流 (Feature Branch Workflow)
    • main (或 master) 分支保持稳定。
    • 为每个新功能或 bug 修复创建一个新的特性分支。
    • 在特性分支上开发和提交。
    • 完成后,将特性分支合并回 main 分支。
    • 合并后删除特性分支。
  • 提交频率
    • 经常提交,每次提交只包含一个逻辑上的完整修改。
    • 提交信息要清晰、有意义,描述本次提交做了什么。
  • 拉取更新
    • 在开始工作前和推送前,习惯性地 git pull 以获取最新代码,避免冲突。