Git
一、基础命令
1. Git 基础命令
问题:Git 基础命令
答案: 核心回答:git init、add、commit、push、pull、clone 是 Git 基础命令。
代码示例:
# 初始化仓库
git init
git init --bare # 裸仓库
# 克隆
git clone https://github.com/user/repo.git
git clone --depth 1 https://github.com/user/repo.git # 浅克隆
# 添加文件
git add filename.txt # 添加单个文件
git add . # 添加所有更改
git add -p # 交互式添加
# 提交
git commit -m "提交信息"
git commit -am "message" # 自动添加已跟踪文件
git commit --amend # 修改上次提交
# 推送拉取
git push origin main
git push -u origin main # 设置上游分支
git push --force # 强制推送(慎用)
git pull origin main
git pull --rebase origin main # 变基合并
# 获取
git fetch origin
2. git reset 与 git revert
问题:git reset 与 git revert 的区别
答案: 核心回答:reset 回退版本(重写历史),revert 创建新提交(保留历史)。
| 命令 | 作用 | 历史 |
|---|---|---|
| git reset --soft | 保留暂存和工作区 | 重写 |
| git reset --mixed | 保留工作区 | 重写 |
| git reset --hard | 重置暂存和工作区 | 重写 |
| git revert | 创建新提交 | 保留 |
代码示例:
# reset 回退
git reset --soft HEAD~1 # 保留暂存区
git reset --mixed HEAD~1 # 保留工作区
git reset --hard HEAD~1 # 重置一切
# revert 撤销
git revert HEAD # 撤销上次提交
git revert abc123 # 撤销指定提交
二、分支管理
3. Git 分支
问题:Git 分支管理
答案: 核心回答:分支用于开发新功能,合并后删除。
代码示例:
# 创建分支
git branch feature
git checkout -b feature # 创建并切换
git switch -c feature # 同上(新版)
# 查看分支
git branch # 本地分支
git branch -a # 所有分支
git branch -v # 详细
# 切换分支
git checkout feature
git switch feature # 新版
# 删除分支
git branch -d feature # 安全删除
git branch -D feature # 强制删除
# 重命名分支
git branch -m old-name new-name
4. git merge 与 git rebase
问题:merge 与 rebase 的区别
答案: 核心回答:merge 保留历史分叉,rebase 变基形成直线历史。
代码示例:
# merge
git checkout main
git merge feature # 快进合并
git merge --no-ff feature # 非快进合并
# rebase
git checkout feature
git rebase main # 变基到 main
# 解决冲突
git rebase --continue # 继续变基
git rebase --abort # 取消变基
# 交互式变基
git rebase -i HEAD~3 # 修改最近3次提交
# pick - 保留
# squash - 合并
# drop - 删除
三、远程操作
5. 远程仓库
问题:远程仓库操作
答案: 核心回答:git remote 管理远程仓库,push/pull 同步代码。
代码示例:
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
git remote -v # 查看远程仓库
# 修改远程仓库
git remote set-url origin new-url
# 推送
git push -u origin main # 首次推送设置上游
# 拉取合并
git fetch + merge = git pull
git fetch + rebase = git pull --rebase
# 删除远程分支
git push origin --delete feature
四、标签管理
6. git tag
问题:git tag
答案: 核心回答:tag 用于标记发布点,如版本号。
代码示例:
# 创建标签
git tag v1.0.0
git tag -a v1.0.0 -m "版本1.0.0" # 附注标签
git tag -a v1.0.0 abc123 # 为历史提交打标签
# 查看标签
git tag
git tag -l 'v1.*'
# 推送标签
git push origin v1.0.0
git push origin --tags # 推送所有标签
# 删除标签
git tag -d v1.0.0 # 删除本地
git push origin --delete v1.0.0 # 删除远程
五、储藏与清理
7. git stash
问题:git stash
答案: 核心回答:stash 暂存工作区更改,便于切换分支。
代码示例:
# 储藏
git stash
git stash save "message"
git stash -u # 包含未跟踪文件
git stash -p # 交互式储藏
# 查看
git stash list
# 应用
git stash apply # 应用但不删除
git stash pop # 应用并删除
git stash apply stash@{0} # 指定 stash
# 删除
git stash drop stash@{0}
git stash clear # 清空所有
六、其他常用操作
8. 日志与差异
问题:日志与差异查看
答案: 核心回答:git log 查看提交历史,git diff 查看更改差异。
代码示例:
# 日志
git log
git log --oneline # 简洁
git log --graph # 图形化
git log -n 5 # 最近5条
git log --author="name" # 按作者
git log --since="2024-01-01" # 时间范围
# 差异
git diff # 工作区 vs 暂存区
git diff --cached # 暂存区 vs HEAD
git diff HEAD # 工作区 vs HEAD
git diff main..feature # 两分支差异
git diff --stat # 统计差异