git使用

git介绍与安装

介绍

git:版本控制器,控制的对象是开发的项目代码。

作用:在多人开发时

  • 帮助开发者合并开发的代码
  • 如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
  • 做版本管理,找回很久以前写的代码

git名词解释

git:是版本管理软件,可以装在不同操作系统平台,主要用来做版本管理。

github:全球最大的开源软件仓库,国内公司一般不放在github。

gitee:码云,中国版的github,少量公司用码云。

gitlab:公司内部使用的代码托管平台。

安装

下载对应版本://git-scm.com/download ,一路下一步

git与svn的区别

同样可以做版本管理和合并代码的软件还有SVN。

svn :集中式管理,cs架构,客户端需要配合服务端才能正常使用功能

image

git:分布式管理,单台机器就能进行版本管理

image

git工作流程

image

git工作时会划分出三个区:

  • 工作区:文件存放的位置,可以新增,修改,删除文件
  • 暂存区:用于临时存放你的改动
  • 版本库:安全存放数据的位置,这里面有你提交的所有版本的数据

工作流程:在工作区修改代码后,先提交到暂存区,暂存区再提交到版本库,代码才被版本管理,被管理的版本可以随时回退。

各个区域可以相互操作,但工作区不能直接提交到版本库。

git不管理空文件夹,文件夹下有文件,才会被管理

git常用命令

初始化仓库

# 当前文件夹当做仓库
git init
# 在当前文件夹下创建一个仓库
git init 仓库名

image

image

在仓库目录终端下 – 设置全局用户,保存在 C:\Users\用户文件夹\.gitconfig文件中,所有仓库下都可以使用

git config --global user.name '用户名'
git config --global user.email '用户邮箱'

在仓库目录终端下 – 设置局部用户,保存在当前仓库\.git\config文件中(有局部用户优先使用局部用户)

git config user.name '用户名'
git config user.email '用户邮箱'

查看仓库状态,当仓库中有文件增加、删除、修改,都可以在仓库状态中查看。

# 查看仓库状态
git status
# 仓库状态的简约显示
git status -s

image

工作区提交到暂存区,仓库状态红变绿

# 提交所有变更的文件
git add .
# 提交指定变更文件
git add 文件名

暂存区所有内容提交到版本库,需要设置用户,仓库状态绿变无

git commit -m '注释内容'

查看版本管理信息,每次更改文件后提交到版本库就是一个版本

# 显示谁在什么时间提交的,版本号是多少
git log
# 简略显示版本信息
git reflog
# 查看时间点之前|之后的日志:
git log --after 2018-6-1
git log --before 2018-6-1
git reflog --after 2018-6-1
git reflog --before 2018-6-1
# 查看指定开发者日志
git log --author author_name
git reflog --author author_name

image

工作区文件回退到某个版本

# 回滚到上一个版本:
git reset --hard HEAD^
git reset --hard HEAD~
# 回滚到上三个版本:
git reset --hard HEAD^^^
git reset --hard HEAD~3
# 回滚到指定版本号的版本:
git reset --hard 版本号

暂存区拉回到工作区,仓库状态绿变红

git reset HEAD

把当前工作区的更改(不包含新增,包含修改和删除),回退回去

git checkout .

git过滤文件

在仓库目录下,新建一个 .gitignore 文件,文件中写目录或者文件或者模糊匹配,它可以完成对这些文件的忽略。

.gitignore内容:

  • 文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
  • /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
eg:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)

image

git多分支开发

git分支的概念,可以认为分支就是当前工作目录中代码的一份副本。 使用分支,可以让我们从开发主线上分离出来,以免影响开发主线,分支开发完毕后可以合并到主线,即不影响主线,又修改了代码。

不同分支的操作,是相互独立的。

image

创建分支

git branch 分支名

切换分支

git checkout 分支名

查看分支

git branch

删除分支

git branch -d 分支名

合并分支,假设当前在master分支执行了git merge dev,即把dev分支合并到了master分支。

git merge 分支名

git远程仓库

上面都是在本地做代码管理,如果需要协同开发,把多人的代码合并到一起,需要有一个远程仓库,都把代码提交到远程仓库,远程仓库帮我们做合并。

github、gitee、gitlab 都是远程仓库。

1)你作为项目仓库初始化人员:
	线上要创建空仓库 => 本地初始化好仓库 => 建立remote链接(remote add) => 提交本地仓库到远程(push)
	
2)你作为项目后期开发人员:
	远程项目仓库已经创建成功 => 复制远程仓库到本地(clone) => 进入仓库就可以进行接下来的开发

remote源操作

# 查看仓库已配置的远程源
git remote
git remote -v
# 删除远程源
git remote remove 源名
# 添加远程源
git remote add 源名 源地址
# 提交代码到远程源
git push 源名 分支名
# 从远程源拉取代码
git pull 源名 分支名
# 克隆远程源
git clone 远程源地址

远程仓库初始化

1.创建空仓库

image

image

2.本地初始化好仓库

git init

3.建立remote链接(remote add)

git remote add origin //gitee.com/xxxx

4.提交本地仓库到远程(push),提交时需要输入gitee的用户名密码。

git push origin master

拉取远程仓库

image

没有建立remote链接

仓库克隆,在当前文件夹内生成。

git clone //gitee.com/xxxx

建立了remote链接

git pull 源名 分支名

ssh协议连接远程源

gitee官方创建公钥私钥:生成/添加SSH公钥 – Gitee.com

生成公钥:邮箱可以任意填写

ssh-keygen -t rsa -C "*@*.com"

查看公钥:

C:\Users\Administrator\.ssh\id_rsa.pub

码云线上添加公钥:设置 => SSH公钥 => 添加公钥

image

添加完成后,使用ssh连接远程仓库,以后就不需要使用用户名密码,就可以直接操作gitee了,走的是ssh链接,而不是https链接。

git remote origin [email protected]:xxxxx

image

远程仓库回滚

用dev分支举例
1)本地切换到远程要回滚的分支对应的本地分支
git checkout dev

2)回滚本地分支
git reset --hard 版本号

3)本地版本强行提交给服务器
git push origin dev -f

冲突问题

冲突出现的情况:

  • 多人在同一分支开发出现冲突
  • 分支合并出现冲突

分支合并出现冲突

image

master分支对a.txt第一行添加了’asdasd’,dev分支对a.txt第一行添加了’bbb’,在把合并dev分支到master分支时就会提示冲突,并且a.txt内容会显示为:

<<<<<<< HEAD
asdasd
=======
bbb
>>>>>>> dev

多人在同一分支开发出现冲突同理。

image

解决

先把冲突的地方多余的删除:

asdasd
bbb

分析冲突的地方该留哪一个,把不需要的删除即可。

asdasd

git 变基和git fetch

git 变基

在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase

git merge合并时,提交记录一并合并过去了,查看记录时就会令人头大;

而通过变基合并分支(git rebase),可以让提交记录更简洁。

git merge合并

image

git rebase

image

git fetch

git fetch与git pull类似,首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。

  • git pull:从远程获取最新版本并merge到本地,会自动合并或修改当前的工作。
  • git fetch:会将数据拉取到本地仓库,不会自动合并或修改当前的工作

git pull = git fetch + git merge

JetBrains(pycharm)操作git

JetBrains系列软件其实可以作为git的图形化客户端,这里拿pycharm举例。

pycharm配置git

image

image

克隆代码

image

image

工作区提交到暂存区(git add)

image

暂存区提交到版本库(git commit)

image

image

查看所有分支,切换分支(右下角)

image

image

git pull 和git push

image

image

跟历史版本比较

image

image

查看所有历史更改

image

Tags: