早期工作时候在当时的公司里使用过Git管理代码,当时只是停留在会用就好.对于Git并没有一个整体的概念,以及深入的理解.
最近要将代码版本管理从SVN(Subversion)迁移到Git仓库,买了《GitHub入门与实践》补充一下Git知识.所谓工欲善其事,必先利其器:-)
一、关于Git
- Linux的创始人Linus Torvalds在2005年开发了Git的原型程序,由于linus的本人的影响力和Git在功能及性能上的无可挑剔,程序员们愿意接受Git.随着众多开发者的努力,加之GitHub的普及,使用Git的人越来越多.
- Mac中已预装了Git,系统版本10.13.6的terminal中使用
git version命令可以看到版本为git version 2.17.1 (Apple Git-112) - 版本管理器分为两种类型:集中型 (SVN)和分散型 (Git). 各有各的优势,只不过集中型相对简单.
二、一些Git命令
-
全局配置
- 姓名:
git config --global user.name "your name" - 邮箱:
git config --global user.email "your email" - Git命令颜色(增加辨识度):
git config --global color.ui auto
- 姓名:
-
git init——本地仓库初始化:cd到指定目录下,执行git init.不进行初始化在对应文件夹下将不能进行Git操作 -
git status——查看Git仓库的状态,新增的文件会在Untracked files下显示 -
git add——向暂存区添加文件,文件会为tracked状态-
git add xxx提交指定文件 -
git add -A提交所有变化 -
git add -u提交被修改(modified)和被删除(deleted)文件,不包括新文件(new) -
git add .提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
-
-
git commit——将add到暂存区的内容保存到仓库- 直接执行
git commit会进入编辑器,编辑提交的内容描述.输入i插入,写好后esc输入:q直接退出:wq保存退出 -
git commit -m "xxx"xxx为本次提交的概述信息 -
git commit -am "xxx"对于tracked的文件可以直接使用-am
- 直接执行
-
git log——查看提交日志-
git log -- pretty=short显示更为简要的概述信息 -
git log xxxxxx为指定文件 -
git log -p查看提交所带来的改变 -
git log -p xxx查看指定文件的提交日志
-
-
git log --graph——以图表形式查看分支 -
git reflog——查看当前仓库执行过的操作日志 -
git diff——查看当前工作树和暂存区的差别-
git diff HEAD查看与最新提交的差别.HEAD指向当前分支的最新一次提交的指针
-
-
git branch——显示分支一览表 -
git checkout -b——创建并切分支-
git checkout -b bug-A=git branch bug-A+git checkout bug-A -
git checkout master切换到master分支 -
git checkout -切换到bug-A分支,使用-切换到上一分支 -
git checkout -b bug-A origin/bug-A获取远程仓库的bug-A分支到本地,并命名为bug-A
-
-
git merge——合并分支(在对应的master分支进行操作)- 直接执行
git merge会进入编辑器,接下来操作同上面的commit -
git merge --no-ff xxxxxx为对应分支名称
--no-ff的区别
- 直接执行
-
git reset——回溯历史版本-
git reset --hard xxxxxx为版本哈希值,哈希值可用log或reflog命令查看
-
-
git commit --amend——修改上一条commit提交记录的概述 -
git rebase -i——压缩历史,上一次的commit有个小错误,想这一次提交与前一次的概述合并,可以用git rebase -i HEAD~2进入编辑器修改内容(前2次的就~3,以此类推) -
git remote add——添加远程仓库,例:git remote add origin git@github.com:用户名/xxx.git远程仓库名称设置为origin(标识符) -
git push——推送至远程仓库,例:git push -u origin master命令将本地的master分支推送到origin,-u选项会指定为origin -
git clone——获取远程仓库,例:git clone git@github.com:用户名/xxx.git,克隆后默认处于master分支 -
git pull——获取最新的远程仓库分支,例:git pull origin branch-A将本地的branch-A分支更新为最新状态 -
git tag xxx——创建标签-
git tag -a xxx -m 'my version xxx'创建一个含附注的标签
-
-
git branch -D xxx——删除分支
三、Git Flow——以发布为中心的开发者模式
以下是一个分支策略流程: By Vincent Driessen
① 从开发版的分支(develop)创建工作分支(feature branches),进行功能的实现或修正
② 工作分支(feature branches)的修改结束后,与开发版的分支(develop)进行合并
③ 重复上述①和②,不断实现功能直到可以发布
④ 创建用于发布的分支(release branches),处理发布的各项工作
⑤ 发布工作完成后与master分支合并,打上版本标签(Tag)进行发布
⑥ 如果发布的软件出现Bug,以打了标签的版本为基础进行修正(hotfixes)
A successful Git branching model
这样的流程亮点在于考虑了Bug的应急措施,但是有时显得过于复杂,分支很多,所以可以结合自身的项目场景在此git flow上,略微调整.












网友评论