一文学会Git常用语法
背景
可以说Git是任何一个程序员都逃不开的存在,在研发过程中,是否曾因对Git掌握不熟,而犯错误呢?本文适合使用过Git或稍微有基础者。来吧,让我们跟上这篇文章走上Git之旅。
文章概览
- Git原理
- Git常用命令
- 分支管理
- Git工具篇
1.Git原理
本地工作区
、本地暂存区
、本地仓库
、远程仓库
之间数据流程图如下:
graph LR
A(本地工作区)-.git add.->B(本地暂存区)-.git commit.->C(本地仓库)-.git push.->D(远程仓库)
B(本地暂存区)-.git reset.->A(本地工作区)
D(远程仓库)-.git fetch.->C(本地仓库)
D(远程仓库)-.git pull.->A(本地工作区)
本地工作区
:本地保存代码的文件夹本地暂存区
:暂存区是一个文件,保存工作区中修改的文件名称本地仓库
:暂存区的改动提交到本地仓库,保存元数据和对象的数据库远程仓库
:远程代码仓库
2.Git常用命令
git init <directoryName>
:初始化本地工作目录,跟目录名git config --list
:列出所有配置git config --global user.name yutao
:配置提交人名称git config --global user.email [email protected]
:配置提交人邮箱git clone <remoteBaseName>
:克隆远程仓库到本地工作目录,跟远程仓库地址git fetch
:从远程仓库获取最新代码到本地,不改变工作区或本地分支代码git fetch <remote>
:抓取指定远程仓库git pull
:不仅从远程仓库获取最新代码,而且还自动将这些更改合并到本地工作区或本地分支git pull --rebase <remote> <localbranchname>
:拉取远程分支,但过滤合并提交(自动产生)、重复提交git push <remote> <localBranceName>
:推送本地分支到远程分支git push origin dev:test
:将本地dev分支推送到远程test分支上git branch
:查看本地分git branch -r
:查看远程分支git branch -a
:查看所有分支,包括本地和远程git branch <branchName>
:创建新分支,比如当前在master分支,既基于当前master分支创建git branch -d <branchName>
:删除本地分支git checkout <branchName>
:切换分支git checkout -b <branchName>
:创建并切换到新分支,比如当前在master分支,既基于当前master分支创建git add <fileName>
:将工作目录修改文件添加到暂存区git reset
:有3种模式,soft、mixed、hard,默认mixed模式。soft将撤回的代码存放到暂存区,mixed将撤回的代码放到工作区,hard彻底回退到某个版本,丢弃撤回的代码本地没有commit代码也将擦除。git reset <fileName>
:将暂存区文件撤销到工作区,撤销之前的git add操作git reset HEAD^
:回退所有内容到上个版本git reset HEAD^ <filename>
:回退某个文件到上个版本git reset <commitID>
:回退到指定版本git checkout --fileName
:清除工作区的改动,回到跟版本库一样的状态git stash/git stash push
:现在想要切换分支,但是还不想要提交之前的工作,所以贮藏修改,贮藏被推送到栈上,再看工作目录是干净的git status
:检查当前文件状态,工作目录文件只有两种状态已跟踪
或未跟踪
,未跟踪表示未纳入git版本管理git commit -m <comments>
:将暂存区改动提交到本地仓库git commit -a -m <comments>
:提交之前不再需要 git add 文件, -a选项使本次提交包含了所有修改过的文件git commit --amend -m <comments>
:将新修改的代码追加到前一次提交的commit中git commit --amend --no-edit
:不更改前一次提交的备注信息情况下,追加新的修改到上一次commit中git rm --cached <fileName>
:把文件从暂存区删除,但仍保留在工作目录中,且未被git跟踪rm fileName->git rm <fileName>
:把文件从工作目录中删除git mv <fileName> <newFileName>
:修改工作区文件名git stash
:将工作目录的文件修改与暂存区未完成的修改保存到一个栈上,然后可以切换到其他分支,贮藏的改动任何时候都可重新应用这些改动git stash list
:查看贮藏的东西git stash apply/pop
:还原最近一次贮藏git stash apply stash@{2}
:还原指定ID的贮藏git stash -u
:贮藏未跟踪的文件git stash branch <branchName>
:从贮藏创建分支git clean -n
:n参数先看看会删掉哪些文件git clean -f
:若参数clean.requireForce未改为false,则需要-f参数对未跟踪文件强制删除git clean -d
:删除未跟踪的目录git log
:查看git日志,最新提交在最上面git log --pretty=format:"%h - %an, %cn, %cd : %s"
:格式化日志,%h提交的简写哈希值,%an作者名字,%cn提交者名字,%cd作者修订日期,%s提交说明git log --pretty=format:"%h %s" --graph
:用ASCII字符串来形象地展示你的分支、合并历史git log --oneline --all --graph
:查看git日志,每行只显示哈希值和提交说明git relog
:引用日志,可以查看所有分支的所有操作记录,包括被删除的commit和reset操作git remote -v
:查看所有远程仓库git remote add <shortname> <url>
:添加一个新的远程Git仓库,同时指定一个方便的使用的简写git remote show <remote>
:查看某一个远程仓库的更多信息git remote rename <a> <b>
:远程仓库重命名git remote remove <remote>
:删除远程仓库,本地将看不到关联的远程仓库git merge <branchename>
:git checkout master,然后执行git merge hotfix,既将hotfix分支代码合并到mastergit rebase <branchename>
:变更分支的基线,比如master分支上点A,以A点创建feature分支,然后推进D、E两提交。此时master分支也推进B、C两个提交,此时要对feature进行rebase,则checkout到feature分支,执行git rebase master,就会把D、E两点提交连接到C点后面git reset <commitid> --hard
:git relog查看commitid,撤销rebase操作git reset ORIG_HEAD
:撤销刚刚rebase操作git rebase --continue
:在rebase的过程中,可能会出现冲突conflict情况,git会停止rebase,解决冲突后git add更新内容到索引,无需执行git commit,只要执行本命令,git会继续rebase余下git rebase -i [startpoint] [endpoint]
:合并多个commit为一个,startpoint为开区间既要找目标的前一个id,endpoint闭区间,假如有两行pick eaca5fe add a.txt, s 7fc6da4 add b.txt,保存退出,再继续修改合并备注git revert <commitid>
:撤销提交,git revert用一个新的commit回滚之前的commit,HEAD继续前进,reset是把HEAD向后移动一下
3.分支管理策略
分支管理策略目前有git flow、github flow、gitlabflow,在过去的开发经验中,个人觉得git flow更适合本地团队分支管理。git flow主要分支如下:
master
:主分支,主分支的每个版本都是质量稳定和功能齐全的发布版hotfix
:紧急修复当前发布版本bug,从master分支创建,修复后合并回master、release、developrelease
:准发布版本分支,从develop分支创建,仅对这个预发版本问题进行修复,修复后合并回developdevelop
:基于主分支创建,用于日常开发,存放最新开发版本代码,当开发分支稳定后,可以发布release版feature
:基于develop分支创建,开发新模块,开发结束合并回develop分支
4.Git工具篇
常用的git图形工具如idea、sourcetree、git自带的gitk等。个人经验git bash、gitk最基础,在各种环境下都能使用。在合并代码冲突时可以配置一下第三方工具提供效率,比如p4merge,需要提前下载https://www.perforce.com/products/helix-core-apps/merge-diff-tool-p4merge,配置如下:
|
|
总结
Git作为代码管理工具,是程序员开发必备技能,掌握常用命令,大大提高开发效率。