Git是目前最流行的分布式版本控制系统,每个程序员都应该熟练掌握。但是很多人只会用add、commit、push、pull等基础命令,对Git的高级用法了解不多。今天就来分享一些Git版本控制的高级用法,帮助大家提升团队协作效率。
1. 分支管理策略
Git Flow工作流:
- master:主分支,存放稳定发布版本
- develop:开发分支,存放最新开发代码
- feature/*:功能分支,从develop切出,开发完成后合并回develop
- release/*:发布分支,从develop切出,用于发布前测试和修复
- hotfix/*:热修复分支,从master切出,修复线上紧急bug后合并回master和develop
# 创建功能分支
git checkout -b feature/user-login develop
# 开发完成后合并回develop
git checkout develop
git merge --no-ff feature/user-login
git branch -d feature/user-login简化工作流(适合小团队):
- master:主分支,稳定版本
- dev:开发分支
- 直接在dev上开发,稳定后合并到master
2. 变基(rebase)
rebase可以把一个分支的提交"搬"到另一个分支上,让提交历史更加线性整洁。
# 在feature分支上rebase master
git checkout feature
git rebase master
# 如果有冲突,解决后继续
git add .
git rebase --continue
# 放弃rebase
git rebase --abort注意: 不要对已经推送到公共仓库的提交做rebase,会导致其他人的代码混乱。rebase只适合本地未推送的提交。
3. 交互式rebase
交互式rebase可以编辑、删除、合并、重新排序提交。
# 编辑最近3次提交
git rebase -i HEAD~3会打开编辑器,显示:
pick a1b2c3d 提交1
pick d4e5f6g 提交2
pick h7i8j9k 提交3可以修改为:
- pick:保留该提交
- reword:保留提交,但修改提交信息
- edit:保留提交,但暂停以便修改
- squash:合并到前一个提交
- fixup:合并到前一个提交,丢弃提交信息
- drop:删除该提交
合并多次提交:
git rebase -i HEAD~3
# 修改为
pick a1b2c3d 提交1
squash d4e5f6g 提交2
squash h7i8j9k 提交3
# 保存后编辑合并后的提交信息4. 储藏(stash)
当你在一个分支上工作到一半,需要切换到另一个分支处理紧急事情,但又不想提交半成品代码时,可以用stash储藏当前修改。
# 储藏当前修改
git stash
# 查看储藏列表
git stash list
# 恢复最近的储藏
git stash pop
# 恢复指定储藏
git stash apply stash@{1}
# 删除指定储藏
git stash drop stash@{0}
# 清空所有储藏
git stash clear
# 储藏包括未跟踪的文件
git stash -u5. 撤销修改
撤销工作区修改:
# 撤销单个文件的修改
git checkout -- filename
# 撤销所有文件的修改
git checkout -- .撤销暂存区修改(已经add但未commit):
# 取消暂存单个文件
git reset HEAD filename
# 取消暂存所有文件
git reset HEAD .撤销提交(已经commit但未push):
# 撤销最近一次提交,保留修改在工作区
git reset --soft HEAD~1
# 撤销最近一次提交,保留修改在工作区和暂存区
git reset --mixed HEAD~1
# 撤销最近一次提交,彻底丢弃修改
git reset --hard HEAD~1撤销已经push的提交:
# 生成一个反向提交,撤销指定提交的修改
git revert commit_id
# 撤销最近一次提交
git revert HEAD6. 查看历史
# 查看提交历史
git log
# 一行显示提交历史
git log --oneline
# 图形化显示分支合并历史
git log --graph --oneline --all
# 查看指定文件的修改历史
git log -p filename
# 查看指定行的修改历史
git blame filename
# 查看某次提交的详细修改
git show commit_id
# 比较两个分支的差异
git diff branch1 branch2
# 比较工作区和暂存区的差异
git diff
# 比较暂存区和最新提交的差异
git diff --cached7. 标签管理
# 列出所有标签
git tag
# 创建轻量标签
git tag v1.0.0
# 创建附注标签(推荐)
git tag -a v1.0.0 -m "版本1.0.0发布"
# 查看标签信息
git show v1.0.0
# 推送单个标签到远程
git push origin v1.0.0
# 推送所有标签到远程
git push origin --tags
# 删除本地标签
git tag -d v1.0.0
# 删除远程标签
git push origin :refs/tags/v1.0.08. 别名配置
配置Git别名,简化常用命令:
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --graph --oneline --all"
git config --global alias.unstage "reset HEAD"
git config --global alias.last "log -1 HEAD"配置后可以用git st代替git status,git co代替git checkout等。
9. 其他实用技巧
搜索提交历史:
# 搜索提交信息包含关键词的提交
git log --grep="关键词"
# 搜索修改内容包含关键词的提交
git log -S "关键词"临时切换到某个提交:
# 检出某个提交(只读查看)
git checkout commit_id
# 回到原来的分支
git checkout master保存用户名和邮箱:
git config --global user.name "Your Name"
git config --global user.email "your@email.com"设置默认编辑器:
git config --global core.editor "vim"忽略文件权限变化:
git config --global core.filemode false总结
Git是一个强大的版本控制系统,掌握高级用法能大大提升开发效率和团队协作能力。本文介绍了分支管理、变基、交互式rebase、储藏、撤销修改、查看历史、标签管理、别名配置等高级用法,希望对大家有所帮助。
Git的学习是一个循序渐进的过程,建议大家在实际工作中多尝试、多练习,逐步掌握Git的高级用法。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录