Git

Git

一、Git概述

(一)什么是Git?

Git是一个开源的分布式版本控制系统(Distributed Version Control System,简称DVCS)。可以有效、高速地处理从很小到非常大的项目版本管理。

(二)什么是版本控制系统?

版本控制系统能追踪项目,从开始到结束的整个过程。对编程人员而言,版本控制技术是团队协作开发的桥梁,助力于多人协作同步进行大型项目开发。软件版本控制系统的核心任务:查阅项目历史操作记录、实现协同开发。

(三)常见的版本控制系统

① 集中式版本控制工具
集中式版本控制工具,版本仓库是集中存放在中央服务器的,team里每个人工作时,从中央 服务器下载代码。每个人个人修改后,提交到中央版本仓库。提交(commit)代码需要联网。如:svn
这会造成一个明显的问题:单点故障

image

② 分布式版本控制工具
分布式版本控制系统可以没有 “中央服务器”,每个人的电脑上都是一个完整的版本仓库,这样工作的时候,不需要联网。因为版本仓库就在你自己的电脑上。多人协作只需要各自修改,开发完成即可,推送给对方【联网】,推送的时候是将整个版本仓库推过去。如:Git

这个共享版本库一般指的是代码托管平台,比较有名就是github,gitee

image

(四)Git的特点

① 速度、简单的设计
② 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
③ 完全分布式
④ 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
⑤ 协同开发

image

Clone:克隆,从远程仓库中克隆代码到本地仓库,第一次操作
Push:推送,代码完成后,需要和团队成员共享代码时,将代码推送到远程仓库。
Pull:拉取,从远程库拉代码到本地库,自动进行合并(merge),最后放到工作区。

image

checkout:将本地仓库的内容检出到工作区
add:在提交前先将代码提交到暂存区
commit:提交到本地仓库

(五)基本概念

本地仓库: 在本地主机上的一个代码库,可以独立存在,也可以与远程仓库进行关联

工作区:对任何文件的修订(增删改),都先放在工作区,工作区不与任何仓库分支进行关联 暂存区:把修订的文件,从工作区经过add(添加)后与某一个仓库分支进行关联,只要进 入缓存区的文件才能commit(提交)到本地仓库。

远程仓库 : 在局域网或互联网上的一个主机,存放代码库的主机或平台,比如GitHub、 Gitee.com(码云)

分支:代码存放在仓库,默认是主分支(master),可以在主分支基础上创建很多子分支,比如 develop(开发)、bugfix(bug修复)等。

二、Git的下载和安装

(一)下载

下载地址:https://git-scm.com/download

image

(二)安装

傻瓜式安装:一路下一步。安装完成后在电脑桌面右击显示
注:
	Git GUI Here:Git提供的图形界面工具
	Git Bash Here:Git提供的命令行工具

image

三、Git的基本配置

1.安装完成 Git 后,正式使用git前,是需要进行一些全局设置的,如用户名、邮箱。
设置全局用户名
git config --global user.name "your name"
设置邮箱
git config --global user.email "your email"

image

以上配置信息默认存储在用户目录下,如果设置错误,可以删除以下如图文件,重新操作以上命令即
可。

image

  1. 查看配置信息:git config --list

image

  1. 构建本地仓库:要使用Git对我们的代码进行版本控制,首先需要构建本地仓库
    ① 在本地初始化一个Git仓库
    ② 从远程仓库克隆一个仓库

本地仓库的相关操作

  1. 在本地初始化一个Git仓库:
  • 在电脑的任意位置创建一个空目录作为我们的本地Git仓库
  • 进入这个目录中,点击右键打开Git bash窗口
  • 执行命令Git init
    如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功
  1. 查看文件状态:
    git status [-s]

