Git学习--初级

Git是一个分布式版本管理系统,是为了更好地管理Linux内核开发而创立的。

Git可以在任何时间点,把文档的状态作为更新记录保存起来。因此可以把编辑过的文档复原到以前的状态,也可以显示编辑前后的内容差异。

而且,编辑旧文件后,试图覆盖较新的文件的时候(即上传文件到服务器时),系统会发出警告,因此可以避免在无意中覆盖了他人的编辑内容。

管理历史记录的数据库

数据库是记录文件或目录状态的地方,存储着内容修改的历史记录。在数据库的管理下,把文件和目录修改的历史记录放在对应的目录下。

1、Git分为远程数据库和本地数据库:

  • 远程数据库:配有专用的服务器,为了多人共享而建立的数据库

  • 本地数据库:为了方便用户个人使用,在自己机器上配置的数据库。

数据库分为远程和本地两种。平时用手头上的机器在本地数据库上操作就可以了。如果想要公开在本地数据库中修改的内容,把内容上传到远程数据库就可以了。另外,通过远程数据库还可以取得其他人修改的内容。

2、修改记录的提交:

若要把文件或目录的添加和变更保存到数据库,就需要进行提交。

执行提交后,数据库中会生成上次提交的状态与当前状态的差异记录(也被称为revision)。

提交是以时间顺序排列状态被保存到数据库中的。凭借该提交和最新的文件状态,就可以知道过去的修改记录以及内容。

执行提交时,系统会要求输入提交信息。请务必输入提交信息,因为在空白的状态下执行提交会失败的。

3、工作树和索引

在Git管理下,大家实际操作的目录被称为工作树。

在数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域。

Git在执行提交的时候,不是直接将工作树的状态保存到数据库,而是将设置在中间索引区域的状态保存到数据库。因此,要提交文件,首先需要把文件加入到索引区域中。

所以,凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交。

Git的基础

1、安装

可以选择使用window工具,也可以选择使用命令行。这里先讲命令行

从这里下载安装

Redirecting Git for Windows' homepage...icon-default.png?t=M85Bhttp://msysgit.github.io/

设置用户名和电子邮件

2、新建本地数据库

先创建一个名为 mygit 的空文件夹,进入文件夹右键选择Git Bash Here

然后执行 init 指令:git init

也可以全部采用命令行:

$ mkdir tutorial
$ cd tutorial
$ git init

3、提交文件

查看工作群和索引的状态:git status

 

git status : 添加-s选项,可以不显示讲解,再添加-b选项,就不显示讲解,显示分支的名称。

然后在mygit文件夹中创建 git-study 文本文件,其中输入:学习 git,再查看状态

 

红色是指没有提交的修改

此时可以看出,不是历史记录文件的是 git-study.txt(也可以叫做没有提交的修改), 只要加入索引,就会是历史记录的对象

加入索引的指令是 add

//file填入文件名,通过空格分隔需要加入的多个文件
git add <file>..
//这个可以把所有文件加入索引
git add .

然后把git-study.txt文件加入索引

 加入索引后就可以提交了,

//""里面输入备注信息
git commit -m ""

 

 

这样没有提交的修改就没有了

然后来确认一下数据库的提交记录:

 gitk 使用工具:

 这里我在码云上创建了远程数据库practice。

4、push

为了将本地数据库的修改记录共享到远程数据库,必须上传本地数据库中存储的修改记录。

为此,需要在Git执行推送(Push)操作。执行Push之后,本地的修改记录会被上传到远程数据库。所以远程数据库的修改记录就会和本地数据库的修改记录保持同步。

可以为远程数据库的地址重命名并保存。这样,下次推送的时候就不需要输入长串的远程数据库地址了。所以先让我们以“origin”的名称命名一个远程数据库然后开始推送。

//添加远程数据库,可以使用remote指令。 <name>是注册名称,<url>是指定远程数据库的URL。
git remote add <name> <url>

5、clone

进行克隆(Clone)操作就可以复制远程数据库。

执行克隆后,远程数据库的全部内容都会被下载。之后您在另一台机器的本地数据库上进行操作。

克隆后的本地数据库的变更履历也会被复制,所以可以像原始的数据库一样进行查看记录或其他操作。

