Git 基本结构
![image-20240719170942940]()
图示说明了 Git 工作区、暂存区、本地仓库和远程仓库之间的关系
Git 配置
查看配置
配置用户信息
全局配置(对所有代码库生效):
1 2
| git config --global user.name "你的名字" git config --global user.email "你的邮箱"
|
局部配置(只对当前代码库有效):
1 2
| git config --local user.name "你的名字" git config --local user.email "你的邮箱"
|
配置后,远程仓库提交的 commit 里对应的用户即为 user.name。
配置代理
删除错误的代理配置:
1
| git config --global --unset https.proxy
|
设置正确的代理:
1 2
| git config --global http.proxy http://127.0.0.1:10810 git config --global https.proxy http://127.0.0.1:10810
|
代理端口号说明
这里的端口号是本地代理端口号,需根据自己使用的代理工具查看。
以 v2rayn 为例,查看"本地混合监听端口"参数,一般为 10810 或 10808。
验证配置:
1 2
| git config --global --get http.proxy git config --global --get https.proxy
|
Git 基本操作
创建版本库
初始化本地仓库:
克隆远程仓库:
克隆特定分支:
1 2 3
| git clone -b branch_name url # 示例 git clone -b Branch_1GE_XPON_BRANCH_WAN_INOTECH git@192.168.2.241:/home/data/git/ONU/zte9125/zte9125_prj.git
|
修改与提交
| 命令 |
说明 |
git add <file> |
将单个文件从工作区添加到暂存区 |
git add . |
将所有修改的文件添加到暂存区 |
git commit -m "message" |
将暂存区文件提交到本地仓库 |
git status |
查看工作区状态,显示有变更的文件 |
git diff |
比较文件差异(暂存区和工作区) |
合并到上次提交(适用于补充上次提交遗漏的内容):
1
| git commit --amend [--no-edit] # 加上 --no-edit 不修改提交信息
|
远程仓库操作
| 命令 |
说明 |
git push origin master |
将本地 master 分支推送到远程 |
git pull |
下载远程代码并合并(= git fetch+ git merge) |
git fetch |
从远程获取代码库,但不合并 |
git remote add origin <url> |
关联远程仓库 |
git remote -v |
查看远程库信息 |
撤销与回退操作
撤销操作
场景 1:改乱了工作区文件,尚未添加到暂存区
1
| git checkout <file> # 撤销工作区文件到暂存区状态
|
场景 2:改乱了工作区文件并已添加到暂存区
1 2
| git reset HEAD <file> # 第一步:撤销暂存区的修改 git checkout <file> # 第二步:撤销工作区的修改
|
场景 3:乱改了很多文件,想回到最新一次提交状态
1
| git reset --hard HEAD # 撤销所有未提交文件的修改
|
回退操作(已提交)
| 命令 |
说明 |
git reset --hard HEAD^ |
回退到上次提交 |
git reset --hard HEAD~n |
回退到 n 个版本前 |
git reset --hard <commitid> |
回退到指定 commit |
git reset --soft <commitid> |
回退到指定 commit,保留暂存区内容 |
git reset --mixed <commitid> |
回退到指定 commit,保留工作区内容(默认) |
Git 分支管理
基本分支操作
| 命令 |
说明 |
git branch <name> |
创建分支 |
git checkout <name> |
切换到分支 |
git checkout -b <name> |
创建并切换到新分支 |
git merge <name> |
合并分支到当前分支 |
git branch -a |
查看所有分支(本地和远程) |
git branch -d <name> |
删除分支 |
临时存储更改
1 2
| git stash # 暂时存储当前更改 git stash pop # 恢复暂存的更改
|
适用于:当前工作未完成但需要临时切换分支的情况。
分离头指针状态处理
检查状态:
1 2
| git status # 输出:HEAD detached from ed71a86
|
恢复"丢失"的提交:
1 2 3 4
| git reflog # 查找最近的分离头指针提交 git branch recovered-commit abc1234 # 创建分支指向该提交 git switch main # 切换回主分支 git merge recovered-commit # 合并恢复的提交
|
分支查看与删除
查看分支:
1 2 3
| git branch # 查看本地分支 git branch -r # 查看远程分支 git branch -a # 查看所有分支
|
删除分支:
1 2 3 4 5 6 7 8
| # 删除本地分支 git branch -d <branch_name> # 安全删除(检查合并状态) git branch -D <branch_name> # 强制删除
# 删除远程分支 git push origin --delete <branch_name> # 或 git push origin :<branch_name>
|
代码回退策略
1. reset 回退(彻底回退到某一版本)
1 2 3
| git log # 查看提交历史 git reset --hard <目标版本号> # 回退到指定版本 git push -f # 强制推送到远程仓库
|
2. revert 回退(安全回退,保留历史)
1 2 3 4 5 6
| git log # 查看提交历史 git revert <要回退的版本号> # 回退该版本代码并生成新版本 git status # 查看变化文件 git add . # 添加到暂存区 git commit -m "回退说明" # 提交到本地仓库 git push # 推送到远程分支
|
区别:
文件操作
删除文件
1 2 3 4 5 6 7 8
| # 删除单个文件 rm -f 文件名
# 批量删除文件 rm -f *关键字*
# 删除文件夹 rm -rf 文件夹名
|
其他常用命令
查看提交历史
1 2 3 4
| git log --oneline # 简洁显示 git log --graph # 图形化显示分支结构 git log --stat # 显示文件修改统计 git log -p # 显示具体修改内容
|
标签管理
1 2 3 4
| git tag # 查看所有标签 git tag v1.0.0 # 创建轻量标签 git tag -a v1.0.0 -m "版本发布说明" # 创建附注标签 git push origin --tags # 推送所有标签到远程
|
忽略文件配置
创建 .gitignore文件来指定需要忽略的文件和文件夹:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 忽略日志文件 *.log
# 忽略编译生成文件 /build/ /dist/
# 忽略系统文件 .DS_Store
# 忽略IDE配置 .idea/ *.swp *.swo
|
比较差异
1 2 3
| git diff --staged # 比较暂存区与最新提交 git diff HEAD # 比较工作区与最新提交 git diff branch1..branch2 # 比较两个分支
|
重写历史(谨慎使用)
1
| git rebase -i HEAD~3 # 交互式变基,修改最近3个提交
|
注意: rebase 会重写提交历史,在团队协作中需谨慎使用。
参考资料
-
Git 教程 - 菜鸟教程
-
Git 代码回退详解
-
Git 分支管理实践
本笔记持续更新,建议定期回顾和补充实际使用中的经验总结。