目录
- 基础配置
-
- ssh配置
-
- [查看当前 SSH 密钥列表](#查看当前 SSH 密钥列表)
- [测试当前 SSH 连接](#测试当前 SSH 连接)
- [配置 SSH Config 多账户](#配置 SSH Config 多账户)
-
- [步骤 1:为每个平台生成独立密钥(如果还没做)](#步骤 1:为每个平台生成独立密钥(如果还没做))
- [步骤 2:将公钥添加到各平台](#步骤 2:将公钥添加到各平台)
- [步骤 3:创建/编辑 SSH 配置文件](#步骤 3:创建/编辑 SSH 配置文件)
- [步骤 4:修改仓库的 Remote URL](#步骤 4:修改仓库的 Remote URL)
- [步骤 5:测试并拉取](#步骤 5:测试并拉取)
- 本地配置用户信息
- 查看配置
- 仓库操作
- 日常工作
- 查看提交历史与差异
- 分支管理
- 撤销与回退
- 远程仓库交互
- 标签管理
- 常用完整流程
-
- 日常开发流程:
- [紧急修复线上 bug:](#紧急修复线上 bug:)
基础配置
ssh配置
查看当前 SSH 密钥列表
bash
ls -la ~/.ssh/ # Linux
Windows下路径为:
plain
C:\Users\你的用户名\.ssh\
例如,如果你的用户名是 Alice,完整路径就是:
plain
C:\Users\Alice\.ssh\
注意路径格式:Windows 上可以用斜杠 / 或双反斜杠 \,不要用单反斜杠 \,否则会被当作转义字符。
可以看到类似:
plain
id_rsa_github id_rsa_github.pub
id_rsa_gitlab id_rsa_gitlab.pub
id_rsa_gitee id_rsa_gitee.pub
config known_hosts
测试当前 SSH 连接
bash
ssh -T git@github.com # 测试 GitHub
ssh -T git@gitlab.com # 测试 GitLab
ssh -T git@gitee.com # 测试 Gitee
如果输出 Permission denied 或 Hi xxx! You've successfully authenticated,就能判断当前用的是哪个账户。
配置 SSH Config 多账户
步骤 1:为每个平台生成独立密钥(如果还没做)
bash
# GitHub 个人账号
ssh-keygen -t rsa -C "personal@email.com" -f ~/.ssh/id_rsa_github
# GitLab 公司账号
ssh-keygen -t rsa -C "work@company.com" -f ~/.ssh/id_rsa_gitlab
# Gitee 账号
ssh-keygen -t rsa -C "gitee@email.com" -f ~/.ssh/id_rsa_gitee
-f 指定文件名,避免覆盖默认密钥
步骤 2:将公钥添加到各平台
将对应文件里的完整内容复制,添加到对应的平台中。切记是 .pub 后缀的才是需要上传的公钥.
步骤 3:创建/编辑 SSH 配置文件
bash
# Linux目录
vim ~/.ssh/config
写入以下内容(这是核心配置),以下为示例:
plain
# GitHub 个人账号
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github
IdentitiesOnly yes
# Gitee 账号
Host gitee
HostName gitee.com
User git
IdentityFile ~/.ssh/id_rsa_gitee
IdentitiesOnly yes
# 公司私有 GitLab
Host gitlab-company
HostName gitlab.company.com
User git
IdentityFile ~/.ssh/id_rsa_company
IdentitiesOnly yes
参数解释:
Host后跟自定义别名,后续用这个名字代替 github.com
HostName:真实服务器地址
User git 不可更改
IdentityFile:指定该主机使用的私钥,不带.pub后缀
IdentitiesOnly yes:只使用指定的密钥,防止 SSH 客户端提供默认密钥导致冲突
步骤 4:修改仓库的 Remote URL
原来的地址:
bash
git remote set-url origin git@github.com:username/repo.git
git remote set-url origin git@gitee.com:username/repo.git
git remote set-url origin git@gitlab.company.com:username/repo.git
改为使用 Host 别名:
bash
# Github 个人账户
git remote set-url origin git@github-personal:username/repo.git
# Gitee 个人账户
git remote set-url origin git@gitee:username/repo.git
# GitLab 公司私有
git remote set-url origin git@gitlab-company:username/repo.git
步骤 5:测试并拉取
bash
# 测试连接
ssh -T github-personal
# 应输出:Hi username! You've successfully authenticated...
# 拉取代码
git pull origin main
本地配置用户信息
bash
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
设置全局用户名和邮箱,会出现在每次 commit 记录中。 --global 表示对当前用户所有仓库生效,若只想对当前仓库生效则去掉 --global
查看配置
bash
git config --list
git config user.name
仓库操作
当前目录初始化仓库
bash
git init
在当前目录创建一个新的 Git 仓库,生成 .git 隐藏目录
克隆远程仓库
bash
# 不指定本地目录时,默认本地目录名称为远程仓库名称
git clone https://github.com/user/repo.git
# 指定本地目录名
git clone https://github.com/user/repo.git my-folder
将远程仓库完整复制到本地,包括所有分支和历史记录;git clone 后的url根据自己仓库实际情况修改
日常工作
查看状态
bash
git status
查看工作区(Working Directory)和暂存区(Staging Area)的状态,显示哪些文件被修改、新增或删除
添加文件到暂存区
bash
git add filename.txt # 添加单个文件filename.txt
git add . # 添加当前目录所有变更
git add src/ # 添加整个目录src/
git add -p # 交互式选择代码块(hunk)添加
将工作区的修改放入暂存区(Stage),准备提交。-p 模式可以精确选择要暂存的代码片段。
提交更改
bash
git commit -m "feat: add user login feature"
git commit -m "fix: resolve null pointer exception" -m "Detailed description here"
将暂存区的内容保存到本地仓库,生成一个 commit 快照。"引号内内容根据自己实际情况修改"
快速提交
bash
git commit -am "docs: update README"
-a自动将所有已跟踪(tracked)的修改加入暂存区并提交。注意:不会包含新增(untracked)的文件。
查看提交历史与差异
查看提交历史
bash
git log
git log --oneline # 简洁模式,一行一个 commit
git log --graph --oneline --all # 图形化显示所有分支历史
git log -3 # 最近 3 条记录
git log --author="Alice" # 按作者筛选
查看 commit 历史,包含 hash、作者、时间和提交信息。
查看文件修改内容
bash
git diff # 工作区 vs 暂存区
git diff --staged # 暂存区 vs 最新 commit(--cached 同义)
git diff HEAD~1 # 与上一个 commit 对比
git diff branch-a branch-b # 对比两个分支
查看代码差异。HEAD~1 表示当前 commit 的前一个版本.
分支管理
查看分支
bash
git branch # 本地分支
git branch -a # 所有分支(含远程)
git branch -vv # 显示分支与远程追踪关系
创建、切换分支
bash
git branch feature-x # 创建分支(不切换)
git checkout feature-x # 切换到已有分支
git checkout -b feature-x # 创建并切换(常用)
git switch feature-x # 新命令,更安全的切换
git switch -c feature-x # 创建并切换(推荐新写法)
合并分支
bash
git checkout main
git merge feature-x # 将 feature-x 合并到当前分支(main)
git merge --no-ff feature-x # 禁用快进合并,保留分支历史
--no-ff会生成一个 merge commit,即使可以快进合并,便于保留 feature 分支的存在痕迹。
删除分支
bash
git branch -d feature-x # 删除已合并的分支
git branch -D feature-x # 强制删除(未合并也会删)
git push origin --delete feature-x # 删除远程分支
撤销与回退
撤销工作区修改
bash
git checkout -- filename.txt # 丢弃工作区修改(危险)
git restore filename.txt # 新命令,同上
将文件恢复到最近一次 commit 或 add 的状态,未提交的修改会丢失。
撤销暂存区
bash
git reset HEAD filename.txt # 将文件从暂存区移回工作区
git restore --staged filename.txt # 新命令
版本回退
bash
git reset --soft HEAD~1 # 回退到上一个版本,保留修改到暂存区
git reset --mixed HEAD~1 # 回退到上一个版本,保留修改到工作区(默认)
git reset --hard HEAD~1 # 彻底回退,丢弃所有修改(危险!)
git reset --hard abc1234 # 回退到指定 commit hash
--soft:只移动 HEAD,不改暂存区和工作区
--mixed:移动 HEAD,重置暂存区,保留工作区
--hard:全部重置,数据不可恢复
查看所有操作记录(用于找回)
bash
git reflog
远程仓库交互
查看远程地址
bash
git remote -v
输出示例:
plain
origin git@github.com:yourname/repo.git (fetch)
origin git@github.com:yourname/repo.git (push)
添加远程仓库
bash
git remote add origin https://github.com/user/repo.git
"https://github.com/user/repo.git"为示例,根据自己实际远程仓库进行修改
拉取与推送
bash
git pull origin main # 拉取远程 main 分支并合并
git pull --rebase origin main # 使用 rebase 方式拉取(推荐,历史更整洁)
git push origin main # 推送到远程 main 分支
git push -u origin feature-x # 首次推送并建立追踪关系
获取远程更新(不合并)
bash
git fetch origin
git fetch --all
下载远程更新到本地,但不自动合并,可以先用 git diff main origin/main 查看差异。
标签管理
bash
git tag v1.0.0 # 创建轻量标签
git tag -a v1.0.0 -m "Release version 1.0.0" # 创建附注标签
git tag # 查看标签
git push origin v1.0.0 # 推送单个标签到远程
git push origin --tags # 推送所有标签
git checkout v1.0.0 # 切换到标签(分离 HEAD 状态)
常用完整流程
日常开发流程:
bash
git checkout -b feature-login # 创建功能分支
# ... 编码 ...
git add .
git commit -m "feat: implement user login"
git checkout main
git pull origin main # 先拉取最新代码
git merge feature-login # 合并功能分支
git push origin main # 推送到远程
git branch -d feature-login # 删除本地功能分支
紧急修复线上 bug:
bash
git stash # 保存当前工作
git checkout main
git checkout -b hotfix-critical
# ... 修复代码 ...
git commit -am "fix: critical bug"
git checkout main
git merge hotfix-critical
git push origin main
git stash pop # 恢复之前的工作