git使用


目录
  • git介绍与安装
    • 介绍
    • 安装
  • git与svn的区别
  • git工作流程
  • git常用命令
  • git过滤文件
  • git多分支开发
  • git远程仓库
    • remote源操作
    • 远程仓库初始化
    • 拉取远程仓库
    • ssh协议连接远程源
    • 远程仓库回滚
  • 冲突问题
  • git 变基和git fetch
    • git 变基
    • git fetch
  • JetBrains(pycharm)操作git

git介绍与安装

介绍

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

作用:在多人开发时

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

git名词解释

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

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

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

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

安装

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

git与svn的区别

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

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

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

git工作流程

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

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

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

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

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

git常用命令

初始化仓库

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

在仓库目录终端下 - 设置全局用户,保存在 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

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

# 提交所有变更的文件
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

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

# 回滚到上一个版本:
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空文件)

git多分支开发

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

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

创建分支

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.创建空仓库

2.本地初始化好仓库

git init

3.建立remote链接(remote add)

git remote add origin https://gitee.com/xxxx

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

git push origin master

拉取远程仓库

没有建立remote链接

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

git clone https://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公钥 => 添加公钥

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

git remote origin git@gitee.com:xxxxx

远程仓库回滚

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

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

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

冲突问题

冲突出现的情况:

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

分支合并出现冲突

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

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

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

解决

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

asdasd
bbb

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

asdasd

git 变基和git fetch

git 变基

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

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

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

git merge合并

git rebase

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

克隆代码

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

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

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

git pull 和git push

跟历史版本比较

查看所有历史更改

Git