Git是由Linus Torvalds为Linux内核开发而创建的分布式版本控制系统。主要特点:
存储项目历史记录和元数据的地方
项目历史中的一个快照,包含变更描述
独立开发线,用于隔离不同功能开发
准备提交的文件临时存储区
托管在服务器上的共享仓库
将不同分支的更改整合到一起
# Ubuntu/Debian
sudo apt-get install git
# CentOS/RHEL
sudo yum install git
# macOS
brew install git
git config --global user.name "你的姓名"
git config --global user.email "你的邮箱"
git config --global core.editor "vim"
| 命令 | 说明 | 示例 |
|---|---|---|
git init |
初始化新仓库 | git init project-name |
git clone |
克隆远程仓库 | git clone https://github.com/user/repo.git |
git status |
查看仓库状态 | git status |
| 命令 | 说明 | 示例 |
|---|---|---|
git add |
添加文件到暂存区 | git add file.txt |
git commit |
提交更改 | git commit -m "描述" |
git rm |
删除文件 | git rm file.txt |
git mv |
移动或重命名文件 | git mv old.txt new.txt |
| 命令 | 说明 | 示例 |
|---|---|---|
git branch |
列出、创建或删除分支 | git branch feature |
git checkout |
切换分支 | git checkout feature |
git merge |
合并分支 | git merge feature |
git rebase |
变基分支 | git rebase main |
| 命令 | 说明 | 示例 |
|---|---|---|
git push |
推送到远程仓库 | git push origin main |
git pull |
从远程拉取更新 | git pull origin main |
git fetch |
获取远程更新 | git fetch origin |
git remote |
管理远程仓库 | git remote -v |
# 创建项目目录
mkdir my-project
cd my-project
# 初始化Git仓库
git init
# 添加远程仓库
git remote add origin https://github.com/user/my-project.git
# 查看状态
git status
# 添加文件到暂存区
git add .
# 提交更改
git commit -m "初始化项目"
# 推送到远程仓库
git push -u origin main
# 创建新分支
git branch feature-login
# 切换到新分支
git checkout feature-login
# 或者使用简写
git switch feature-login
# 在新分支上开发
git add .
git commit -m "实现登录功能"
# 切换回主分支
git checkout main
# 合并功能分支
git merge feature-login
# 删除已合并的分支
git branch -d feature-login
# 查看提交历史
git log
# 简洁格式查看
git log --oneline
# 查看图形化历史
git log --graph --oneline --all
# 查看特定文件的更改历史
git log -p file.txt
# 撤销工作区的修改
git checkout -- file.txt
# 撤销暂存区的文件(取消add)
git reset HEAD file.txt
# 撤销最近一次提交(保留更改)
git reset --soft HEAD~1
# 撤销最近一次提交(不保留更改)
git reset --hard HEAD~1
# 恢复已删除的文件
git checkout HEAD -- deleted-file.txt
# 创建标签
git tag v1.0.0
# 创建带注释的标签
git tag -a v1.0.0 -m "版本1.0.0发布"
# 查看标签
git tag
# 推送标签到远程
git push origin v1.0.0
# 推送所有标签
git push origin --tags
# 储藏当前工作
git stash
# 查看储藏列表
git stash list
# 恢复最近储藏
git stash pop
# 应用特定储藏
git stash apply stash@{1}
# 删除储藏
git stash drop stash@{0}
# 合并时发生冲突
git merge feature-branch
# 查看冲突文件
git status
# 手动解决冲突后标记为已解决
git add resolved-file.txt
# 完成合并
git commit
# 设置默认编辑器
git config --global core.editor "vim"
# 设置差异工具
git config --global merge.tool "vimdiff"
# 设置别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
# 颜色输出
git config --global color.ui auto
# 设置默认分支名称
git config --global init.defaultBranch main
创建 .gitignore 文件:
# 编译输出
*.class
*.exe
*.dll
# 日志文件
*.log
# 依赖目录
node_modules/
vendor/
# 系统文件
.DS_Store
Thumbs.db
# 编辑器文件
.vscode/
.idea/
类似SVN,所有开发者直接向主分支提交代码。
每个新功能在独立分支开发,完成后合并到主分支。
严格的分支模型,包含功能分支、发布分支、热修复分支等。
每个开发者fork主仓库,通过Pull Request贡献代码。
# 开始二分查找
git bisect start
# 标记错误提交
git bisect bad
# 标记正确提交
git bisect good v1.0.0
# Git会自动在中间提交测试,直到找到问题提交
# 添加子模块
git submodule add https://github.com/user/lib.git
# 初始化子模块
git submodule init
# 更新子模块
git submodule update
在 .git/hooks/ 目录下添加脚本,在特定事件发生时自动执行。
| 问题 | 解决方案 |
|---|---|
| 提交了错误信息 | git commit --amend |
| 提交了错误文件 | git reset HEAD~1 |
| 分支合并错误 | git merge --abort |
| 需要撤销远程提交 | git revert <commit> |
| 找回删除的分支 | git reflog |