2022-10-10-git常用操作

Git 常用操作指南

本文整理了 Git 日常开发中的常用指令,分为常规操作与进阶用法两部分,涵盖分支管理、代码同步、版本回退、子模块管理等核心场景。

一、常规操作

1. 基础配置

1
2
3
4
5
6
7
8
9
10
11
12
# 查看配置
git config --list

# 设置用户信息
git config --global user.name "Your Name"
git config --global user.email "email@example.com"

# 设置常用别名 (可选)
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.st status

2. 分支管理 (Branch)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 查看本地分支
git branch

# 查看所有分支 (包含远程)
git branch -a

# 创建分支
git branch <branch-name>

# 切换分支
git checkout <branch-name>
# 或 (Git 2.23+)
git switch <branch-name>

# 创建并切换分支
git checkout -b <branch-name>

# 删除本地分支
git branch -d <branch-name> # 普通删除
git branch -D <branch-name> # 强制删除 (未合并时)

# 批量删除本地分支 (例如删除包含 'qa' 的分支)
git branch | grep 'qa' | xargs git branch -d

# 删除远程分支
git push origin --delete <branch-name>

3. 代码提交与同步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看状态
git status

# 添加文件到暂存区
git add .

# 提交更改
git commit -m "commit message"

# 拉取远程代码
git pull origin <branch-name>

# 推送代码到远程
git push origin <branch-name>

4. 标签管理 (Tag)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看本地标签
git tag

# 查看远程标签
git ls-remote --tags

# 打标签
git tag v1.0.0

# 给特定 commit 打标签
git tag v1.0.0 <commit-id> -m "Release v1.0.0"

# 推送标签到远程
git push origin v1.0.0
git push origin --tags # 推送所有标签

# 删除本地标签
git tag -d v1.0.0

# 删除远程标签
git push origin :refs/tags/v1.0.0
# 或
git push origin --delete v1.0.0

二、进阶用法

1. 跨分支代码同步 (Cherry Pick)

将其他分支的某次提交应用到当前分支。

1
2
3
4
5
6
7
8
9
# 1. 切换到接收修改的分支
git checkout master

# 2. 执行 cherry-pick
git cherry-pick <commit-id>

# 如果发生冲突,解决冲突后:
git add .
git cherry-pick --continue

2. 版本回退与撤销

撤销工作区修改

1
2
3
4
# 丢弃工作区的修改
git checkout -- <file>
# 或 (Git 2.23+)
git restore <file>

修改最近一次提交 (Amending)

1
2
3
# 修改最近一次 commit 的注释或追加文件
git add .
git commit --amend

版本回退 (Reset)

1
2
3
4
5
6
7
8
9
10
# 1. 软重置 (保留工作区和暂存区,仅撤销 commit)
git reset --soft HEAD^

# 2. 混合重置 (保留工作区,清空暂存区,撤销 commit) - 默认
git reset HEAD^

# 3. 硬重置 (彻底回退,丢弃所有更改) - 慎用
git reset --hard HEAD^
# 或回退到指定版本
git reset --hard <commit-id>

无痕删除中间的 commit (Rebase)

1
2
3
4
5
6
# 交互式变基前 N 个提交
git rebase -i HEAD~3

# 在编辑器中将需要删除的 commit 前的 'pick' 改为 'drop'
# 保存退出后,强制推送
git push origin <branch-name> --force

3. .gitignore 更新

.gitignore 规则更新后,已被 Git 追踪的文件不会自动被忽略,需要清除缓存。

1
2
3
4
5
6
7
8
# 1. 清除缓存
git rm -r --cached .

# 2. 重新添加文件
git add .

# 3. 提交更改
git commit -m "Refresh .gitignore"

4. 子模块管理 (Submodule)

添加子模块

1
git submodule add <repository-url> <path>

克隆含子模块的项目

1
2
3
4
5
# 方法一:克隆时自动初始化
git clone --recurse-submodules <repository-url>

# 方法二:克隆后手动初始化
git submodule update --init --recursive

更新子模块

1
git submodule update --remote

删除子模块

1
2
3
4
5
6
7
# 1. 删除子模块目录
git rm <submodule-path>

# 2. 删除 .git/modules 中的相关目录
rm -rf .git/modules/<submodule-path>

# 3. 修改 .gitmodules (通常 git rm 会自动处理,若未处理需手动删除相关条目)

5. 远程仓库同步 (Sync Fork)

当需要同步上游仓库 (upstream) 的代码时:

1
2
3
4
5
6
7
8
# 1. 添加上游仓库
git remote add upstream <upstream-url>

# 2. 拉取上游代码
git fetch upstream

# 3. 合并上游分支到本地
git merge upstream/master

三、常见问题 (Q&A)

Q1: 报错 Error: spawn git ENOENT

通常是因为 Git 环境变量未配置或 VSCode 配置路径错误。
检查 VSCode settings.json:

1
"git.path": "/usr/bin/git" // 根据实际路径配置

Q2: 如何清理无效的远程分支引用?

1
git fetch -p
1
git rm --cache ./public/env.config.js

2022-10-10-git常用操作
https://zhangyingxuan.github.io/2022-05-12-【指令】git常用操作/
作者
blowsysun
许可协议