本文内容来源于 Make BUPT Great Again 整理

基本配置

设置用户信息

在开始使用 Git 之前,需要配置你的用户信息。这些信息会出现在每次提交的记录中。

1
2
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱地址"

示例:

1
2
git config --global user.name "xxx"
git config --global user.email "xxx@example.com"

说明:

  • --global 参数表示全局配置,对当前用户的所有仓库生效
  • 如果只想为某个仓库单独配置,可以在仓库目录下去掉 --global 参数

查看当前配置:

1
git config --global --list

远程仓库操作

添加远程仓库

将本地仓库与远程 GitHub 仓库关联。

1
git remote add <远程仓库简称> <远程仓库URL>

示例:

1
git remote add origin https://github.com/xxx/repository-name.git

说明:

  • origin 是远程仓库的默认名称(可自定义)
  • 一个本地仓库可以关联多个远程仓库

查看远程仓库:

1
git remote -v

推送到远程仓库

普通推送:

1
git push -u <远程仓库简称> <本地分支名>

示例:

1
git push -u origin main

说明:

  • -u (或 --set-upstream) 参数会建立本地分支与远程分支的追踪关系
  • 首次推送时使用 -u,之后可以直接使用 git push

强制推送(危险操作):

1
git push -f origin main

说明:

  • -f (或 --force) 会强制覆盖远程仓库的历史
  • ⚠️ 谨慎使用:可能导致其他协作者的提交丢失
  • 更安全的替代方案:git push --force-with-lease(仅在远程分支未被他人更新时才强制推送)

🔐 使用个人访问令牌实现私有库访问

什么是 PAT?

Personal Access Token (个人访问令牌) 是 GitHub 提供的一种安全认证方式,用于替代传统的用户名密码认证。特别适用于:

  • 访问私有仓库
  • 两步验证 (2FA) 启用的账户
  • 自动化脚本和 CI/CD 流程

📋 创建 PAT 的步骤

  1. 登录 GitHub → 点击右上角头像 → Settings
  2. 左侧菜单中选择 Developer settings
  3. 选择 Personal access tokens → Tokens (classic)
  4. 点击 Generate new token → Generate new token (classic)
  5. 填写信息:
    • Note: 给 token 起个名字(如:”My Local Development”)
    • Expiration: 设置过期时间
    • Select scopes: 勾选需要的权限 (很重要)
      • repo - 完整的仓库访问权限
      • workflow - 访问 GitHub Actions
      • read:org - 读取组织信息
  6. 点击 Generate token

⚠️ 重要: 立即复制并保存 token,页面刷新后将无法再次查看

🔧 使用 PAT 的三种方式

方式一:在 URL 中直接使用 PAT

1
2
3
4
5
# 添加远程仓库时直接在URL中包含PAT
git remote add origin https://<username>:<PAT>@github.com/<username>/<repository>.git

# 示例
git remote add origin https://xxx:ghp_xxxxxxxxxxxxxxxxxxxx@github.com/xxx/repository-name.git

方式二:克隆时使用 PAT

1
2
3
4
5
# 克隆私有仓库
git clone https://<username>:<PAT>@github.com/<username>/<repository>.git

# 示例
git clone https://xxx:ghp_xxxxxxxxxxxxxxxxxxxx@github.com/xxx/private-repo.git

方式三:使用 Git Credential Helper(推荐)

1
2
3
4
5
6
7
# 配置 Git 使用 credential helper
git config --global credential.helper store

# 第一次推送时会要求输入用户名和密码
git push -u origin main
# Username: 你的GitHub用户名
# Password: 你的PAT (不是GitHub密码)

📝 完整的私有仓库操作流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 初始化本地仓库
git init

# 2. 添加文件
git add .

# 3. 提交
git commit -m "Initial commit"

# 4. 添加远程仓库(使用PAT)
git remote add origin https://<username>:<PAT>@github.com/<username>/<repository>.git

