1. Git基础命令全解析
作为开发者日常必备的版本控制工具,Git的命令行操作是每个程序员必须掌握的硬技能。下面我将结合自己多年使用经验,详细拆解Git的核心工作流命令。
1.1 仓库初始化与首次提交
创建新仓库的标准流程如下:
bash复制# 创建README文件并写入初始内容
echo "# myOpencode" >> README.md
# 初始化Git仓库
git init
# 将README.md添加到暂存区
git add README.md
# 提交到本地仓库
git commit -m "first commit"
# 重命名默认分支为main(GitHub推荐)
git branch -M main
# 添加远程仓库地址
git remote add origin https://github.com/weekzs/myOpencode.git
# 推送并设置上游分支
git push -u origin main
注意:
-u参数只需在首次推送时使用,它会建立本地分支与远程分支的追踪关系,后续可直接使用git push简化操作。
1.2 文件管理操作
删除已跟踪文件:
bash复制# 从Git索引中删除但保留本地文件
git rm --cached README.md
# 删除中文目录(建议加引号避免解析问题)
git rm --cached "OCR学习笔记"
彻底删除文件:
bash复制# 直接从文件系统删除(不经过Git)
rm -rf skillport
1.3 提交历史与撤销操作
查看提交历史:
bash复制# 完整历史记录
git log
# 简洁单行显示
git log --oneline
# 图形化分支展示
git log --graph --all
撤销错误提交:
bash复制# 创建新的反向提交(推荐)
git revert <commit_id>
# 彻底删除后续提交(危险操作)
git reset --hard <commit_id>
警告:
reset --hard会永久丢弃指定提交之后的所有修改,仅限个人分支使用,协作分支慎用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SSH密钥配置与大型文件传输
2.1 SSH密钥生成与管理
检查现有密钥:
bash复制ls -al ~/.ssh
正常应看到id_rsa(私钥)和id_rsa.pub(公钥)文件。
生成新密钥对:
bash复制# ED25519算法(更安全)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 或传统RSA算法(兼容性更好)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
密钥管理流程:
bash复制# 启动SSH代理
eval "$(ssh-agent -s)"
# 添加私钥到代理
ssh-add ~/.ssh/id_ed25519
# 测试GitHub连接
ssh -T git@github.com
2.2 大文件传输解决方案
当遇到大文件提交问题时,可采用以下方案:
方案A:使用Git LFS(推荐)
bash复制# 安装Git LFS
git lfs install
# 跟踪大文件类型
git lfs track "*.zip"
# 正常提交
git add .gitattributes
git commit -m "Add LFS support"
git push
方案B:清理历史大文件
bash复制# 使用BFG工具清理
java -jar bfg.jar --strip-blobs-bigger-than 100M .
# 清理仓库
git reflog expire --expire=now --all
git gc --prune=now --aggressive
# 强制推送
git push -f origin main
重要提示:强制推送会重写历史,影响所有协作者,必须提前通知团队。
3. 分支管理与协作开发
3.1 分支基础操作
查看分支:
bash复制# 本地分支
git branch
# 包含远程分支
git branch -a
分支切换与创建:
bash复制# 创建并切换分支
git checkout -b feature/new-module
# 强制切换(丢弃本地修改)
git checkout -f main
3.2 团队协作流程
标准协作流程:
bash复制# 获取最新代码
git fetch origin
# 合并上游修改
git merge origin/main
# 解决冲突后提交
git add .
git commit
# 推送到个人分支
git push origin feature/new-module
Rebase保持历史整洁:
bash复制# 变基到最新main分支
git rebase main
# 解决冲突后继续
git rebase --continue
# 强制推送(仅限个人分支)
git push -f origin feature/new-module
4. 暂存区高级管理技巧
4.1 精准控制暂存内容
部分暂存文件:
bash复制# 交互式选择变更
git add -p
# 暂存特定文件
git add src/utils.js
撤销暂存:
bash复制# 从暂存区移除单个文件
git reset HEAD config.yml
# 移除所有暂存(Git 2.23+)
git restore --staged .
4.2 状态检查与差异对比
详细状态查看:
bash复制# 完整状态报告
git status
# 简洁状态显示
git status -s
差异分析工具:
bash复制# 工作区与暂存区差异
git diff
# 暂存区与最新提交差异
git diff --staged
# 分支间差异
git diff main..feature/new-module
5. 高级场景解决方案
5.1 彻底重写提交历史
创建干净分支:
bash复制# 新建孤立分支
git checkout --orphan clean-branch
# 添加必要文件
git add .
# 首次提交
git commit -m "Initial commit"
# 删除旧分支
git branch -D main
# 重命名新分支
git branch -m main
# 强制推送
git push -f origin main
5.2 自动化提交检查
预提交钩子示例:
bash复制#!/bin/bash
MAX_SIZE=52428800 # 50MB
files=$(git diff --cached --name-only)
for file in $files; do
size=$(git cat-file -s :"$file" 2>/dev/null || wc -c < "$file")
if [ "$size" -gt "$MAX_SIZE" ]; then
echo "错误: $file 超过50MB限制"
echo "请使用Git LFS或移除此文件"
exit 1
fi
done
将此脚本保存为.git/hooks/pre-commit并赋予可执行权限,可自动拦截大文件提交。
5.3 子模块管理
添加子模块:
bash复制git submodule add https://github.com/user/repo.git vendor/repo
初始化已有子模块:
bash复制git submodule update --init --recursive
掌握这些Git技巧后,你将能够:
- 高效管理代码版本
- 安全处理大型文件
- 流畅进行团队协作
- 快速定位和解决问题
在实际开发中,建议结合GUI工具(如GitKraken、SourceTree)与命令行配合使用,可以显著提升工作效率。对于复杂场景,记得先在小仓库测试操作效果,再应用到主项目。
