---
url: https://eoht.net/fe/git/command.md
description: 区分 Git 工作区、暂存区、本地提交和远端，整理创建仓库、管理分支、配置 .gitignore 及推送和删除标签的常用命令。
---

# Git 常用命令：仓库、分支、忽略文件与标签 {#git-command-quick-reference}

Git 的工作区是正在编辑的文件，暂存区保存准备提交的改动，本地仓库保存提交历史；`push` 才会把提交发送到远端。表格中的“文件名”“分支名”“仓库地址”都是需要替换的参数。

## 创建目录 {#create-project-directory}

```sh
mkdir my-project
cd my-project
git init
```

已有项目直接进入其目录检查 `git status`，不必重复创建。

## Git 常用命令 {#common-git-commands}

| 命令 | 作用 |
| --- | --- |
| `git init` | 初始化本地仓库 |
| `git status` | 查看分支、暂存区和工作区状态 |
| `git diff` | 查看工作区尚未暂存的改动 |
| `git diff --cached` | 查看已经暂存、将要提交的改动 |
| `git add 文件名` | 将指定文件的当前改动加入暂存区 |
| `git add .` | 暂存当前目录及子目录的改动，使用前检查范围 |
| `git restore --staged 文件名` | 取消暂存，保留工作区改动 |
| `git commit -m "描述信息"` | 将暂存区的内容提交到本地仓库 |
| `git clone 仓库地址` | 克隆远端仓库 |
| `git fetch origin` | 获取远端更新，不自动合并到当前分支 |
| `git pull --ff-only` | 获取并仅允许快进更新，分叉时停止 |
| `git push` | 按当前推送配置发送提交到远端 |
| `git rm 文件名` | 删除工作区中受跟踪的文件，并暂存删除 |

提交前检查 `git diff --cached`，确认没有凭据或无关文件。`git restore --staged` 与会丢弃工作区内容的 `git restore 文件名` 含义不同。

## 添加远程仓库 {#add-git-remote-repository}

```sh
git remote add origin 仓库地址
git remote -v
git branch --show-current
```

确认当前分支后再推送；下面以实际分支名为 `main` 为例：

```sh
git push -u origin main
```

`git remote show origin` 可查看远端分支和跟踪信息。默认分支不一定叫 `main` 或 `master`，应以实际仓库为准。

移除本地记录中的远端名：

```sh
git remote remove origin
```

此操作不会删除服务器上的仓库。已有 `origin` 但地址需要更新时，应检查后使用 `git remote set-url origin 仓库地址`。

## Git 分支操作 {#git-branch-operations}

| 命令 | 作用 |
| --- | --- |
| `git branch` | 查看本地分支 |
| `git branch -r` | 查看本地记录的远程跟踪分支 |
| `git branch -a` | 查看上述两类分支 |
| `git branch 分支名` | 创建本地分支，不切换 |
| `git switch 分支名` | 切换已有分支 |
| `git switch -c 分支名` | 创建并切换到新分支 |
| `git push -u origin 分支名` | 推送并建立上游关系 |
| `git merge 被合并的分支名` | 把目标分支合并到当前分支 |
| `git branch -d 分支名` | 在满足合并检查条件时删除本地分支 |
| `git push origin --delete 分支名` | 删除远端分支，影响协作者 |

切换或合并前先查看工作区状态。分支删除、合并及远端推送应在确认目标后执行；`git switch` 适用于 Git 2.23 及以上版本。

## 忽略文件 {#ignore-files-with-gitignore}

创建或保留现有 `.gitignore` 文件：

```sh
touch .gitignore
```

在文件中按行填写规则：

```text
/mtk/
*.zip
/mtk/do.c
!index.jsp
```

`/mtk/` 忽略仓库根目录下该目录；`*.zip` 匹配 ZIP 文件；精确路径用于忽略单个文件；`!` 规则用于重新纳入匹配文件，但其父目录不能仍处于整体忽略状态。上面的 `/mtk/do.c` 已被首条目录规则覆盖，实际配置可删除冗余项。

`.gitignore` 不会自动停止跟踪已经提交的文件，可用 `git check-ignore -v 文件路径` 排查未跟踪文件命中的规则。

## Git 标签 {#git-tags}

| 命令 | 作用 |
| --- | --- |
| `git tag v1.0` | 在当前提交创建本地轻量标签 |
| `git tag -a v1.0 -m "Release v1.0"` | 创建附注标签，与上一条二选一 |
| `git tag` | 列出本地标签 |
| `git push origin tag v1.0` | 推送指定标签 |
| `git tag -d v1.0` | 删除本地标签 |
| `git push origin --delete refs/tags/v1.0` | 删除远端标签，完整引用可避免与同名分支混淆 |

本地和远端标签独立存在，删除已发布标签前应确认发布流程与协作者是否依赖它。

## Git 学习路径 {#git-learning-path}

提交身份不正确时，先检查 [Git 用户信息](/fe/git/user)；需要整理分支和提交历史时，继续阅读 [Git 合并与精简提交](/fe/git/commit)。

参考：[Git 命令文档](https://git-scm.com/docs/git)、[git push](https://git-scm.com/docs/git-push)、[gitignore](https://git-scm.com/docs/gitignore)。
