Git Bash 中 Git 命令的实用主义指南

发布于:2025-09-08 ⋅ 阅读:(24) ⋅ 点赞:(0)

<摘要>
本指南从纯粹实用的角度,系统解析了 Git Bash 中 Git 命令的核心使用场景与方法。内容围绕开发工作流展开:从初始配置 (git config)、仓库初始化与克隆 (git init, git clone),到日常的修改、暂存与提交循环 (git status, git add, git commit, git diff)。重点阐述了分支管理 (git branch, git switch, git checkout) 与合并策略 (git merge, git rebase) 的应用与选择。详细说明了与远程仓库协作的关键命令 (git remote, git push, git fetch, git pull)。提供了多种撤销更改的策略 (git restore, git reset, git revert),并强调了安全操作的重要性。最后,介绍了一些实用技巧,如临时储藏工作 (git stash) 和配置忽略文件 (.gitignore)。全文旨在作为一份即查即用的手册,帮助开发者高效、安全地使用 Git 进行版本控制和团队协作。

解析:Git Bash 中 Git 命令的实用主义指南

本解析旨在成为一份即查即用的手册,我们将命令按照开发工作流进行分类,并通过场景化的方式解释其用法。

一、起步与配置:打好基础

在开始任何工作之前,需要先配置好你的工具。这部分命令通常只需执行一次。

使用场景:在新电脑上首次安装 Git 后,或在公司配置符合规范的 Git 环境。

  1. git config - 配置用户信息

    • 为什么需要:你的每一次提交都会记录这些信息,这是标识提交者身份的关键。
    • 怎么用
      # 设置全局用户名和邮箱(适用于本机所有仓库)
      git config --global user.name "Your Name"
      git config --global user.email "your.email@example.com"
      
      # 如果某个特定项目想用不同的信息,可以在项目目录下去掉 --global 选项设置
      git config user.name "Your Work Name"
      
      # 查看所有配置
      git config --list
      
  2. git init - 初始化新仓库

    • 使用场景:你本地有一个项目文件夹,想开始用 Git 管理它的版本。
    • 怎么用
      cd /path/to/your/project  # 进入项目文件夹
      git init                  # 初始化
      
    • 效果:该命令会在当前目录创建一个名为 .git 的子目录,所有 Git 需要的数据和资源都存放在这里。
  3. git clone - 克隆现有仓库

    • 使用场景:你需要获取一份远程仓库(如 GitHub、GitLab 上的项目)的完整拷贝到本地。
    • 怎么用
      # 克隆一个远程仓库
      git clone https://github.com/username/repository.git
      
      # 克隆到指定目录
      git clone https://github.com/username/repository.git my-project-name
      
    • 效果:这命令会做三件事:1. 在当前目录创建一个 my-project-name 文件夹。2. 初始化一个 .git 目录。3. 拉取远程仓库的所有数据。4. 自动创建一个跟踪远程 mainmaster 分支的本地分支。

二、日常工作流:添加、提交与查看

这是你每天都会重复无数次的循环:修改代码 -> 暂存 -> 提交。

基本工作流图示

git add
git commit
git push
工作目录 Working Directory
暂存区 Staging Area
本地仓库 Repository
远程仓库 Remote
  1. git status - 检查当前状态

    • 使用场景:任何时候你忘了自己在上一步做了什么,或者想知道哪些文件被修改了、哪些已暂存,首先就运行它。它是你最常用的“侦察兵”。
    • 怎么用git status
    • 输出解读
      • Changes not staged for commit: 表示你修改了文件,但还没有用 git add 暂存它们。
      • Changes to be committed: 表示文件已暂存,等待提交。
      • Untracked files: 表示新创建的文件,Git 还没有开始跟踪。
  2. git add - 暂存更改

    • 使用场景:你想把文件的当前快照包含到下一次提交中。
    • 怎么用
      # 暂存一个特定文件
      git add filename.html
      
      # 暂存当前目录下的所有更改(包括修改和新增文件,但不包括删除)
      git add .
      
      # 暂存所有已被 Git 跟踪的文件的更改(不包括新增的未跟踪文件)
      git add -u
      # 或者
      git add --update
      
  3. git commit - 提交更改

    • 使用场景:你已完成一个逻辑完整的更改(例如修复了一个 bug、完成了一个小功能),想永久保存当前暂存区的快照。
    • 怎么用
      # 提交,并附带提交信息
      git commit -m "Fix the login bug"
      
      # 更推荐的做法:直接打开编辑器编写详细的提交信息(第一行是摘要,空一行,然后是详细描述)
      git commit
      
    • 黄金法则:一次提交只做一件事,提交信息要清晰明了。
  4. git diff - 查看差异

    • 使用场景:在运行 git add 之前,你想精确地看看你到底修改了什么代码,而不是通过 git status 只看文件名。
    • 怎么用
      # 查看工作目录和暂存区之间的差异(即:你修改了什么但还没 add)
      git diff
      
      # 查看暂存区和上一次提交之间的差异(即:你 add 了什么准备提交)
      git diff --staged
      

三、分支与合并:并行开发的利器