# 5. 推送到远程
git push -u origin main

🔒 安全最佳实践

✅ 推荐做法

1
2
3
# 使用环境变量存储PAT
export GITHUB_TOKEN="your_pat_here"
git remote add origin https://username:$GITHUB_TOKEN@github.com/username/repo.git

❌ 避免的做法

1
2
# 不要在脚本中明文写入PAT
git remote add origin https://username:ghp_clearly_visible_token@github.com/user/repo.git

🛠️ 常见问题解决

更新已存在的远程仓库 URL

1
2
3
4
5
# 查看当前远程仓库
git remote -v

# 更新远程仓库URL以包含PAT
git remote set-url origin https://<username>:<PAT>@github.com/<username>/<repository>.git

临时使用 PAT 推送

1
2
# 一次性使用PAT推送,不修改远程URL
git push https://<username>:<PAT>@github.com/<username>/<repository>.git main

移除 URL 中的 PAT(提高安全性)

1
2
3
# 移除URL中的PAT,改为使用credential helper
git remote set-url origin https://github.com/<username>/<repository>.git
git config --global credential.helper store

⚠️ 重要提醒

  • PAT 等同于密码 - 请妥善保管,不要分享给他人
  • 定期更新 - 建议设置合理的过期时间并定期更新
  • 最小权限原则 - 只授予必要的权限范围
  • 避免硬编码 - 不要在代码中直接写入PAT
  • 撤销泄露的 Token - 如果PAT泄露,立即在GitHub设置中撤销

分支操作

创建并切换分支

创建新分支并切换:

1
git checkout -b <新分支名>

示例:

1
git checkout -b feature-login
  • 创建一个名为 feature-login 的新分支,并立即切换到该分支
  • 等同于 git branch feature-login + git checkout feature-login

新版本推荐写法:

1
git switch -c <新分支名>

重命名分支:

1
git branch -M <新分支名>

示例:

1
git branch -M main
  • 强制重命名当前分支为 main
  • -M--move --force 的缩写

查看所有分支:

1
git branch -a

删除分支:

1
2
git branch -d <分支名>    # 安全删除(已合并的分支)
git branch -D <分支名> # 强制删除

提交与修改

添加文件到暂存区

1
2
3
git add .                    # 添加所有修改的文件
git add <文件名> # 添加指定文件
git add *.js # 添加所有 .js 文件

常用选项:

1
2
git add -A                   # 添加所有变化(包括删除)
git add -u # 只添加已跟踪文件的修改

查看暂存区状态:

1
git status

提交暂存区到本地仓库

1
git commit -m "你的提交信息"

示例:

1
2
3
git commit -m "feat: add user login feature"
git commit -m "fix: resolve memory leak issue"
git commit -m "docs: update README"

提交规范建议:

  • feat: 新功能
  • fix: 修复bug
  • docs: 文档更新
  • style: 代码格式调整
  • refactor: 重构代码
  • test: 测试相关
  • chore: 构建/工具链相关

快捷提交(跳过暂存区):

1
git commit -am "提交信息"    # 自动添加已跟踪文件的修改并提交

修改最后一次提交:

1
git commit --amend -m "新的提交信息"

从暂存区移除文件

1
git rm --cached <文件名>

示例:

1
git rm --cached config.json

说明:

  • 将文件从 Git 跟踪中移除,但保留在工作目录中
  • 常用于误添加的敏感文件(如配置文件、密钥等)
  • 建议同时将文件添加到 .gitignore

完全删除文件:

1
git rm <文件名>              # 从工作目录和暂存区同时删除

协作开发

克隆仓库

1
2
git clone <仓库URL>
git clone <仓库URL> <自定义目录名>

示例:

1
2
git clone https://github.com/xxx/repository-name.git
git clone https://github.com/xxx/repository-name.git my-project

克隆指定分支:

1
git clone -b <分支名> <仓库URL>

浅克隆(只克隆最近的提交历史):

