git使用手册

git介绍和安装

# 多人,个人开发程序,需要解决的问题
	1 帮助开发者合并开发的代码
	2 如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
    3 做版本管理,找回很久以前写的代码

# 可以做版本管理和合并代码的软件
	软件:SVN 、 GIT
#名词解释
	git,gitee,github,gitlab
    # git 是版本管理软件,可以装在不同操作系统平台,主要用来做版本管理
    # github:全球最大的开源软件仓库(私有软件,花钱,国内公司一般不放在github) 
    # gitee:码云 中国版的github(少量公司用码云)
    # gitlab:公司内部使用的代码托管平台
    
# svn和git		
	git:集群化,有没有客户端,git都可以使用
    svn是客户端---》服务端架构
    
    
    
# git 的安装
	-linux:centos
    	yum install git -y
    -mac 下:
    	-https://github.com/timcharper/git_osx_installer/releases
    	下载软件,下一步安装
 
    -win下
    	-https://git-scm.com/download/win
    	下载软件,下一步安装

git和svn比较

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

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

image.png
image.png

git工作流程

image.png

# 有三个区
	-工作区:代码,文件存放的位置,新增,修改,删除文件,代码
    -暂存区:把工作区的更改提交到暂存区
    -版本库:把暂存区的数据,提交到版本库
    
    
# 工作流程
	-在工作区修改代码,提交到暂存区,暂存区再提交到版本库,代码才被版本管理,可以回退
    -各个区域可以相互操作,但工作区不能直接提交到版本库

git常用命令

0.设置用户
# 设置全局用户,用户家路径C:\Users\oldboy\.gitconfig中写入了数据
  git config --global user.email "666@qq.com"
  git config --global user.name "xxxx"

# 设置局部用户,在.git文件夹下
  git config  user.email "666@qq.com"
  git config  user.name "xxx"


1.初始化仓库(文件夹中)
    git init 仓库名  # 在当前文件夹再创建一个文件夹作为仓库
    git init        #当前文件夹就是仓库,就会被管理

2.查看当前仓库状态(红色为还未提交到暂存区。绿色为已提交到暂存区,未提交到版本库,白色为已提交到版本库)
	git status
    
3.把工作区变更提交到暂存区
    git add .  # .表示当前路径下所有更改
    git add xxx   # 单独提交文件
    
4.把暂存区所有内容提交到版本库(需要设置用户)
    git commit -m '注释内容' 
    # 必须带注释,且越详细越好
	
5.查看版本管理信息
    git log    #  显示谁在什么时间提交的,版本号是多少
    git reflog #  简略显示版本信息
    
6.把工作区回退到某个版本
    git reset  --hard  版本号
    
7.把暂存区拉回到工作区
	git reset HEAD

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

git过滤文件

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

比如:项目的日志文件,生成的编译文件,前端项目的node_models文件夹都不需要被版本管理

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

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

git多分支开发

git分支的概念 可以认为分支就是当前工作目录中代码的一份副本。 使用分支,可以让我们从开发主线上分离出来,以免影响开发主线

基本就用三条分支 master主分支,dev开发分支,bug分支
在dev分支上协同开发,如果出现bug,从主分支现拉出bug分支修改,修改后合并进主分支

1.创建分支
	git branch 分支名
    
2.切换分支
	git checkout 分支名

3.查看分支
	git  branch
    
4.删除分支
	git branch -d 分支名
    
5.合并分支
	git merge 分支名  # 例:切换到要合并进的分支(master),把dev合并到master上

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

分支合并可能会出冲突

git远程仓库

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

githubgiteegitlab都是远程仓库

创建完远程仓库后
1.本地没有代码
# 创建文件夹
mkdir gitdemo
# 进入文件夹
cd gitdemo
# 开启git管理
git init 
# 创建README.md
touch README.md
# 提交到暂存区
git add README.md
# 提交到版本库
git commit -m "first commit"
# 创建远程仓库关联
git remote add origin 仓库地址(https/ssh)
# 提交到远程仓库
git push -u origin "master"

2.本地有代码
cd existing_git_repo
# 创建远程仓库关联
git remote add origin 仓库地址(https/ssh)
# 提交到远程仓库(把本地master分支提交到远端的origin上)
git push -u origin "master"

