Git基本使用
目录
1 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
下载软件,下一步安装
2 git和svn比较
# svn :集中式管理,cs架构,客户端需要配合服务端才能正常使用功能
# git:分布式管理,单台机器就能进行版本管理
3 git工作流程
git更详细版:https://www.cnblogs.com/liuqingzheng/p/15328319.html
# 有三个区
-工作区:代码,文件存放的位置,新增,修改,删除文件,代码
-暂存区:把工作区的更改提交到暂存区
-版本库:把暂存区的数据,提交到版本库
# 工作流程
-在工作区修改代码,提交到暂存区,暂存区再提交到版本库,代码才被版本管理,可以回退
-各个区域可以相互操作,但工作区不能直接提交到版本库
4 git常用命令
# 操作步骤
# 1 创建文件夹 lqz
# 2 初始化仓库(文件夹中)---》出现 .git 隐藏文件夹
git init 仓库名 # 在当前文件夹再创建一个文件夹作为仓库
git init #当前文件夹就是仓库,就会被管理
# 3 在当前文件夹下创建文件 s1.py
# 4 在命令窗口下敲---》查看当前仓库状态---》只要有红色,说明工作区更改了,但是没有提交到暂存区
git status(重点)
# 5 把工作区变更提交到暂存区
git add . (重点) # .表示当前路径下所有更改,如果你只想提交某个文件
# 6 git status ---》变绿色---》暂存区的代码没有提交到版本库
# 7 把暂存区所有内容提交到版本库
git commit -m '注释内容'
发现提交不了,需要设置用户
# 8 设置用户
# 设置全局用户---》所有仓库都用这个用户---》用户家路径C:\Users\oldboy\.gitconfig中写入了
git config --global user.email "306334678@qq.com"
git config --global user.name "liuqingzheng"
# 设置局部用户---》当前仓库---》在.git文件夹下
git config user.email "3@qq.com"
git config user.name "lqz"
# 9 把暂存区代码提交到版本库
git commit -m '注释内容'(重点)
# 10 git status ---》没有颜色
# 11 查看版本管理信息---
git log --》显示谁在什么时间提交的,版本号是多少
git reflog ---》简略显示版本信息
# 12 把工作区回退到某个版本
git reset --hard 版本号(重点)
# 13 由绿变红(把暂存区拉回到工作区)
git reset HEAD (一般不做)
# 14 把当前工作区的更改(不包含新增,包含修改和删除),回退回去
git checkout .
5 git 过滤/忽略文件
# 在仓库目录下,新建一个 .gitignore 文件,文件中写 目录或者文件或者模糊匹配---》它可以完成对这些文件的忽略
# 项目的日志文件,生成的编译文件,前端项目的node_models文件夹都不需要被版本管理
# 写忽略文件可以完成这个事
""" 过滤文件内容
文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
eg:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
*.html:忽略所有生成的 html文件
!lqz.html:表示lqz.html是例外,不在忽略范围内
*.[oa]:忽略所有.o和 .a文件
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
"""
## git 不管理空文件夹,文件夹下有文件,才会被管理
6 git多分支开发
# 什么是多分支
git分支的概念 可以认为分支就是当前工作目录中代码的一份副本。 使用分支,可以让我们从开发主线上分离出来,以免影响开发主线
# 分支操作
-创建分支
git branch 分支名
-切换分支
git checkout dev
-查看分支
git branch
-删除分支
git branch -d 分支名字
-合并分支
git merge dev # 切换到要合并进的分支(master) ,把dev合并到master上
-查看远程分支(列出所有分支,包含远程)
git branch -a
-删除远程分支
git push origin --delete 分支名
# 不同分支的操作,是相互独立的
# 分支合并可能会出冲突
# 面试题:你们公司git是如何分支,如何分支管理的
-我们公司,项目不大,基本就用三条分支 master主分支,dev开发分支,bug分支
-我们在dev分支上协同开发,如果出现bug,从主分支现拉出bug分支修改,修改后合并进主分支
7 git远程仓库
# 上面都是在本地操作,做代码管理,咱们需要协同开发,把多人的代码合并到一起,需要有一个远程仓库,搭建都把代码提交到远程仓库,远程仓库帮我们做合并
# github,gitee,gitlab 都是远程仓库
# 创建完远程仓库后,我们的操作
-本地没有代码
git init
git add .
git commit -m 'sss'
git remote add origin https://gitee.com/liuqingzheng/luffyapi.git
git push origin master
-本地有代码(luffyapi写了一部分功能了)
git remote #查看有哪些远程仓库
git remote remove 名字 # 删除远程仓库的关联
# 创建一个远程仓库的关联
git remote add origin https://gitee.com/liuqingzheng/luffyapi.git
# 把本地代码提交到远程仓库 把本地master分支提交到远端的origin上
# 输入gitee的用户名密码
git push origin master
8 ssh链接远程仓库,协同开发
# https的链接方式:输入用户名和密码,输入一次就被保存了
# ssh的链接,不需要用户名密码,需要公钥和私钥
第一步:生成地址参照地址:https://gitee.com/help/articles/4181#article-header0
第二步:在命令行中执行
ssh-keygen -t rsa -C "306334678@qq.com"
第三步:会在当前路径下生成公钥私钥
/c/Users/oldboy/.ssh/
id_rsa :私钥 不能泄露
id_rsa.pub:公钥 可以给别人,配置到git远程仓库
第四步:公钥配置到gitee账户上
第五步:以后就不需要使用用户名密码,就可以直接操作gitee了,走的是ssh链接,而不是https链接
第六步:删除原来配置的https的origin
git remote remove origin
第七步:加入ssh的origin
git remote add origin git@gitee.com:liuqingzheng/luffyapi.git
# 注意,在公司里,在设置用户邮箱和名字的时候,要设置自己真正的邮箱(注册gitee,gitlab的邮箱)
8.2 协同开发
# 步骤
-第一步:你到公司(gitee,gitlab),注册账号
-第二步:把你的公钥配置在你的gitee,gitlab账号上
-第三步:把你的邮箱发给项目的管理者(你老大)
-第四步:他把你账号添加为开发者---》你就可以读写项目了
-第五步:你要把公司项目拉到本地
-方式一:直接下载zip
-方式二:在命令行中执行
git clone git@gitee.com:liuqingzheng/luffyapi.git
-第六步:改代码,提交 (ssh,https提交)
git add .
git commit -m '注释'
#在提交之前一定要拉一下代码
git pull origin master # 可能会有冲突
git push origin master
# 冲突出现的原因:
-分支合并
-多人在同一分支开发
9 冲突解决
9.1 多人同一分支开发出现冲突
# 多人在同一分支开发出现冲突
# 冲突出现的样子
print('lqz')
<<<<<<< HEAD
=======
print('sss')
>>>>>>> 732f1921741fa4d6153d1c4b7eb0302a509838d9
先把冲突的地方删除,剩下的代码分析,需要留哪些,到底是留我的代码,还是留同事的代码(删同事的,跟同事说一声),如果删自己的,不用说
9.2 分支合并出现冲突
操作流程
git branch dev # 创建分支
git checkout dev # 切换到该分支
在代码中增加一行
git add .
git commit -m '提交了'
git checkout master # 切换到master,加的一行看不到
在代码中增加同一行
git add .
git commit -m '提交了'
# 把dev合并到master中
git merge dev # master上合并dev,冲突了
# 解决冲突
git add .
git commit -m '提交了'
10 线上分支合并
######### 每次提交代码之前都要先拉一下######
#公司里叫提交 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(合并请求)
你领导审核,审核过后,通过,就合并了
11 pycharm操作git
# pycharm 其实可以作为git的图形化客户端
# 如果你是软件的开发者
-git clone xx
pycharm配置git
克隆代码
git add
git commit
git pull 和git push
查看本地和远端所有分支
跟历史版本比较
查看所有历史更改
12 为开源项目贡献代码
# 第一步:先fork开源项目---》在你仓库中就能看到这个项目了(复制了一份到你仓库)
# 第二步:从自己仓库,clone到本地
# 第三步:写代码,提交到本地,推到远端
# 第四步:提交远程分支合并请求(pr)--->作者收到你的pr,读你代码,觉得OK,同意,同意就合进去了
13 git 变基和git fetch
# git rebase
-咱们正常合并代码使用git merge合并
-通过变基合并代码,可以让提交记录更简洁
-解决分支合并分叉问题
# git fetch用过吗?干什么用的
git pull 和git fetch
相同点首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。
不同点git pull 类似于 git fetch+git merge
# git flow
GitFlow并非什么技术,而是一种代码开发合并管理流程的思维模式或者是管理方法。大家一起开发的一种软约定。
# git 面试题
1 你们公司分支方案是什么样的?
2 使用git开发,遇到过冲突吗?
3 你知道git 变基?
4 git pull 和git fetche的区别
5 你知道git flow吗?git 工作流,它是一个别人提出的分支方案
我们没有用,我们用的就是master+dev+bug分支方案
6 使用git 的操作流程
7 什么是pr?
14 .gitignore忽略文件注意事项
注意:下面的方法只对想忽略的但是没有添加到仓库的文件有效,如果是已经提交到仓库了的文件会把仓库的文件删掉的
1、再项目根路径下建立.gitignore文件,写上匹配规则,比如**.properties等,具体百度
2.若写完之后不生效可在项目根目录下打开git bash here 这里以git为例
执行下面命令:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
原因:.gitignore只能忽略未被track的文件,而git本地缓存。如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
这个方法对已经提交到仓库的文件有效
创建changelist
idea左下角version Control-------LocalChanges---------new chagelist将不想提交的文件移动到你所创建的changelist里面
# 删除本地最后一条记录,如果需要删除最后提交的N条记录,将“1”替换为一个具体的数字“N”即可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步