1
git clone --depth 1 <仓库URL>

拉取远程更新

1
2
git pull                     # 拉取并合并当前分支
git pull origin main # 拉取指定远程分支并合并

说明:

  • git pull = git fetch + git merge
  • 建议使用 git fetch + git merge 以便更好地控制合并过程

添加上游仓库 (用于 Fork 后同步)

当你 Fork 了一个开源项目后,需要添加原仓库作为上游源,以便同步最新更新。

1
git remote add upstream <原作者仓库的URL>

示例:

1
git remote add upstream https://github.com/original-author/repository-name.git

查看远程仓库配置:

1
2
3
4
5
git remote -v
# origin https://github.com/xxx/repository-name.git (fetch)
# origin https://github.com/xxx/repository-name.git (push)
# upstream https://github.com/original-author/repository-name.git (fetch)
# upstream https://github.com/original-author/repository-name.git (push)

从上游仓库同步更新

完整流程:

1
2
3
4
5
6
7
8
9
10
11
# 1. 获取上游仓库的更新
git fetch upstream

# 2. 切换到本地主分支
git checkout main

# 3. 合并上游的更新
git merge upstream/main

# 4. 推送到自己的远程仓库
git push origin main

使用 rebase 方式同步(保持提交历史整洁):

1
2
3
git fetch upstream
git rebase upstream/main
git push origin main --force-with-lease

撤销与重置

撤销工作区的修改

1
2
git checkout -- <文件名>     # 撤销单个文件的修改
git checkout -- . # 撤销所有文件的修改

新版本推荐:

1
2
git restore <文件名>
git restore .

撤销暂存区的文件

1
git reset HEAD <文件名>      # 将文件从暂存区移除,但保留修改

新版本推荐:

1
git restore --staged <文件名>

回退提交

1
2
3
git reset --soft HEAD~1      # 撤销最后一次提交,保留修改在暂存区
git reset --mixed HEAD~1 # 撤销最后一次提交,保留修改在工作区(默认)
git reset --hard HEAD~1 # 撤销最后一次提交,丢弃所有修改(危险)

回退到指定提交:

1
git reset --hard <commit-hash>

查看提交历史

1
2
3
4
git log                      # 查看详细提交历史
git log --oneline # 查看简洁的提交历史
git log --graph --oneline # 图形化显示分支历史
git log -n 5 # 只显示最近5条提交

清理仓库

删除未跟踪的文件:

1
2
3
git clean -n                 # 预览将要删除的文件
git clean -f # 删除未跟踪的文件
git clean -fd # 删除未跟踪的文件和目录

重新初始化仓库(危险操作)

1
2
rm -rf .git                  # 删除 Git 历史记录
git init # 重新初始化仓库

⚠️ 警告

  • 此操作会永久删除所有提交历史
  • 无法恢复,请确保已备份重要数据
  • 仅在确实需要清除历史时使用

常用技巧

查看文件修改

1
2
3
git diff                     # 查看工作区与暂存区的差异
git diff --staged # 查看暂存区与最后一次提交的差异
git diff HEAD # 查看工作区与最后一次提交的差异

暂存当前工作

1
2
3
4
5
git stash                    # 暂存当前修改
git stash list # 查看暂存列表
git stash pop # 恢复最近的暂存并删除
git stash apply # 恢复最近的暂存但不删除
git stash drop # 删除最近的暂存

标签管理

1
2
3
4
5
git tag                      # 查看所有标签
git tag v1.0.0 # 创建轻量标签
git tag -a v1.0.0 -m "版本说明" # 创建附注标签
git push origin v1.0.0 # 推送标签到远程
git push origin --tags # 推送所有标签

忽略文件

创建 .gitignore 文件:

1
2
3
4
5
6
7
8
9
10
11
12
# 忽略所有 .log 文件
*.log

# 忽略 node_modules 目录
node_modules/

# 忽略配置文件
config.json
.env

# 但不忽略特定文件
!important.log