image

  1. 将文件添加(修改)到版本库
    要将一个文件纳入到版本库管理,首先要将其添加到暂存区,然后才能提交到仓库中。
    添加单个文件到暂存区
    git add Readme.txt
    将当前目录下所有修改添加到暂存区,除按照规则忽略的之外
    git add .
  1. 将暂存区中的文件,提交到仓库中
    如果暂存区有文件,则将其中的文件提交到仓库
    git commit
    带评论提交,用于说明提交内容、变更、作用等
    git commit -m 'your comments'
  1. 查看提交历史记录
    有的时候,是会需要查看自己做过哪些提交,来回顾自己完成的部分。或者需要寻找某个具体的提交来
    查看当时的代码。
    git log # 显示所有提交的历史记录
    git log --pretty=oneline # 单行显示提交历史记录的内容
  1. 版本回退
    有了 git log 来查看提交的历史记录,我们就可以通过 git reset --hard 来回退到我们需要的特定版本,然后使用当时的代码进行各种操作。
    回退到 commit_id 指定的提交版本
    git reset --hard 'commit_id'
  1. 回到未来的某个提交
    当退回到某个提交的版本以后,再通过 git log 是无法显示在这之后的提交信息的。但是,通过 git reflog 可以获取到操作命令的历史。因此,想要回到未来的某个提交,先通过 git reflog 从历史命令中找到想要回到的提交版本的 ID, 然后通过 git reset --hard 来切换。
    git reflog
    git reset --hard 'commit_id'
  1. 删除文件
    在文件未添加到暂存区之前,对想删除文件可以直接物理删除。如果文件已经被提交,则需要 git rm
    来删除
    git rm Readme.txt // 删除已经被提交过的 Readme.txt
    注意: git rm 只能删除已经提交到版本库中的文件。其他状态的文件直接用这个命令操作是出错的。

四、分支管理

(一)查看分支

# 查看本地分支信息
git branch
# 查看相对详细的本地分支信息 
git branch -v
# 查看包括远程仓库在内的分支信息 
git branch -av

注意:前面带有*号,这标识我们当前所在的分支

(二)创建分支

# 新建一个名称为 dev 的分支 
git branch dev

(三)切换分支

# 新建完 dev 分支以后,通过该命令切换到 dev 分支 
git checkout dev
注意:当我们创建完分支以后,我们需要切换到新建的分支,否则,所有的修改,还是在原来的分支上。事实上,所有的改动,只能影响到当前所在的分支。

(四)创建并切换分支

# 新建 dev 分支,并切换到该分支上 
git checkout -b dev

(五)合并分支

# 切换回 master 分支
git checkout master
# 将 dev 分支中的修改合并回 master 分支 
git merge dev
注意:分支修改文件中如果有换行的话会报错

image

解决:Git默认配置替换回车换行成统一的CRLF,我们只需要修改配置禁用该功能即可。
git config --global core.autocrlf false

(六)删除分支

	当之前创建的分支,完成了它的使命,如 Bug 修复完,分支合并以后,这个分支就不在需要了,就可 以删除它。
# 删除dev分支 
git branch -d dev

五、远程仓库

现在我们已经在本地创建了一个Git仓库,又想让其他人来协作开发,此时就可以把本地仓库同步到远 程仓库,同时还增加了本地仓库的一个备份。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务平台来实现,其中 比较常用的有GitHub、码云等。
-- GitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本仓库格式进行托管,故名GitHub。
-- 码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于 GitHub,码云速度会更快。
接下来我们演示如何将本地仓库中的代码同步到github。和码云的操作一模一样

(一)注册账号

① 第一步,点击注册按钮

image

② 填写真实信息

image

③ 邮箱验证

(二)登录使用

image

创建仓库

image

填写仓库详情

image

六、同步远程仓库

image

(一)ssh配置

SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间 人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处 就是传输的数据是经过压缩的,所以可以加快传输的速度。
注:使用SSH同步方式需要先生成密钥并在Gitee配置公钥

执行命令,生成公钥和私钥:
	ssh-keygen -t rsa
执行命令完成后,在window本地用户.ssh目录C:\Users\用户名.ssh下面生成如下名称的公钥和私钥
密钥生成后需要在gitee上配置密钥,本地才可以顺利访问。

image

image

在git工具上输入指令 ssh-keygen -t rsa 执行后,会在C:\Users\用户名 下 一个名为.ssh的文件夹中找到公钥

image

使用记事本的方式打开id_rsa.pub 把里面的公钥内容复制到网页公钥文件域中。

(二)添加远程仓库地址

git remote add origin 远程仓库地址

七、远程仓库的操作

(一)推送本地内容到远程仓库

# 在本地仓库更新内容 添加暂存区
git add .
# 提交内容
git commit -m '信息'
# 当本地仓库中,代码完成提交,就需要将代码等推送到远程仓库,这样其他协作人员可以从远程仓库同步内容。
# 第一次推送时使用,可以简化后面的推送或者拉取命令使用 
git push -u origin master
# 将本地 master 分支推送到 origin 远程分支
git push origin master
	注意: 
		① git push -u origin master ,第一次使用时,带上 -u 参数,在将本地的 master 分支推送 到远程新的 master 分支的同时,还会把本地的 master 分支和远程的 master 分支关联起来。
		② 推送之前,需要先pull远端仓库,如果发现提交版本不一致,出现错误

