淋雨的笔记:初识Git篇
课堂上对Git有了一丢丢了解,但是得知此事须躬行,实际操作出真知。So,参考孟宁老师的博客和广大互联网贡献者的知识结晶,动手学习做一下。此文章主要作为本人学习笔记而写,文笔粗糙,知识浅薄,若有不足,请多多指点。
本博客是在读了孟宁老师的博客之后写的,老师文章中讲解的一些概念,Git的运行机制等,本文中不再出现。so,下面的文章链接很重要。
参考文章:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
一、Git的安装和配置
(1)可以取Git官网进行下载,网上很多教程
(2)我是通过VS2017下载的,教程链接
二、初次了解Github
Git和Github不是一回事,但是两者的关联很大。Git,是一个工具。我们所做的项目有时候经常会需要进行修改等操作,导致项目有很多版本,而Git就是对这些版本进行控制处理的一个系统工具,可以在不联网的情况下使用。而GitHub,是一个非常适合程序员交流的网站,可以将仓库设为私有(可选定人看到代码和修改代码)和公有(任何人均可看到,但可选择别人是否能修改代码),有利于项目团队合作,方便项目的共享和管理。
(1)Github账号注册
我在注册时遇到下面的问题,无法注册成功,后来百度之后发现,用手机网络注册就不会出现这个问题。

(2)访问Github时比较慢,修改电脑的hosts文件,可以加快访问速度。链接
(3)在Github上创建一个远程仓库。首先,点击右上角的“+”,选择“New repository”,然后填写必要的信息进行创建。


三、Git与Github的联动
我们在安装完成Git之后,电脑上会有一个 Git Bash的图标
,双击打开,熟悉一些简单命令操作。
(1)git init:使得当前所在文件初始化一个Git本地版本库

如果你想指定一个文件夹来作为本地版本库,可以在命令行 cd进入该文件夹,然后执行git init即可,也可直接更改 git bash 默认路径(该文章中有提到一种设置方法),如我上图中的GitCloneFile文件夹即为设置之后的默认文件夹。在执行完git init之后的文件夹内,多了一个.git文件。

(2)git clone :将远程版本库克隆到本地完成本地版本库的初始化
我们已经在Github上创建了一个仓库如图:

现在我们就尝试把仓库克隆到本地:

克隆之后的文件夹如图:

(3)我们现在尝试模拟把本地仓库的文件上传到远程,我们在本地仓库helloGit文件夹内新建一个read.md文件,然后执行以下三个命令,查看执行效果。
git add -A //提交所有变化到暂存区(Index)
git commit -m "wrote a commit log infro” // 把暂存区里的文件提交到仓库
git push //把文件推到远程仓库
![]()


执行完之后,可以看到远程仓库中,的确有我们在本地新建的文件,提交成功。

(4)git log # 查看当前HEAD之前的提交记录,便于回到过去,从下图可以看到总共有两次提交记录。

(5)版本回退命令:
git reset --hard "HEAD^" 使版本回到上一个版本(HEAD要加双引号,因为cmd控制台中换行符默认是^,而不是\ ,所以^符号被git编译为换行符了)

在执行完之后,可以看到原来本地仓库中的read.md文件没有了,即最后一次提交的文件没有了,版本回退成功。
还有很多回退命令,如:
git reset —hard HEAD^^ git reset —hard HEAD~100
如上命令可以让HEAD回退到任意一个版本,比如HEAD^表示HEAD的前一个版本、HEAD^^表示HEAD的前两个版本、HEAD~100表示HEAD的前100个版本,也可以用版本号字符串来指定任意一个版本。
(6)git reflog # 可以查看当前HEAD之后的提交记录,便于回到未来
(7)以上Git命令大多是针对在本地仓库上进行操作,下面我们试下远程版本库的基本命令。
先贴上一些针对远程仓库的命令(这些命令的介绍,节选自孟老师文档):
-
git clone命令官方的解释是“Clone a repository into a new directory”,即克隆一个存储库到一个新的目录下。
-
git fetch命令官方的解释是“Download objects and refs from another repository”,即下载一个远程存储库数据对象等信息到本地存储库。
-
git push命令官方的解释是“Update remote refs along with associated objects”,即将本地存储库的相关数据对象更新到远程存储库。
-
git merge命令官方的解释是“Join two or more development histories together”,即合并两个或多个开发历史记录。
-
git pull命令官方的解释是“Fetch from and integrate with another repository or a local branch”,即从其他存储库或分支抓取并合并到当前存储库的当前分支。
下面我们尝试两条简单的命令:
直接输入git remote可以看到git clone之后默认的远程存储库名称为orgin
git remote -v 可以查看详细的远程存储库信息,包括fetch(抓取)的远程存储库URL和push(推 送)的远程存储库URL

git pull 把远程仓库存储库或分支抓取并合并到当前存储库的当前分支。

pull之后,可以看到本地仓库中的read.md文件又出现了。之前我们执行版本回退命令,本地仓库中的read.md文件没有了,但是远程仓库中还有保留,因此我们从远程仓库pull,将远程仓库的内容取出并与本地的合并了。

三、VS中嵌入了Git,很是方便,动手试试。
环境:windows + VS2017 +Git
(1)打开vs2017,打开 “团队资源管理器”(不知道在哪,可以直接在vs右上角的搜索框进行搜索,快速打开)
(2)打开之后,点击 “克隆”,输入 在Github上的项目库的URL,点击进行克隆。如下图:(第一个图中,在GitHub获得URL;第二个图为VS中克隆项目)


(3)vs中修改文件后,提交到远程服务器
1.点击“更改”,并进行“提交”,此时更改提交到本地仓


2.在点击“同步”,进行“推送”,即可推送到远程仓库


四、Git的命令和操作忒多了,熟悉了上面的基本中的基本操作之后。我们开始模拟演练一下使用场景。
场景如下: 我们在Github上新建了一个远程仓库,用来存储一个项目。此时studentA 负责完成functionA,其他同学负责完成其他功能。那么A同学应该这么做呢?
1、克隆或同步最新的代码到本地存储库;
git clone https://github.com/wly-memory/train_rebase.git
2. Student A 为自己创建一个分支,该分支只负责functionA代码版本控制
git checkout -b A_branch //创建一个分支叫做A_branch,并切换至该分支 git branch // 查看所有分支

3. A同学在本地上提交了三次,才完成A功能。
使用以下两个命令进行本地上传:
git add -A //添加文件至索引区 git commit -m "commit log" //传至本地仓库
如图,A同学在A_branch分支共提交了三次:

4.最后,先切换回master分支,将远程origin/master同步最新到本地存储库,再合并A_branch到master分支,推送到远程origin/master之后即完成了一项开发工作。
git checkout main //切换到main分支 git pull // 将远程origin/master同步最新到本地存储库 git merge --no-ff A_branch //再合并mybranch到master分支 git push //推送到远程
此时我们在Github上可以看到有本地开发时有三次提交的文件和记录:


Rebase场景:
那么问题来了,我们可以看到提交记录里面有三次的提交记录。实际上,我们在提交到远程仓库时,不想让别人看到这么多次的本地提交记录,因为有些记录是不必要的。如果我们想把很多次的提交记录合并成一次,那么rebase变基操作可以试试。
此时,我们又向本地添加了 三个文本文件,做了三次提交操作,A.7.txt, A.8.txt, A.9.txt,然后我们执行以下指令尝试用rebase完成提交合并操作:
git checkout main //切换到主分支 git pull // 将远程origin/master同步最新到本地存储库 git checkout A_branch //切换到 A_branch分支 git rebase -i HEAD~3 // 将最后三次提交记录,进行合并为一次 git rebase main //解决冲突 git checkout main //切换到主分支 git merge --no-ff A_branch //关闭快进式合并,进行合并 git push //推向远程仓库
执行完以上命令之后,远端仓库可以看到提交记录如下图:
这个演练下来,我总共做了三次push操作:
(1)前三个点,是我在本地仓库进行了三次提交A.1txt,A.2.txt,A.3.txt,(未进行变基操作)
(2)中间三个点,是我在本地仓库进行了三次提交A.4txt,A.5.txt,A.6.txt ,我想进行变基操作,但是没成功(灬ꈍ ꈍ灬)。。。。所以提交记录为三次
(3)最后一个点 ,是我在本地仓库进行了三次提交A.7txt,A.8.txt,A.9.txt ,变基成功,所以提交记录中只显示有一次提交

以下,为进行变基操作的截图

在执行git rebase -i HEAD~3 命令时,会弹出以下编辑界面,请注意将“pick”改成“s”,第一次rebase,就出错在这里┭┮﹏┭┮


浙公网安备 33010602011771号