分支是 Git 的“杀手级”功能,它让你能安全地隔离开发。

  1. git branch - 管理分支

    • 使用场景:查看、创建或删除分支。
    • 怎么用
      # 列出所有本地分支,当前所在分支前有 * 号
      git branch
      
      # 创建一个新分支
      git branch new-feature
      
      # 删除一个已合并的分支(安全删除)
      git branch -d merged-branch
      
      # 强制删除一个未合并的分支(谨慎使用!)
      git branch -D unmerged-branch
      
  2. git checkout & git switch - 切换分支

    • 使用场景:在不同的工作上下文之间切换。
    • 怎么用
      # 传统命令(功能较多,容易混淆)
      git checkout existing-branch
      
      # 更语义化的新命令(专用于切换分支)
      git switch existing-branch
      
      # 创建并立即切换到新分支
      git switch -c new-feature
      # 等同于旧的 git checkout -b new-feature
      
  3. git merge - 合并分支

    • 使用场景:当你完成 new-feature 分支的开发后,想将其成果合并回主分支(如 main)。
    • 怎么用
      # 1. 首先,切换到要合并到的目标分支(通常是主分支)
      git switch main
      
      # 2. 然后,将特性分支合并到当前分支
      git merge new-feature
      
    • 结果:如果合并顺利,Git 会创建一个新的“合并提交”(merge commit)。如果发生冲突,则需要手动解决。
  4. git rebase - 变基(高级操作)

    • 使用场景:让你分支的提交历史看起来像是在主线的最新提交之后进行的,使历史更加线性、整洁。注意:Rebase 会重写历史,只适用于你本地尚未推送的分支。
    • 怎么用
      # 在 feature-branch 上执行
      git rebase main
      
    • 效果:相当于把 feature-branch 分支上的工作成果“挪动”到 main 分支的最新提交之后。
特性 Merge Rebase
结果 生成一个新的合并提交,保留所有分支的历史 线性历史,好像工作是在主线基础上连续进行的
历史 更真实地反映了实际的开发过程 更整洁,但修改了历史
安全性 安全,适用于公共分支 风险高,不要 rebase 已经推送到远程的分支

四、与远程仓库协作:团队工作的核心

Git 是分布式的,远程仓库(如 GitHub)是团队交换代码的中心节点。

  1. git remote - 管理远程地址

    • 使用场景:查看或配置本地仓库与哪些远程仓库关联。
    • 怎么用
      # 查看远程仓库列表(通常默认的叫 origin)
      git remote -v
      
      # 添加一个新的远程仓库地址(常用于一个项目要推送到多个远程)
      git remote add upstream https://github.com/original/repo.git
      
  2. git push - 推送提交

    • 使用场景:你想将本地提交共享到远程仓库,让团队成员也能看到。
    • 怎么用
      # 将当前分支推送到远程仓库的对应分支(如果远程没有,则创建它)
      git push origin main
      
      # 第一次推送时,使用 -u 来建立跟踪关系,以后直接 git push 即可
      git push -u origin main
      
  3. git fetch - 获取更新

    • 使用场景:你想看看其他人是否推送了新的提交,但还不想立即合并到你的工作区。这是一个“只查看,不合并”的安全操作。
    • 怎么用git fetch origin
    • 效果:它将远程仓库的最新数据(如 origin/main)下载到本地,但你的本地分支(如 main)还停留在原地。
  4. git pull - 拉取并合并更新

    • 使用场景:你想获取远程的最新更改并立即将其合并到你的当前分支。这是最常用的更新命令。
    • 怎么用git pull origin
    • 本质git pull = git fetch + git merge
    • 警告:如果本地有未提交的更改,可能会产生冲突。推荐先 git stash(见下文)再 git pull

五、撤销与恢复:时光倒流

人难免犯错,Git 提供了强大的撤销功能。

  1. git restore - 恢复文件(Git 2.23+ 推荐)

    • 使用场景:你修改了一个文件,但想丢弃所有更改,恢复到上次提交的样子。
    • 怎么用
      # 丢弃工作目录中某个文件的修改(危险!不可撤销!)
      git restore filename.html
      
      # 将文件从暂存区挪回工作区(取消暂存)
      git restore --staged filename.html
      
  2. git reset - 重置提交(谨慎使用!)

    • 使用场景:你想撤销最近的提交。
    • 怎么用
      # 软重置:撤销提交,但保留更改内容在暂存区和工作目录
      git reset --soft HEAD~1
      
      # 混合重置(默认):撤销提交和暂存,但保留更改内容在工作目录
      git reset --mixed HEAD~1
      
      # 硬重置(非常危险!):彻底丢弃最近的提交和所有更改
      git reset --hard HEAD~1
      
    • 警告--hard 重置会永久丢弃数据,仅用于本地分支。
  3. git revert - 反转提交(安全撤销)

    • 使用场景:你想撤销一个已经推送到远程的公共提交。它不是删除提交,而是创建一个新的提交来抵消旧提交的更改。
    • 怎么用git revert <commit-hash>
    • 优点:不会重写历史,是团队协作中撤销更改的安全方式。

六、实用技巧与高级场景
  1. git stash - 暂存临时工作

    • 使用场景:你正在 feature 分支上工作到一半,突然需要切到 main 分支去修复一个紧急 bug。但你现在的修改还不构成一个提交。
    • 怎么用
      # 将当前工作目录和暂存区的修改保存到一个新的储藏堆栈
      git stash
      
      # 完成其他工作后,回到这个分支,恢复储藏的内容
      git stash pop  # 恢复并删除储藏
      # 或者
      git stash apply # 恢复但不删除储藏
      
  2. .gitignore 文件

    • 使用场景:你的项目中有一些文件(如日志、编译产物、本地配置文件、node_modules)永远不应该被提交到 Git。
    • 怎么用:在项目根目录创建一个名为 .gitignore 的文件,每一行写一个要忽略的文件模式。
      # 忽略所有 .log 文件
      *.log
      
      # 忽略 node_modules 目录
      node_modules/
      
      # 但是不要忽略重要的 example.config 文件
      !example.config
      

网站公告

今日签到

点亮在社区的每一天
去签到