你应该要知道的git的基础

git的基础以及原理

使用git进行版本管理

  • Git是一个分布式版本管理系统,是为了更好地管理Linux内核开发而创立的。
  • Git可以在任何时间点,把文档的状态作为更新记录保存起来。因此可以把编辑过的文档复原到以前的状态,也可以显示编辑前后的内容差异。
  • 编辑旧文件后,试图覆盖较新的文件的时候(即上传文件到服务器时),系统会发出警告,因此可以避免在无意中覆盖了他人的编辑内容。

理清楚几个概念

Repository

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

本地和远程Repository

  • 远程数据库: 配有专用的服务器,为了多人共享而建立的数据库。
  • 本地数据库: 为了方便用户个人使用,在自己的机器上配置的数据库。

修改记录的提交

若要把文件或目录的添加和变更保存到数据库,就需要进行提交。
执行提交后,数据库中会生成上次提交的状态与当前状态的差异记录(也被称为revision)。
提交是以时间顺序排列状态被保存到数据库中的。凭借该提交和最新的文件状态,就可以知道过去的修改记录以及内容。
系统会根据修改的内容计算出没有重复的40位英文及数字来给提交命名。指定这个命名,就可以在数据库中找到对应的提交

工作树和索引

在Git管理下,大家实际操作的目录被称为工作树。
在数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域。

数据库 – 索引 – 工作树

Git在执行提交的时候,不是直接将工作树的状态保存到数据库,而是将设置在中间索引区域的状态保存到数据库。因此,要提交文件,首先需要把文件加入到索引区域中。
所以,凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交。

安装git

命令行安装git

从Git网站下载Git的安装程序并安装,http://git-scm.com/

初始设定

$ git config --global user.name "<用户名>"
$ git config --global user.email "<电子邮件>"

本地新建 git Repository

$ mkdir tutorial
$ cd tutorial
$ git init

这样我们就新建了一个本地的git Repository

在数据库中新建文件

在tutorial目录新建一个文件,然后将文件添加到数据库。
首先在tutorial目录里新建一个名为「sample.txt」的文本文件,请在文件中输入以下的内容:

Hello World

查看工作数据库中工作树和索引的状态

$ git status

返回信息:

# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#     sample.txt
nothing added to commit but untracked files present (use "git add" to track)

从status响应我们可以看到‘sample.txt’目前不是历史记录对象。请首先把‘sample.txt’加入到索引,就可以追踪它的变更了。
将文件加入到索引,要使用add命令。在指定加入索引的文件。用空格分割可以指定多个文件。

$ git add <file>..

把sample.txt从工作目录加入到索引

$ git add sample.txt

提交文件到本地数据中

上个步骤,我们已经把文件添加到索引当中,接下来需要把索引的文件提交到数据库中

$ git commit -m "摘要"

查看提交记录

$ git log

共享本地数据库

平时开发的时候,一般都是协作开发一个项目,因此,需要共享团队中每个人的代码库,也就是我们上面步骤的本地数据库

建立连接到远程数据库中

新建数据库,比如我们可以再github上面新建数据库,然后获取到远程数据库地址

    $ git remote add <name> <url>

在处输入远程数据库名称,在处指定远程数据库的URL。
是远程数据库的别名 下次推送的时候就不需要输入长串的远程数据库地址了,直接使用名字推送
如:
$ git remote add origin https://[your_space_id].github.com/git/[your_project_key]/tutorial.git

推送本地数据库到远程数据库中

$ git push <repository> <refspec>...

使用push命令向数据库推送更改内容。处输入目标地址,处指定推送的分支。
指定了-u选项,那么下一次推送时就可以省略分支名称了。但是,首次运行指令向空的远程数据库推送时,必须指定远程数据库名称和分支名称。
如:

$ git push -u origin master

克隆远程数据库到本地数据库

使用clone指令可以复制数据库,在指定远程数据库的URL,
在指定新目录的名称。

$ git clone <repository> <directory>

注意:clone到本地之后,我们可以当成本地数据库一样操作,如新建文件->添加到索引->提交到数据库->push到远程数据库
其中提交到远程数据库的时候,不需要连接到远程数据库这一步骤,因为clone的时候已经指定了远程数据库

拉取远程数据库到本地数据库

获取到远程数据库的数据更新

$ git pull <repository> <refspec>...

使用pull命令向数据库推送更改内容。处输入目标地址,处指定推送的分支。

合并修改记录

在执行pull之后,进行下一次push之前,如果其他人进行了推送内容到远程数据库的话,那么你的push将被拒绝。
这种情况下,在读取别人push的变更并进行合并操作之前,你的push都将被拒绝。这是因为,如果不进行合并就试图覆盖已有的变更记录的话,其他人push的变更(图中的提交C)就会丢失。

因此,每次提交代码之前,需要pull一下,合并修改记录,然后再提交。合并的时候,Git会自动合并已有的变更点!不过,也存在不能自动合并的情况

解决合并修改冲突

如果远程数据库和本地数据库的同一个地方都发生了修改的情况下,因为无法自动判断要选用哪一个修改,所以就会发生冲突。
解决方法,找到冲突文件,文件里,==分割线上方是本地数据库的内容, 修改完后,执行提交

原文也已经发布到了个人小站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值