Java教程

Git--02

本文主要是介绍Git--02,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1 Git--01 总结

# 1 git介绍
    Git是分布式版本控制系统,控制的对象是开发的项目代码
    -对文件进行版本管理
    -多人协同开发,合并代码

# 2 git,gitlab,gitee,github
    -Git:是一种版本控制系统,是一个命令,是一种工具。
    -GitHub:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费,全球最大的开源代码托管平台
    -Gitee:(码云) 是 OSCHINA 推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管,面向互联网开发,分收费和付费,中国最大的开源代码托管平台
    -bitbucket:远程仓库
    -GitLab:是一个基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,用在企业内部网络搭建Git私服,用于企业团队内部协作开发

    -自己搭建一个gitlab,https://www.cnblogs.com/liuqingzheng/p/15325288.html
        
# 3 git 工作流程
    -见下图
    -工作区,暂存区,版本库

    -git init
    -git status   # 红色,绿色,没有变化
    -git add .    # 把工作区发生变化的提交到暂存区
    -git commit -m '注释' # 把暂存区所有的数据提交到版本库
    -git log
    -git reflog   
    -git reset --hard 版本号  # 把工作区内容变成某个版本
    
    
    # 不用记
    -git checkout .   # 恢复工作区的更改:慎用
    -git reset HEAD   # 把暂存区更改拉回到工作区:少用
    
    
    -注意:
    # git log 和git reflog的区别:
        -git log 命令可以显示所有提交过的版本信息如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息
        -git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
        
   
# 4 git基本命令
    -git init
    -git status
    -git log
    -git reflog
    -git add
    -git commit -m ''
    -git config --global user.name '用户名'
    -git config --global user.email '用户邮箱'
    
# 5 过滤文件
    -Git工作目录中,有些文件必须要有,但又不能提交它们,就可以设置忽略文件
    -在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名放进去,Git就会自动忽略这些文件
    -文件夹名/文件名
    -*  任意字符
    -? 一个字符
    
# 6 git分支
    -查看:git branch
    -新增:git barnch 分支名字 
    -切换:git checkout 分支名字
    -删除:git branch -d 分支名字  # 需要切换到其他分支,才能删除
    -合并:切换到master---> git merge dev
    
# 7 远程仓库
    -github
    -gitlab
    -gitee(以它为例)
    
    -远程建立空仓库(尽量建空)
    -设置远程仓库
    	-git remote add origin 仓库地址(https/ssh)
        
    -把本地推到远程
    	-git push origin master  # 把master分支推送到远程仓库
        -需要输入用户名密码,正常情况,只需要输入一次,以后就保存了
        
    -删除本地设置的远程仓库
    	-git remote remove 远程仓库名字
        
    -查看本地设置的远程仓库
    	-git remote
    
# 8 ssh连接远程(公司常用的)
    -本机生成公钥私钥---》用户家路径的.ssh文件夹下
    -公钥配置在你自己的远程仓库
    -设置远程仓库地址:git remote add origin 仓库地址(ssh)
    -git push origin master  # 往上推代码
    -git pull origin master  # 往下拉代码	

未命名文件 (1)

2 Git--02

1 协同开发

# 多人合作开发一个项目---》多人公用一个远程仓库

