初始化或克隆项目

本地初始化

用于新建一个本地 Git 仓库。

git init
  • 在当前目录下生成 .git 文件夹,标志项目已启用版本控制。
  • 适用场景:从零开始开发本地项目。

克隆远程仓库

用于从远程服务器(如 GitHub)下载已有的项目代码及历史记录。

git clone <远程仓库地址>
  • 会创建一个目录,自动初始化 Git 仓库并检出默认分支的最新内容。
  • 适用场景:参与已有项目协作开发。

基本配置(首次使用 Git 时设置)

设置用户名和邮箱

Git 使用这两个字段标记你的提交者身份。

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
  • 加上 --global 表示作用于当前用户所有仓库。

查看配置信息

git config --list
  • 查看当前 Git 配置项(包括用户名、邮箱、编辑器等)。

文件的变更与提交

查看当前状态

git status
  • 显示工作目录和暂存区的差异:哪些文件被修改、哪些文件未被追踪、哪些已准备提交。

添加文件到暂存区

git add <文件>     # 添加指定文件
git add . # 添加当前目录下的所有更改(新增、修改)
git add -A # 添加所有更改,包括删除的文件
  • 将文件的修改加入“准备提交”状态(提交前的预览区)。

提交暂存区到版本库

git commit -m "提交说明"
  • 把所有暂存区的更改保存为一次提交。

修改上一次提交

git commit --amend
  • 修改上一次提交的说明或增加漏提交的文件。
  • 注意:会改写历史,慎用于已推送分支。

分支管理

查看分支

git branch
  • 显示所有本地分支,并标记当前所在分支。

创建新分支

git branch <分支名>
  • 创建一个新的分支,但不会切换过去。

创建并切换分支

git checkout -b <分支名>
  • 等效于:git branch <分支名> + git checkout <分支名>

切换到已有分支

git checkout <分支名>

合并分支

将一个分支上的改动整合到当前分支中。
换句话说,就是“把另一个分支上写的代码拉进当前分支”。

git checkout main       # 切换到你想要合并进的目标分支(通常是 main)
git merge <分支名> # 把指定分支的提交合并进来

Git 会尝试自动把两个分支的内容合成一份新代码:

  • 如果两个分支没有修改相同的地方,Git 会自动合并
  • 如果两个分支修改了同一个文件的同一行,就会产生冲突,你需要手动解决。

删除分支

git branch -d <分支名>      # 删除已合并分支(安全)
git branch -D <分支名> # 强制删除(无论是否合并)
  • 建议在分支合并后及时删除,避免项目分支冗余。

与远程仓库交互

添加远程仓库

git remote add origin <仓库地址>
  • 为本地仓库添加远程地址,origin 是远程仓库的默认别名。
  • 仅需设置一次。

查看远程地址

git remote -v
  • 显示所有远程仓库地址及其用途(fetch/push)。

推送代码

git push -u origin main      # 首次推送并关联远程分支
git push # 后续可以简写
  • 将本地分支的提交推送到远程仓库,便于共享与备份。

拉取远程更新并合并

git pull origin main
  • 获取远程仓库最新代码并自动合并到当前分支。

获取远程内容但不合并

git fetch origin
  • 只下载更新,不做合并;适用于预览/比较远程改动。

查看历史与差异

查看提交历史

git log
  • 显示详细提交记录(哈希、作者、时间、备注)。

简洁日志

git log --oneline --graph --all
  • 简化输出为单行格式,图形化展示提交树状结构。

查看差异

git diff                      # 工作区 vs 暂存区
git diff --staged # 暂存区 vs 上次提交
  • 用于查看哪些代码被改了、加了、删了。

撤销和恢复操作

撤销工作区中的修改(未 add)

git checkout -- <文件名>
  • 恢复指定文件为最后一次提交的状态。
  • 仅适用于未暂存的修改

取消暂存的文件(已 add)

git reset HEAD <文件名>
  • 把暂存区的内容撤回到工作区,不影响实际文件。

撤销最近提交(保留更改)

git reset --soft HEAD~1
  • 撤销提交但保留文件改动到暂存区。
  • 适用于提交信息写错等情况。

丢弃提交和更改(不可恢复)

git reset --hard HEAD~1
  • 连同提交记录和代码修改都撤销,谨慎使用

暂存工作内容(stash)

保存当前修改

git stash
  • 临时保存当前未提交的工作,用于切换分支等场景。

恢复最新保存的修改

git stash pop
  • 恢复最近一次保存的修改并从 stash 中移除。

查看所有 stash 条目

git stash list
  • 可用于选择性恢复特定的 stash。

标签管理

创建标签

git tag v1.0.0
  • 为当前提交打上“版本”标记。

查看标签

git tag

推送标签

git push origin v1.0.0
git push origin --tags
  • 默认不会自动推送 tag,需手动执行。

清理无用文件

删除未被追踪的文件和目录

git clean -fd
  • -f 强制删除;-d 删除目录。
  • 删除的是未添加到 Git 的文件,如临时文件、编译产物。
  • 注意:操作不可恢复,需谨慎使用。

多人协作建议流程

  1. 从远程拉取最新主分支代码

    git pull origin main
  2. 创建功能开发分支(避免在主分支直接开发)

    git checkout -b feature/xxx
  3. 编写代码并提交

    git add .
    git commit -m "完成某功能"
  4. 推送分支到远程(便于协作)

    git push -u origin feature/xxx
  5. 在代码平台上发起 Pull Request,待审核合并

  6. 合并完成后,返回主分支并同步最新代码

    git checkout main
    git pull origin main
  7. 删除本地已合并分支,保持项目整洁:

    git branch -d feature/xxx