早期工作时候在当时的公司里使用过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 xxx
xxx为指定文件 -
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 xxx
xxx为对应分支名称
- 直接执行
-
git reset
——回溯历史版本-
git reset --hard xxx
xxx为版本哈希值,哈希值可用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
选项会指定为origingit 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)
这样的流程亮点在于考虑了Bug的应急措施,但是有时显得过于复杂,分支很多,所以可以结合自身的项目场景在此git flow上,略微调整.