6、pull

进行拉取(Pull) 操作就可以把远程数据库的内容更新到本地数据库。

进行拉取(Pull) 操作,就是从远程数据库下载最近的变更日志,并覆盖自己本地数据库的相关内容。

7、练习

 通过运行以下指令,将创建于上一个页面的远程数据库的URL以“origin”命名注册。

 执行推送或者拉取的时候,如果省略了远程数据库的名称,则默认使用origin为远程数据库的名称,因此一般都会把远程数据库命名为origin

//向数据库推送,可以使用push命令。<repository>是推送的目标地址,<refspec>是指定推送的分支。
//<refspec>也是指当前推送分支名---当前分支名有错的话可能推送空白分支,会报”dose not match any"
git push <repository> <refspec>...

运行以下命令便可向推远程数据库origin进行推送。如果指定了-u运行选项,下一次开始就可以省略其后的分支名称。但是,首次运行指令向远程数据库推送时,不能省略远程数据库名称或分支名称。

git push -u origin master -f

 

该报错是因为你在本地仓库上的修改没有基于远程库最新版本,你的本地仓库版本落后于远程仓库。(这个报错告诉我们在本地开发的时候,要经常使用git pull获取远程分支最新改动,这样才能保证在最终git push的时候本地commit历史和远程commit历史是一致的)

这里应该是因为我在创建远程仓库的时候提示我提交README.md,我进行了编辑并提交,导致远程和本地冲突

解决方式一:强制推送--会导致远程的修改丢失——README.md没了

 

解决方式二:根据报错先pull

  • 此时可能会遇见报错: refusing to merge unrelated histories

 

这是因为一开始是通过git init初始化的,不是通过git clone方式建立的,导致远程和本地仓库不是统一的。

可以使用:git pull origin master –-allow-unrelated-histories 解决

  • 成功的话,远程修改的README.md文件就会拉取到本地仓库。

然后就可以继续Push了

//使用clone指令可以复制数据库,<repository>指定为远程数据库的URL,<directory>指定为复制目标目录的名称。
git clone <repository> <directory>

 

这时可以打开test文件,查看git-text.txt中内容是否与最先写入的一致。

  • 这时进入test文件进行操作,git bash here

首先对git-study.txt文件进行修改,比如增加一句话:add 测试

然后操作:

 

这时push就可以省略origin master了

再查看远程端,发现提交记录。

  • 从远程数据库pull

把前面test中推送的内容拉取到mygit:

在mygit中操作:

 

  • 合并修改记录

在执行pull之后,进行下一次push之前,如果其他人进行了推送内容到远程数据库的话,那么你的push将被拒绝。

这种情况下,在读取别人push的变更并进行合并操作之前,你的push都将被拒绝。这是因为,如果不进行合并就试图覆盖已有的变更记录的话,其他人push的变更就会丢失。

合并的时候,Git会自动合并已有的变更点!不过,也存在不能自动合并的情况。这时就需要手动合并了

执行合并即可自动合并Git修改的部分。但是,也存在无法自动合并的情况。

如果远程数据库和本地数据库的同一个地方都发生了修改的情况下,因为无法自动判断要选用哪一个修改,所以就会发生冲突。

==分割线上方是本地数据库的内容, 下方是远程数据库的编辑内容。

Git会在发生冲突的地方修改文件的内容

修正所有冲突的地方之后,执行提交。

  • 用mygit和test制造冲突:

先在mygit中的git-study.txt文件中增加:commit mygit冲突

再进行提交

再用test操作:

修改文件内容:增加 pull test冲突

提交并推送:

在mygit中操作:

推送内容到远程:

  • 解决冲突:

先git pull

 然后打开git-study.txt文件查看冲突内容:

 采用两方的修改

 文件的内容发生了修改,所以需要进行提交。

 

用log命令来确认下更新记录吧。 指定--graph选项,能以文本形式显示更新记录的流程图。指定--oneline选项,能在一行中显示提交的信息。

这表明两个修改记录已经整合了。

这时候,之前被拒绝的push应该可以通过了。

以上内容都参考与这个教学所写:

猴子都能懂的GIT入门 | 贝格乐(Backlog)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值