Git版本控制器

Git介绍

1 多人协同开发一个项目,版本管理工具:svn,git
2 git实现版本的控制 - 什么是git:版本控制器 - 控制的对象是开发的项目代码 代码开发时间轴:需求1 => 版本库1 ==> 需求2 => 版本库2 => 版本库3(版本库1) => 版本库4(版本库2)
3 git,gitee,github,gitlab -gitee:中国的版github(很多公司在用) -github:远程仓库,全球最大的开源代码库 -gitlab:公司自己搭建的远程仓库,公司的代码放在上面
4 git与svn比较 ​ 5 git的工作流程 -工作区:提交到暂存区:git add 指定文件名 -暂存区:提交到版本库:git commit -m 'dd' -版本库:只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本 ​ 6 git安装,去官网下载,一路无脑下一步
7 在任意路径下点右键,选择git bash here >: mkdir test_git >: cd test_git >: git init #初始化仓库,在当前路径下创建一个.git隐藏文件夹 -当前路径就是工作区 -查看版本状态:git status -红色:新建,修改,删除,在工作区没有放到暂存区 -绿色:提交到暂存区,没有提交到版本库 -没有东西:说明所有变更都被版本管理起来了(都提交到版本库) >: git add . # 把当前路径下所有的变更都提交到暂存区 >: git commit -m '我的第一次提交' # 把暂存区的内容提交到版本库了 8 重点: git init git add . git commit -m ‘注释’ git status

git与svn比较

git工作流程

版本库间的通信

git分支管理

Git基本操作

初始化git仓库

-初始化:git init  #在当前路径下创建一个.git
​
-将已有的文件夹 - 初始化git仓库
    >: cd 目标文件夹内部
    >: git init
​
-在指定目录下 - 初始化git仓库
    >: cd 目标目录
    >: git init 仓库名

设置用户

-设置全局(在家路径新建一个.gitconfig文件,把用户名邮箱写进去)
   >: git config --global user.name '用户名'
   >: git config --global user.email '用户邮箱'
         注:在全局文件 C:Users用户文件夹.gitconfig新建用户信息,在所有仓库下都可以使用
​
-设置局部(在项目路径的.git文件夹下的config文件中加入了用户名和邮箱)
   >: git config  user.name 'liuqingzheng'
   >: git config  user.email '222@qq.com'
         注:在当前仓库下的config新建用户信息,只能在当前仓库下使用
         注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户

查看仓库状态

# 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看
    >: git status  
        -- 查看仓库状态
    >: git status -s  
        -- 查看仓库状态的简约显示

git操作

-撤销工作区操作
   >: git checkout .
        -- 撤销所有暂存区的提交
      本质是从版本库中拉取最新版覆盖工作区,如果没有被版本管理的文件,不会变化
   >: git checkout 文件名
        -- 撤销某一文件的暂存区提交   
    
-撤销暂存区操作(很少使用,了解即可)
   >: git reset HEAD .
        -- 撤销所有暂存区的提交
   >: git reset 文件名
        -- 撤销某一文件的暂存区提交
   >: git reset .
        -- 撤销所有暂存区的提交
    
-撤销版本库提交
  -回滚暂存区已经提交到版本库的操作:
    查看历史版本(版本管理日志):
        >: 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 版本号 (重点) >: eg: git reset --hard 35cb292

过滤文件

1 我们项目中有一些文件,文件夹,不要提交到版本库
2 在项目根路径新建:.gitignore.(win平台)
3 在文件中写忽略的文件/文件夹
    -直接写文件夹名字或者/文件夹名字,表示忽略这个文件夹
    -# 表示注释
    -直接写文件名,表示忽略该文件
    -* 表示通配符,表示任意数量任意字符  案例:*.log  以.log结尾的都忽略
    -?表示单个字符 ?.log
  
4 咱们的项目(.gitignore.)
    .idea
    *.log
    scripts

多分支开发

1 查看分支:git branch  # 绿色的意思是当前所在分支
2 新建分支 git branch dev
3 切换分支 git checkout dev
4 删除分支  git branch -D dev # 应该切换到其他分支,再删除
5 分支合并 git merge 分支名
    git checkout master  # 切换到主分支
    git merge dev         # 把dev分支合并到主分支
    

远程仓库

gitee,github,gitlab
remote源操作(远程仓库)
    -查看远程仓库:git remote
    -添加远程仓库(远程仓库的名字origin):git remote add origin https://gitee.com/liuqingzheng/test.git
    
git项目创始者和开发者
采用ssh协议连接远程源
提交本地代码到远程仓库
​
git flow:git 工作流,人为设定的一个标准,多条分支,分别有不同的用途

1 remote源操作(远程仓库)

-查看远程仓库:
    >: git remote
        
-添加远程仓库(远程仓库的名字origin):
    >: git remote add 远程仓库名字 仓库地址
    >: git remote add origin https://gitee.com/liuqingzheng/test.git
  
-删除远程仓库
    >: git remote remove origin

2 远程创建仓库(建一个空仓库)

3 git项目创始者和开发者

项目创始者

