Git初体验
本文参考文献:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
Git初体验
Git简介
Linus在2005年花了两周时间自己用C写了一个分布式版本控制系统Git。一个月之内,Linux系统的源码已经由Git管理了!Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。Git的基本操作如下图所示:
Git各应用场景
场景一:Git本地版本库的用法
该场景主要是在本地对项目进行管理
1.初始化一个本地版本库
git init #在项目文件夹根目录创建一个初始化一个本地版本库
如上图所示,已成功地初始化一个本地版本库,在项目根目录中也会出现一个.git文件夹,.git文件夹是Git用来跟踪管理版本库的。如下图所示:
2.查看当前工作区(Workspace)状态
git status #查看Git本地版本库当前 workspace 的状态
可以从上图看出此时本地版本库中还未提交任何的记录
3.将文件提交至暂存区或取消提交至暂存区
git add [FILENAME] #将文件添加到暂存区(Index)
如下图所示,在命令行中输入命令执行后没有任何显示,即说明添加成功,“没有消息就是好消息”。
可以看到源代码管理(Ctrl + Shift + G)中的main.cpp的标记U已经变成了标记A:
如果要取消暂存则可以使用如下命令:
git reset HEAD[FILENAME] #将暂存更改的文件从【暂存的更改】列表里取消,重新回到【更改】列表
如下图所示,在执行了相应的命令后,main.cpp的标记又变回了U
4.将文件从暂存区(Index)提交至仓库
git commit -m "wrote a commit log infro" #将暂存区里的文件提交至仓库
如上图所示暂存区的文件已经提交至仓库,1 file changed(即一个文件被改动,提交了一个main.cpp文件), 9 insertions(即插入了9行内容,本cpp源代码共有9行)
5.查看提交日志
git log #查看提交日志
6.修改文件
对刚刚提交的cpp文件进行修改并保存(修改的内容为多输出一行Fighting!) ,此时main.cpp在源代码管理中的图标变成了M。
执行git status命令可以看到提示main.cpp已修改
git diff #该命令可以让我们看到具体的修改
7.版本回退
1 git reset --hard HEAD^ #回退到HEAD的前一个版本 2 git reset --hard HEAD^^ #回退到HEAD的前两个版本 3 git reset --hard HEAD~100 #回退到HEAD的前100个版本 4 git reset --hard 128个字符的commit-id 5 git reset --hard 简写为commit-id的头几个字符
如上图所示,当前main.cpp有3个版本,下图所示分别是在当前状态使用了HEAD^与HEAD^^之后的结果:
场景二:Git远程版本库的基本用法
1.将本地仓库推送到github仓库
$ git remote add origin git@github.com:YEJIAYUN/learngit.git
#将本地仓库与远程仓库关联
git push -u origin master #将本地库的内容推送到远程库上
从上述的图中可以看到,本地仓库已经被推送到了github的远程仓库上
2.从远程库克隆
git clone https://github.com/YEJIAYUN/gitskills.git
git clone git@github.com:YEJIAYUN/gitskills.git #Git支持多种协议,所以这两种形式都可以克隆远程库,不过使用ssh协议速度会更快
此时远程仓库已被克隆至本地仓库
场景三:团队项目中的分叉合并
1.将远程库克隆至本地仓库
在场景二中已经演示过,在此略过。
2.创建一个分支
该分支应该只负责单一功能模块或代码模块的版本控制,在此我们建立一个mybrach分支
git checkout -b mybranch #建立mybranch分支
可以从上图看到,此时分支已经切换至mybranch分支。
3.查看当前所处分支
git branch #查看当前所处分支
可以看到当前处于mybrach分支,现在可以在mybrach分支上进行自己的操作,对项目进行修改并提交至仓库
4.合并工作至主分支
git checkout [主分支名] #切换至主分支
git pull <远程主机名> <远程分支名>:<本地分支名> #将远程仓库同步至本地
git merge --no-ff [分支名] #不要采用快进式合并
5.最后将合并好的分支push至远程仓库
git push <远程主机名> <本地分支名>:<远程分支名>
登陆至github上查看,可以发现本地仓库已经推送至远程仓库中
场景四:Git Rebase
一般我们在软件开发的流程中,有一个朴素的版本管理哲学:开发者的提交要尽量干净、简单。开发者要把自己的代码修改按照功能拆分成一个个相对独立的提交,一个提交对应一个功能点,而且要在对应的 commit log message 里面描述清楚。因此在合并和 push 之前检查修改一下 commit 记录时常需要。
1.切换至mybranch分支,对项目进行修改操作,使用git log命令来查看操作记录:
git rebase -i [startpoint] [endpoint]
#i的意思为interactive,代表弹出交互式的界面让用户编辑完成合并操作
2.执行上述命令,会打开命令行文本编辑器
3.将第二次的记录删除
4.保存并退出命令行文本编辑器后会出现冲突
5.在文本编辑器内处理冲突后,将文件添加至暂存区,并使用如下命令:
git rebase --continue
6.查看log可以看到,之前的“添加数字2”已经消失
7.切换至main分支,并使用如下命令进行合并
git merge --no-ff mybranch
8.最后将代码push到GitHub上即可
小结
在完成此次作业之前我并没有接触过Git,经过孟老师在课堂上的讲解与自己课下的实战演练,我明白了Git仓库管理的各种实现细节,对于各种常用的命令也熟悉了许多,受益匪浅。