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过程的理解会更有帮助。此外,向老师致谢,感谢老师上课区别于传统“软件工程”的教学,个人认为从软件本身着手学软件工程,会有更大的收益。本人才疏学浅,有所遗漏、错误,请留言,谢谢。

 

posted @ 2020-10-20 13:07  没有蛀牙才是永远的神  阅读(138)  评论(0)    收藏  举报