1 没有项目纯空的
    >: mkdir test
    >: cd test
    >: git init
    >: touch README.md
    >: git add README.md
    >: git commit -m "first commit"
    >: git remote add origin https://gitee.com/liuqingzheng/test.git
    >: git push -u origin master
2 项目已经存在,在本地以及操作了(git_test)
    >: cd git_test
    >: git remote add origin https://gitee.com/liuqingzheng/test.git
    >: git push origin master # 本地代码推送到远程
    # 推送 远程仓库名 主分支
3 提交的时候需要输入gitee的用户名和密码
4 提交成功以后,在远程仓库能看到版本变更记录

项目开发者

# 因为是开源的所有人都可以克隆
  >: git clone https://gitee.com/liuqingzheng/test.git
# 修改改代码
    >: git add .
    >: git commit -m
    >: git remote 配置远程仓库(我现在不用配,同一台机器已经配置过了)
    >: git push origin master
# 在提交代码之前,要先更新
    >: git pull origin master

4 采用ssh协议连接远程源(公司一般用这种)

1 使用https操作的,第一次提交的时候,输入用户名密码
2 企业里通常使用ssh
    -公钥:配置在gitee
    -私钥:留在你本地
    
3 生成公钥私钥
    -在命令窗口下,位置无所谓执行
    ssh-keygen -t rsa -C "33@qq.com" 
    -会在/c/Users/oldboy/.ssh/id_rsa生成公钥私钥
    -公钥给别人,私钥不能泄露(非对称加密:对称加密)
4 在gitee中配置,以后本机操作我这个账号,就不用密码验证了
5 远程仓库改成ssh方法
6 git push origin master
 

5 公司操作流程

1 到了公司,公司会给你一个gitlab账号和密码,(也可能是你自己注册)
2 登进去以后,就能看到你能开发的项目
3 git clone 项目地址
4 改代码---》一顿操作
4 提交到远程ssh方案(生成公钥私钥,配置到你账号中)

pycharm配置git

 

协同开发

1 多人开发同一个项目
2 现在你们git clone 项目,在你本地了
3 可以改代码了,当你git  push 的时候,提交不了
4 项目管理员分配给你权限(gitee中管理--》仓库成员--》邀请成员)
5 这一个项目有一个管理员,若干开发者
6 重点:不能夸版本提交,只能先拉到最新,再提交
7 如果某个开发者再s1.py 的第14行加入了东西,我也加入了,他先提交(它没问题)
8 当我再拉取,出冲突了
    <<<<<<< HEAD
    你的代码
    =======
    同事的代码
    >>>>>>> d78b8fb39f6469e810868218a052bc3174b3e1fc
​
9 解决冲突
    -留你的代码:你写的好
    -留他的代码:你觉得他写的好
    -你们的都留着:你俩虽然改了一行,但是功能不一样

分支合并

1 版本库又两套
    -本地一套
        -本地有master,dev分支
    -远程一套
        -远程现在只有master分支
2 把本地dve提交到远端
    git push origin dev
    现在远端有两个分支 master和dev
3 删除本地分支,删除远程分支(点点点)
​
4 直接在远程创建分支(点点点)
5 把远端的dev拉到本地

1 线上分支合并

1 在线上新建一个dev1分支
2 拉去到本地
3 在本地dev1分支增加一行代码,提交到版本库
4 在本地dev1分支又增加一行代码,提交到版本库
5 远程分支合并
    -pull request,指定从哪个分支合并到哪个分支
    -绿色表示没有冲突,可以正常合并
    -普通和扁平化(变基)
6 本地、远程的dev1和master就完全一样了

2 线下分支合并提交

1 本地dev1分支新增代码,提交到版本库
2 本地dev1分支合并到master
    -切到master
    -git merge dev1  (没有冲突直接合并)
    -git push origin master (本地master提交到远端master)
3 切到dev1分支,再提交到远端
4 到此,本地分支合并完成,远端的dev1跟master完全一样,本地的dev1跟master也完全一样

3 合并分支冲突解决

1 再master加一行,提交到版本库
2 再dev1同样尾增增加一行,提交到版本库
3 把dev1合并到master,就会出冲突
    -切到master分支
    -git merge dev1  有冲突
    -解决冲突(到底留什么,你觉得)
    -提交到远端

远程仓库回滚

1 远程仓库,回到最初路飞第一次提交的地方
2 再本地回复到第一次提交
    git reste --hard 59dbf80c
    git push origin master -f # 强制提交
    
3 切记 -f 清醒的时候使用

其他了解

git flow
    -是一种建分支的方案
    -预览分支,开发分支,bug分支,主分支,测试分支...
pull和fetch区别 git pull:拉代码
+合并 git fetch:拉代码,需要手动合进去
变基rebase
-合并分支的时候,是否保留之前分支的日志 git客户端: -官方下载的一个(命令行下) -pycharm编辑器 -sourcetree:美观,分支通过不同颜色线上,看着好看
从来就没有正确的选择,我们只不过是要努力奋斗,使当初的选择变得正确。
原文地址:https://www.cnblogs.com/gfeng/p/14769657.html