Git使用

Git使用

一、git简介

git是目前最先进的分布式版本控制系统系统,主要功能是版本管理和协同开发。

1、svn与git的区别

实际上有两种管理方式,一种是svn(集中式管理),另一种是git(分布式管理)。

  • svn(集中式管理)

  • git分布式管理

    git安装完毕,既有客户端,又有服务端。

2、git的工作流程

git本地有三个区:工作区、暂存区、版本库。

远程仓库:github,码云,gitlab(公司内部一般使用)

3、git分支管理

创建子分支进行开发的目的:分支开发是独立的,互不影响其它分支,当子分支开发的内容要同步给主分支时,才进行分支合并。

二、git安装

下载官网下载安装包,一路下一步即可安装成功,安装成功之后,我们点击鼠标右键,便可以看见多了两个选项。

我们使用Git Bash Here进行git操作,一般不使用Git GUI Here(图形化界面)操作。

三、git基本操作

我们在桌面上,建立一个文件夹,文件夹进行管理

mkdir test  # 建立文件夹test

1、初始化仓库: git init 文件夹名

-初始化:git init 文件夹名
-初始化:git init   #当前路径全被管理

我们发现,文件夹test中,多了一个.git的隐藏文件。

2、查看状态: git status

我们在cd到test文件夹下,输入git status,即可查看到文件状态。

3、提交文件到暂存区: git add a.txt

-git add a.txt  # 把a.txt提交到暂存区
-git add .  # 将当前路径下没有提交到暂存区的全部提交到暂存区

提交之后,我们再敲git status,我们发现a.txt变绿了【哈哈】。

红色表示未被管理,绿色表示提交到暂存区了

4、将暂存区中的所有文件提交到版本库: git commit -m '注释'

-git commit -m '注释,我新增了a.txt'  # 把暂存区的所有都提交到版本库
# -m 为 message  同时, 必须加入注释才行,不然报错

但是,我们发现,提交到版本库时,提示如下。

我们发现需要设置邮箱和名字,根据提示,我们如此书写。

# commit时,需要增加作者信息  --global全局配置【使用git config可以查看git可以进行的配置】
git config --global user.email "yangyi@163.com"
git config --global user.name "yangyi"
"""
全局: 我们可以在C:\Users\YangYi下的.gitconfig中查看到配置的信息
[user]
	email = yangyi@163.com
	name = yangyi
"""

# 局部配置【优先于全局】
git config user.email "yangyi@163.com"
git config user.name "yangyi"
"""
局部: 我们可以在项目C:\Users\YangYi\Desktop\test\.git下的config查看局部配置信息
"""

5、回滚操作: git checkout .

git checkout .  # 将工作区中的文件,回滚到版本区中最新的状态【当前指针所指的位置】。

举例:【此时版本库中a.txt中文件内容为空】我们在a.txt中书写内容,然后执行git checkout .,我们会发现a.txt内容被置为空。

6、查看日志: git log

git log  # 可以显示所有提交过的版本信息,但不包括已经被删除的 commit 记录和 reset 的操作
git reflog  # 显示所有的操作记录,包括提交,回退的操作。一般用来找出操作记录中的版本号,进行回退。
git reflog  # 常用于恢复本地的错误操作。

7、到达某个版本: git reset --hard 版本号

"""移动指针,可以到达被版本管理的任何一个状态,可以替代掉git checkout ."""
-git reset --hard 版本号  # 根据版本号(commit),达到某个状态

8、从暂存区恢复到工作区: git reset .

-git reset .  # 从提交到暂存区的数据恢复到工作区【使用很少】

9、过滤文件

项目中有些文件是没有必要进行管理的,所以我们需要选择性的对某些文件进行过滤,过滤方式如下。