# 以路飞后台项目为例
    -git init
    
    -设置忽略文件
    	.idea
        .DS_Store
        /script
        /logs/*.log
        __pycache__
        
    -git add .
    -git commit -m '第一次提交,写完了首页功能'
    -远程新建一个远程仓库(空)
    -创建一个origin
    	-git remote add origin git@gitee.com:liuqingzheng/luffy_api.git

    -把本地仓库代码推送到远程仓库
    	# -u表示缓存,以后只需要敲 git push 代指git push origin master
    	-git push -u origin master  # 不需要记 -u
        -已经配了ssh,不需要任何认证
        
    ---------------以上操作可能是你领导做好了-----------------
   	-我是项目的拥有者,把新来的人加成项目的协同开发者
    	-仓库成员设置-->添加成员(观察者、开发者)
        
    -新成员(开发者)
        -克隆代码
            -git clone https://gitee.com/liuqingzheng/luffy_api.git  # 与直接下载zip一样
        -开发新功能
            -s1.py
        -git add .
        -git commit -m '新增了s1.py'
        -git push origin master # 1 用户名密码  2 对仓库有写权限
        -推送到远程
            # 在提交之前一定要先拉一下代码,保证本地版本库跟远程保持一致,是最新
            -git pull origin master(以后只要提交代码,都要拉一下,没事就拉一下,保证出现冲突概率小)
            -git push origin master

2 线上bug分支解决方案

# 主功能已上线,现在服务器运行版本是v1.1
# 开发着新功能---》dev分支开发
# 忽然发现有bug---》新建一个bug分支(基于master分支建立bug分支)
    -改bug
    -把变更提交到bug分支---》测试---》合并到master--》v1.1.1
    
# 新功能开发完了---》要合并到master分支---》v1.2

# dev分支和master分支合并,可能会有冲突,也可能没有

2.1 开发新功能+解决bug ,不出冲突的情况

# 可以远程建立分支,同步到本地
# 也可以本地建分支,同步到远程
git branch dev
git checkout dev  # 本地建立dev分支,切换到了dev分支, 远程没有
git push origin dev  # 把本地dev分支推到远程origin仓库

# 开发新功能
vi ss1.py
git add .
git commit -m 'dev开发了用户功能'
git push origin dev   # 把本地dev的更改提交到远程dev
# 继续开发新功能
vi ss1.py  # 加入了一行
git add .
git commit -m 'dev开发了订单功能'
git push origin dev   # 把本地dev的更改提交到远程dev


# 测试发现线上系统有bug,你领导让你去修复bug
# 基于master分支建一个bug分支
git checkout master
git branch bug
git checkout bug  # 切换到bug分支

# 修复bug
vi ss2.py  # 写点代码
git add .
git commit -m 'bug分支修复了'

# 本地bug合并到本地master
git checkout master
git merge bug   # 不会出冲突
git push origin master # 把本地master推送到远程master,最新v1.11版本发布

# 切回到dev继续开发
git checkout dev
# 又增加了代码

# 把dev合并到本地master
git checkout master
git merge dev  # 不会冲突

git push origin master   # 不会冲突,最新v1.2版本发布

2.2 开发新功能+解决bug ,出冲突的情况

# 把所有分支都删除
git branch dev
git checkout dev
vi common.py  # 写入代码
git add .
git commit -m 'dev增加了common.py'

# 线上出bug
git checkout master
git branch bug
git checkout bug
vi common.py  # 写入代码
git add .
git commit -m 'bug分支增加了common.py'

# 把bug更改合并到master上
git checkout master
git merge bug    # 不会冲突


# 把dev分支合并到master(冲突)
git merge dev   # 出冲突
# 解决冲突  (该删删,该留留)

git add .
git commit -m '解决冲突'

git push origin master

3 冲突解决

3.1 多人在同一分支协同开发导致冲突

# 提交到远程仓库时,发生冲突

# 1 多人在同一分支协同开发导致冲突
    -张三在s1.py第二行增加了一句
    	-print('hello world')
        -提交到远程仓库
        
    -李四在本地,没有拉代码,在老版本上的s1.py第二行增加了一句
    	-print('hello world')
        -从远程仓库拉取代码,就会出现冲突 (冲突显示在冲突的文件中)
            <<<<<<< HEAD   # 冲突开始,下面是自己的代码
            print('aaasdasd')
            =======        # 你的代码结束,下面是别人的代码
            print('666')
            >>>>>>> 2e8da99c75814f197f7909d1cf7816adfc4ccd81 # 别人的代码结束,版本号
            
            -如果冲突是同一个功能,跟同事商量,保留某一个人的
            -如果冲突不是同一个功能,保留俩人代码
            
    -git add .
    -git commit -m '解决冲突'
    -git pull origin master  # 正常不会有冲突(存在冲突问题)
    -git push origin master

3.2 分支合并导致冲突

# 合并分支时,发生冲突

# 操作就是2.2的操作

4 线上分支合并(pr)

# master分支和dev分支(本地和远端都有)

# 1.本地合并:把dev合并到master上,再提交master到远程仓库
# 2.线上合并:把dev合并到master上---》提交一个pull request (简称:pr)

# 例:
    # 1.本地创建dev,提交到远程 ==》 本地和远程都有dev
    git branch dev
    git checkout dev
    git push origin dev

    # 2.在common.py中加入了代码,提交到远端的dev分支

    # 3.在线上完成分支合并 
    	-提交一个pull request (简称:pr)
            点 "+ Pull Request"按钮
            
        注意:源分支是dev (需要被合并的),目标分支是master !!!!  
            而线下合并分支,是切换到合并分支上,再合并 需要被合并的分支 
                            切换到master---> git merge dev

    # 4.领导要 测试,审查代码 (专业词叫做 代码review)

    # 5.测试和审查都通过,要合并分支(合并,扁平化:变基)
	
    注:我们就只需要提交一个pr即可---》4/5 后续领导做

5 远程仓库回滚

# 本地恢复到最初状态
git checkout master  # 切换到master分支
git reset --hard 版本号  

# 提交到远端(强制提交)
git push origin master -f  # 一般不要用

6 使用pycharm操作git

 只要是命令操作,都可以使用pycharm点点完成

6.1 pycharm 指定git解释器

6.2 克隆远程仓库代码

7 面试题 (非常高)

0 出现冲突了么?怎么解决的?
	
1 什么是变基?git rebase
    让提交记录变得更加简洁
    -1 多个记录整合成一个记录
    -2 解决分支合并分叉问题
	
2 扁平化合并 (先变基,再合并)
    -1.需要先在dev分支 git rebase
    -2.再切换到master,git merge dev

    
3 git pull和git fetch有什么区别
    -1.相同点首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。
    -2.不同点git pull 类似于 git fetch + git merge
    
4 你知道git工作流(gitflow)吗?
    -gitflow是一种分支方案
    -知道,但是我们公司没用,我们使用的是master-dev-bug分支方案
这篇关于Git--02的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!