Loading

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仓库管理的各种实现细节,对于各种常用的命令也熟悉了许多,受益匪浅。

 

posted @ 2020-10-14 19:10  DreamD  阅读(123)  评论(0编辑  收藏  举报