"""
我们如何过滤文件呢?忽略语法如下
注意:默认情况下,空文件夹不被管理,我们在其中书写__init__.py即可显示
"""
在项目根路径,跟.git文件夹在一个路径,新建.gitignore.文件,在里面进行配置
1、#号是注释
2、文件夹名称  表示文件夹不被管理
3、文件名   表示文件不被管理
4、c/*.py  表示将c文件夹下的所有py文件全部忽略
5、/dist  表示根路径下的dist文件夹不被管理
6、*.py   表示后缀名为py的文件都被忽略
7、*.log*  表示所有的日志文件不被管理

10、分支操作

  • 查看分支
git branch  # 查看分支【绿色表示在当前分支上】

  • 创建分支
git branch dev  # 创建dev分支

"""
如果在dev这条分支上创建了文件,然后提交到版本库中,在dev分支上是可以显示的。
而在master分支上,是没有的。
"""

  • 删除分支
git branch -d dev  # 删除dev分支

  • 切换分支
git checkout dev  # 切换到dev分支

  • 创建并切换
git checkout -b dev  # 创建dev分支并切换到dev分支
  • 合并分支
# 把dev分支合并到master分支:先切换到master分支,然后执行合并dev分支的命令
git merge 分支名  

11、总结

"""工作区,暂存区,版本库"""
-git init   # 生成一个.git 的文件夹
-git stauts  # 查看状态(红色和绿色),必须全绿再提交到版本库
-git add .  # 提交到暂存区
-git commit -m '文字'  # 从暂存区提交到版本库
-git checkout .  # 把工作区的代码恢复到版本库中最先的代码
-git reset .   # 把暂存区的东西拉回到工作区(原来是绿的变红了)
-git reset --hard 版本号  # 回退到某个版本

"""git"""
-git branch  # 查看所有分支,如果分支是绿色,是再当前分支是
-git branch 分支名  # 创建分支
-git chekout dev  # 切换到dev分支
-git chekout -b dev2  # 创建并切换到dev2分支
-git branch -d dev2  # 删除dev2分支,不能再这个分支上
-git merge dev   # 你必须再其他分支(master),合并dev

"""git操作出现冲突的两种方式"""
-分支合并
-你和别人在同一条分支上改了相同的代码

四、git远程连接

1、基本操作

我们使用码云进行代码托管。先新建一个仓库。

创建完仓库之后,仓库中只有一个.gitignore文件。我们接下来在本地执行如下操作。

"""什么都没有的情况下,新建仓库"""
mkdir test  # 创建test文件夹
cd test  # 切换到test文件夹下
git init  # 初始化git仓库
touch a.txt  # 在test文件夹下创建a.txt
git add a.txt  # 将a.txt放到暂存区
git commit -m "first commit"  # 将暂存区中的文件提交到版本库
git remote add origin https://gitee.com/yangyi215/git_test.git  # 连接到远程git仓库
git push origin master  # 将本地的master分支提交到远程的origin中

"""本地已经有了仓库"""
cd test  # 切换到test路径下
git remote add origin https://gitee.com/yangyi215/git_test.git  # 连接到远程git仓库
git push origin master # 将本地的master分支提交到远程的origin中【需要输入用户名和密码--->之后会被保存在windows的凭证管理器中】

"""其它操作"""
git remote  # 查看远程连接仓库(没有就看不到)

提交之后,效果显示如下。

2、相关问题解决

我们在git push origin master的时候,可能会碰见如下情况。

解决方式如下:

git pull origin master
git push origin master

3、git项目的创始者和开发者

"""项目创始者: 代码如上"""

"""项目开发者: 参与者,把代码拉下来,继续做开发"""
git clone https://gitee.com/yangyi215/git_test.git  # 将远程代码克隆到本地【可以看到完整的版本和日志控制,可以回复到任意版本】
    
# 注意:表示回到指针指向的版本,因为已经用git rest --hard把指针移动了,所以checkout .就是当前指针在的版本上的内容
-git checkout .

"""简述"""
1、本地新增c.txt文件
2、提交到暂存区
3、提交到版本库(没有提交到远程,远程看不到)
4、提交到远程:git push origin master

git pull origin master  # 让文件夹中的代码成为最新的
git feacth  # 一般不用,他跟pull是一个东西,当作不知道

"""重点"""
每次再提交代码之前,一定要先更新代码(拉),如果不拉提不上去。
"""
简单来说,pull也就是根据远程库将自己的代码更新到最新【修改新内容,但不影响自己写的文件】,
之后使用push提交,会保持代码处于最新状态。
"""

4、ssh连接和https连接

"""大部分使用ssh连接"""
1、给你一个git地址(项目地址)
2、可以使用 git clone+地址 克隆到本地
3、自己便可以修改代码,代码修改完毕,进行提交,需要用户名和密码
4、我们进行ssh配置,便不用输入密码

"""加密方式"""
对称加密: 加密和解密共用同一套秘密
非对称加密: 生成一对公钥和私钥,公钥用于加密,私钥用于解密

"""如何生成一对公钥和私钥?"""
我们可以参考-https://gitee.com/help/articles/4181
# 1 使用命令进行操作,会将生成的一对公钥和私钥放在家目录下的.ssh文件夹中
ssh-keygen -t rsa -C "yang215@163.com"
# 2 把公钥复制出来,在码云上配置即可【只有配置了公钥的用户才能进行提交代码】

# 可以如此进行理解:开设一个git账户,可以给账户配备各个开发者的公钥,然后账户使用ssh进行链接仓库【每个仓库的ssh地址不同】

生成的公钥和私钥便会放在家目录下。

之后我们直接使用ssh克隆远程库。家目录下也会多出来一个文件known_hosts

5、pycharm操作git

  1. 安装git

  2. 在pycharm中配置,setting ---> git ---> git.exe的地址

  3. git clone

  4. 使用pycharm创建本地分支

  5. pull代码

  6. push代码

6、协同开发解决冲突

"""
协同开发如果出现冲突,该如何解决?
两个同时修改了文件的同一位置【可以理解为文件有行锁】
"""
当远端代码与你本地同一文件中的同一位置起冲突时,你执行git pull origin master,会起冲突。
【也就是其他人和你同时修改了文件中的同一位置(前提是最少两个人)】

"""冲突效果如下:pull的时候会自动提示冲突的代码"""
<<<<<<< HEAD
你的代码
=======
别人代码
>>>>>>> origin/master

"""处理方案"""
-删除你的代码
-删除别人的代码【你无权删除别人的代码,需要联系别人删除】
-合并你们的代码

7、分支合并

"""分支分为两种:本地分支、远程分支"""

"""如何创建远程dev分支?"""
1、创建本地分支
-git checkout -b dev
2、在本地的dev分支上,提交到远程dev分支上
-git push origin dev  
  1. 线上分支合并

    # 如果看到可自动合并,表示合并后不会有冲突,正常操作即可
    # 测试人员点通过,直接合并即可
    

  2. 分支合并冲突解决

    # 1 远端创建一个dev分支
    1) 在远端直接创建
    2) 本地创建,提交到远端
      git checkout -b dev
      git push origin dev
    # 2 本地新建一个dev_bug分支【在dev分支上创建分支,就是基于dev分支的】
    # 此时,远端(master,dev) 本地(master,dev,dev_bug)
    如果你在dev_bug分支改了文件,dev分支改了同样的文件,合并就出冲突,
    git merge dev_bug (在dev分支上合并),解决冲突:(删你的,同事的,合并起来),
    然后正常进行操作 git add .  git commit,...就可以了
     # 3 手动线下合并代码并提交到远程
    git checkout master  # 切换到本地的master分支
    git merge dev  # 在master中合并dev分支
    如果出冲突,解决冲突,之后 -git add . -git commit -git push..即可
    

8、线上回滚

# 1 切换到master分支
# 2 回滚打某个版本  git reset --hard  版本号
# 3 强制提交代码 git push origin master -f
posted @ 2021-08-22 11:47  YangYi215  阅读(60)  评论(0编辑  收藏  举报