3.查看有哪些远程仓库
	git remote
    
4.删除远程仓库的关联
	git  remote remove 关联名

image.png

ssh链接远程仓库,协同开发

https:输入用户名和密码,输入一次就被保存了

ssh,不需要用户名密码,需要公钥和私钥

参考:https://gitee.com/help/articles/4181#article-header0

1.在cmd中
ssh-keygen -t ed25519 -C "1814096942@qq.com"

2.会在当前路径下生成公钥私钥
    C:\Users\Administrator\.ssh
	id_rsa  :私钥  不能泄露
	id_rsa.pub:公钥 可以给别人,配置到git远程仓库
    
3.公钥配置到gitee账户上
	以后就不需要使用用户名密码,就可以直接操作gitee了,走的是ssh链接,而不是https链接
    
4.删除原来配置的https的origin
	git remote remove origin
    
5.加入ssh的origin
	git remote add origin 仓库地址(https/ssh)

协同开发

1.注册账号(gitee,gitlab)
2.把你的公钥配置在你的gitee,gitlab账号上
3.把你的邮箱发给项目的管理者
4.他把你账号添加为开发者(你就可以读写项目了)
5.把项目拉到本地
	方式一:直接下载zip
    方式二:在命令行中执行
    git clone git@gitee.com:liuqingzheng/luffyapi.git
6.改代码,提交 (ssh,https提交)
    git add .
    git commit -m '注释'
    #在提交之前一定要拉一下代码
    git pull origin master  # 可能会有冲突
    git push origin master

冲突解决

冲突出现的原因:分支合并多人在同一分支开发

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

image.png

# 冲突出现的样子
print('lqz')
<<<<<<< HEAD
=======
print('sss')
>>>>>>> 732f1921741fa4d6153d1c4b7eb0302a509838d9

先把冲突的地方删除,剩下的代码分析,需要留哪些,到底是留我的代码,还是留同事的代码(删同事的,跟同事说一声),如果删自己的,不用说

分支合并出现冲突

image.png

操作流程
	git branch dev
    git checkout dev
    在代码中增加一行
    git add .
    git commit -m '提交了'
    
    
    git checkout master  #加的一行看不到
    在代码中增加同一行
    git add .
    git commit -m '提交了'
    
    # 把dev合并到master中
    git merge dev  #冲突了
    #解决冲突
    git add .
    git commit -m '提交了'

线上分支合并

每次提交代码之前都要先拉一下

#公司里叫提交 pr
# 操作步骤
	在远端新建dev分支
    在本地新建dev分支,切换到dev分支
    执行git pull origin dev  #把远端的dev拉倒本地的dev
    修改代码
    git add .
    git commit -m '注释'
    git pull origin dev # 先拉
    git push origin dev  # 把本地当前在分支(dev)推到远端dev
    远端的master和dev代码就不一样了
    远端合并代码
    提交pr
    你领导审核,审核过后,通过,就合并了

pycharm操作git

pycharm 其实可以作为git的图形化客户端

配置

image.png

克隆代码

image.png

git add

image.png

git commit

image.png

git pull 和git push

image.png

查看本地和远端所有分支

跟历史版本比较

查看所有历史更改

image.png

为开源项目贡献代码

# 第一步:先fork开源项目---》在你仓库中就能看到这个项目了(复制了一份到你仓库)
# 第二步:从自己仓库,clone到本地
# 第三步:写代码,提交到本地,推到远端
# 第四步:提交远程分支合并请求(pr)--->作者收到你的pr,读你代码,觉得OK,同意,同意就合进去了

git 变基和git fetch

# git rebase
	-咱们正常合并代码使用git merge合并
    -通过变基合并代码,可以让提交记录更简洁
    -解决分支合并分叉问题
    
    
# git fetch用过吗?干什么用的
	git pull 和git fetch	
	相同点首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。
    不同点git pull 类似于 git fetch+git merge

    
    
# git flow
	一个分支方案
posted @ 2022-07-07 21:31  Rain_Kz  阅读(297)  评论(0编辑  收藏  举报