gitの初体验
1.引言
本科时的项目合作都是“单人作战”,一人完成一部分,鲜有git的用武之地。借着高级软件工程的教学,学习加深一下对于git的理解。作此博客,以帮助读者少走一些弯路。
本文参考孟宁老师的文章:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg。
2.前期准备
本部分主要在于git在windows平台上的安装和简单配置。
2.1下载
由于git下载服务器连接不畅,故推荐前往https://npm.taobao.org/mirrors/git-for-windows/ 下载。RC就是Release Candidate,正式发行候选版,下载时尽量首选较新版本且rc数较高的版本。
安装过程简单,略。一路next即可。安装完成后一般无需再配置环境变量,cmd中git命令没有报错即可。
2.2简单配置
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。打开cmd,输入下面两行代码,引号中的内容自己定义。
1 $ git config --global user.name "Your Name" 2 $ git config --global user.email "email@example.com"
2.3 git概念介绍
git中最重要的概念是版本库(仓库),同时git还对于每个仓库拥有一个暂存区,暂存区中保存了已做未提交到仓库的修改。git用head标识当前版本,head^或者head~1表示上一个版本,同时可以用git log及git reflog来分别查看提交历史和命令历史。

3.场景1 Git本地库
首先创建一个空白文件夹,此处名为gitTest。执行git init命令来在一个空白文件夹上创建新的git版本库。

第二使用git status,查看git状态,这边表示暂存区中还没有修改,仓库中还没有提交。

因此我们创建一个文件1.txt,使用git add命令将其加入暂存区。我们发现了暂存区中的文件增加了。

怎么将没有commit的文件回退?git reset 或 git checkout, 但是前者是将文件从暂存区中取消,checkout只是取消文件的修改。
现在试试commit。ohh,因为没有加commit的注释,所以需要在下图中填写完整。按照vim文本编写的方法,在第一行按照要求写上注释,最后esc+冒号+wq! 即可保存退出。

git log看提交历史,从当前版本head到仓库master分支,并且有唯一的commit号
git
git reflog 显示提交历史。

使用git reset --hard HEAD~1 回到之前版本
使用git reset --hard 1094a回到未来,因为回到过去后log中就没有未来的stage了,所以需要记住未来的id
4.场景2 Git远程版本库的基本用法
在github新创建一个远程仓库,并在本地进行clone

第一次clone,需要登陆github

这样即为 clone成功。

git remote可以看出远程仓库位置。

在本地仓库下新增一个文件,git add,git commit... 按照第一部分的方法在本地仓库上commit。这次使用的是显式著名message内容,即-m的用法。
用git push -u origin master 将本地master分支推送到origin远程分支。

可以看见提交已经成功了。

在远程对于一个文件进行修改,拉回本地仓库。使用git pull。

非常sweet地显示出git diff。而且是fast forward模式。就是速度有一点慢。
5.场景3 团队项目中的分叉合并
场景一和场景二都相当于自己一个人的单独操作,场景三毫无疑问模拟的是团队进行项目开发时的分叉与合并的情况。很显然情况更加复杂了,因为理论上讲这样子团队合作就不是串行的了,增加了许多问题。
首先我们看看有哪些分支。可以看出本地仓库和远程仓库抖显示出来了,dev分支是我clone之前就创建好的。

使用git branch 创建分支,虽然checkout方法也可以创建分支,但是checkout功能比较多,这是比较迷惑行为,所以不建议。
三个操作分别是创建本地分支,推送分支到远程以及查看所有分支,创建ok。

使用git branch -d 删除本地分支

使用git checkout切换分支

开始实验分支合并,首先创建一个3.txt,commit到test分支。

方法1:使用git merge合并分支。这种合并会将master分支与mybranch分支合并到同一条时间线中,也就是所谓的“快进式合并”。
显示出branch比远程仓库快了一个commit。

方法2:git merge --no-ff mybranch。从分支历史上就可以看出分支信息。


6.场景4 git rebase
git多个提交虽然清楚,但是多了就比较混乱,可能会引起两个问题: 1.不利于代码 review, 2.会造成分支污染。
git rebase指令可以重新整理提交记录,让log记录将来更容易回顾参考,其命令格式大概如下:
git rebase -i [startpoint] [endpoint]

其中,i表示interactive,即交互,startpoint为开始点,endpoint为终止点,二者之间的范围即为该指令的编辑区间。

比如,需要汇合三个过去的提交,上图前三行显示的就是过去的三次提交(head~3), 按照命令缩写,只需要把pick(缩写p)改成squash(s)即可。
比如一开始是三次提交,message是3,4,5。

使用git rebase -i HEAD~3

将其修改为


结果为:

可以看出3 4 两次commit已经rebase了。
7. 总结
从这次学习中发现,虽然git有gui界面比如小乌龟以及github desktop,但是还是需要手动用命令行操作一下,这样对于git过程的理解会更有帮助。此外,向老师致谢,感谢老师上课区别于传统“软件工程”的教学,个人认为从软件本身着手学软件工程,会有更大的收益。本人才疏学浅,有所遗漏、错误,请留言,谢谢。

浙公网安备 33010602011771号