(二)拉取

在多人协作过程中,当自己完成了本地仓库中的提交,想要向远程仓库推送前,需要先获取到远程仓库的最新内容。使用如下命令
git fetch origin master
git pull origin master
git fetch 和 git pull 之间的区别:
git fetch 是仅仅获取远程仓库的更新内容,并不会自动做合并。
git pull 在获取远程仓库的内容后,会自动做合并,可以看成 git fetch 之后 git merge 。

从远程仓库拉取文件注意事项:
如果本地仓库是手动创建,并不是从远程仓库克隆的,那么分支的关联包括远程仓库的历史记录都不会生成。需要手动配置。

1- 建立和远程分支的关联(非必要)
git branch --set-upstream-to=origin/master master
2- 允许在历史记录不关联的情况下拉取文件
git pull origin master --allow-unrelated-histories

(三)解决合并冲突

在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。
例如:
A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需 要推送到远程仓库,此时B用户晚于A用户推送,故需要先拉取远程仓库代码,经过合并后才能推送代 码。在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并 冲突。

解决:
	① 先拉取代码
	② 打开代码解决冲突
	③ 再提交
    
    
工作技巧: 推送要早,bug要少

(四)从远程仓库克隆

	Git 克隆的是该 Git 仓 库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 当你 执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。
	如果你本地没有仓库,希望从已有的远程仓库上复制一份代码,那么你需要 git clone 。
	# 通过 https 协议,克隆 Github 上 git 仓库的源码
	git clone https://github.com/lagou-zimu/repo1.git 
	# 通过 ssh 协议,克隆 Github 上 git 仓库的源码
	git clone git@github.com:lagou-zimu/repo1.git

八、Idea中集成Git

(一)在idea中配置Git

image

(二)Idea的Git操作

1. 初始化并提交项目到远程仓库
① 初始化并提交项目到远程仓库 【项目leader操作】
执行步骤:
	1. 在GitHub/码云中创建远程仓库 
	2. 将工程交给Git管理
	3. 提交到本地仓库
	4. 推送到远程仓库
② 在gitee上创建仓库
③ 将工程交给Git管理

image

④ 配置忽略文件

image

⑤ 提交到本地仓库

image

image

⑥ 推送到远程仓库

image

image

2. 克隆远程仓库到本地【开发人员】
① 从远程仓库克隆

image

image

(三)Idea中Git的常见操作【开发人员重点】

① 新增文件:新文件状态红色,未进入暂存区

image

加入git之后,红色变绿色,已经进入暂存区

image

② 编辑文件:修改文件 变成蓝色
正常编辑的文件默认放在暂存区,不需要再添加到暂存区

image

③ 重置文件到修改前
比如修订了某一文件,需要重置到修改文件之前的状态,选择文件,右键菜单:选择Git--->Revert
重置后,文件颜色自动消失,说明已重置到修改之前的状态。

image

④ 提交当前文件
⑤ 本地仓库推送到远程仓库
操作步骤:
	1. 推送前一定要先拉取远程仓库对应分支
	2. 如果有冲突,先解决冲突,并提交到本地仓库 
	3. 推送当前分支到远程仓库

冲突:如果A、B两个分支都在操作同一文件。当A分支提交远程仓库之后,B分支再提交的话会产生冲突
解决:先拉取,解决完冲突,再push

image

image

image

image

再推送到远程仓库

(四)分支操作

操作步骤:
	1. 创建分支
	2. 切换分支执行操作
	3. 执行合并操作,master合并dev
	4. 同步远程仓库
① 创建分支

image

image

② 切换分支执行操作

image

③ 执行合并操作(将dev分支合并到master分支)

image

image

④ 同步远程仓库

image

注意

总结一下:本地仓库有文件,远程仓库也有文件,正确姿势:

1,git remote add origin 远程仓库地址

2,git pull origin master --allow-unrelated-histories

3,git branch --set-upstream-to=origin/master master

4,git push
posted @ 2021-09-20 21:28  HJ0101  阅读(295)  评论(0编辑  收藏  举报