Git 的流程讲解

一、 Git概念

            Git 是目前世界上最先进的分布式版本控制系统(没有之一)

           优点:1)方便多人协同开发  2)方便版本控制

二、 Git操作流程

Git服务器 --> 本地仓库 --> 客户端 --> 本地仓库 --> Git服务器

Git 的流程讲解_第1张图片

三、 工作区、暂存区、仓库区

            1. 工作区: 对于添加、修改、删除文件的操作,都发生在‘工作区’中 (红色文件)

            2. 暂存区: 指将工作区中的操作完成小阶段的暂时存储。(绿色文件)

            3. 仓库区:  1)仓库区表示个人开发的一个小阶段的完成

                                2)仓库区中记录的各版本是可以查看并回退的

                                3)但是在暂存区的版本一旦提交就再也没有了

           

            # 可以使用git status查看当前代码的状态,处于哪个区

.撤销修改

  • 只能撤销工作区、暂存区的代码,不能撤销仓库区的代码
  • 撤销仓库区的代码就相当于回退版本操作

撤销暂存区代码

# 第一步:将暂存区代码撤销到工作区
git reset HEAD  文件名
# 第二步:撤销工作区代码
git checkout 文件名

Git 的流程讲解_第2张图片

Git 的流程讲解_第3张图片

四、 Git 单人本地仓库操作

     1.  概念: 本地仓库是个.git隐藏文件;

     2.  安装与查看

                     安装:sudo apt-get install git 或者 yum install git                       查看: git

                    # 腾讯云服务器自带git

     3. 创建项目,并在里面创建本地仓库

                  进入到test,并创建本地仓库.git;新创建的本地仓库.git是个空仓库 

  cd Desktop/test/
  git init           # 创建本地仓库

      git init 后,会创建一个 .git 的本地仓库,一般项目都和它同级放置

   

      4. 配置个人信息  (用户名 +邮箱)

  git config user.name '张三'
  git config user.email '[email protected]'

  #查看配置是否生效
  git config --list

 #默认不配置的话,会使用全局配置里面的用户名和邮箱  全局git配置文件路径: ~/.gitconfig

  5. 本地仓库搭建好了,可以测试了

        在项目文件夹下,创建demo.py文件,用于版本控制演示

   查看文件状态: git status

  • 红色表示新建文件或者新修改的文件,都在工作区.
  • 绿色表示文件在暂存区
  • 新建的demo.py文件在工作区,需要添加到暂存区并提交到仓库区

    将工作区文件添加到暂存区

     # 添加项目中所有文件          git add .

     # 添加指定文件                    git add demo.py

    将暂存区文件提交到仓库区(本地仓库)

     git  commit   -m   '版本描述'

     # commit会生成一条版本记录

     # -m后面是版本描述信息

          添加和提交的合并命令: git commit  -am "版本描述"

    查看历史版本

    git log    或   git reflog

    # git  reflog  可以查看所有分支的所有操作记录(包括commit 和 reset 的操作),包括已经被删除的commit记录;

    # git  log 不能查看已经删除的 commit 记录

Git 的流程讲解_第4张图片

       6. 版本的撤销与代码回退

Git 的流程讲解_第5张图片

           说明:  HEAD表示当前最新版本

                        HEAD^表示当前最新版本的前一个版本

                        HEAD^^表示当前最新版本的前两个版本,以此类推...    

                        HEAD~1表示当前最新版本的前一个版本  

                        HEAD~10表示当前最新版本的前10个版本,以此类推...

      总结: (三个区域的操作,相当于把代码清除掉)
             #仓库区的代码,版本回退:   
                 git reset --hard  HEAD^    或者   git reset --hard 版本号

               (版本回退上一个版本后,代码直接恢复到上一个版本,不会用add 或者commit后续操作 :nothing to commit, working directory clean 。  如果有回退之前的版本号,也可以复原代码,使用: git reset --hard 版本号
          
            #暂存区代码,撤销修改:
                 1.git reset HEAD 文件名
                 2.git checkout 文件名
        
            #工作区代码,撤销修改:
                git checkout 文件名称

五、 Git 远程仓库--多人开发

        1. 创建远程仓库

                           Git源代码仓库     https://github.com/

        2. 克隆项目和多人协同开发

总结:
        (配置和各种提交,拉取 均因在 Desktop/manager/test007/ 的文件 test007的项目文件夹下 )
经理工作:
    0. 准备经理的文件 Desktop/manager/
    1.git clone https地址或者ssh地址
        cd Desktop/manager/
        git clone https://github.com/***/test007.git
    
    2.配置身份信息  ()
         cd Desktop/manager/test007/
          git config user.name '经理'
          git config user.email '[email protected]'
    3.创建项目
    4.推送项目到远程仓库
         # 工作区添加到暂存区
          git add .
          # 暂存区提交到仓库区
          git commit -m '立项'
          # 推送到远程仓库
          git push

          # 拉取更新
          git pull

    
 张三工作:
    0.准备张三的文件 Desktop/zhangsan/
    1.克隆项目到本地
    2.配置张三身份信息
    3.模拟张三同步服务器代码   一般需要先 git  pull 再进行开发;步骤和 manager一致
    

在 push 的时候需要设置账号与密码,该密码则是 github 的账号与密码

如果在每次 push 都需要设置账号与密码,那么可以设置记住密码:

设置记住密码(默认15分钟):
git config --global credential.helper cache
如果想自己设置时间,可以这样做(1小时后失效):
git config credential.helper 'cache --timeout=3600'
长期存储密码:
git config --global credential.helper store

     

   3. 代码冲突

总结:
    提示:多人协同开发时,避免不了会出现代码冲突的情况
    原因:多人同时修改了同一个文件
    危害:会影响正常的开发进度
    注意:一旦出现代码冲突,必须先解决再做后续开发
    
    
    减少冲突的操作方式

    1.养成良好的操作习惯,先pull在修改,修改完立即commit和push
    2.一定要确保自己正在修改的文件是最新版本的
    3.各自开发各自的模块
    4.如果要修改公共文件,一定要先确认有没有人正在修改
    5.下班前一定要提交代码,上班第一件事拉取最新代码
    6.一定不要擅自修改同事的代码
 

          冲突案例  比如: zhangsan增加了代码,然后push 到了 git 上;  manager 没有先 pull , 直接在相同文件下开发,manager add , commit 都会正常,但当 push 到 git 时,会有冲突导致报错;

                          解决: 1.  先 git pull  拉取代码

                                      2.  提示冲突文件,打开文件解决冲突,删掉冲突代码 和提示标识  "                                                     <<<<<" 与"========="

                                        Git 的流程讲解_第6张图片

                                       Git 的流程讲解_第7张图片

                                      3.  解决完冲突代码后,依然需要  add 、commit 、 push

       以下是一个标准的冲突表

<<<<<<< HEAD
new new new new code
=======
old old old code
>>>>>>> xxxxxxxxxxxxxxxxxxxxxxx

  • 说明 * :
  • <<<<<<< HEAD 到 =======里面的内容是自己分支commit的内容

  • =========到 >>>>>>里面的内容是远程下拉的

  • 根据需要删除代码就行了  完事把<<<<<<<    =======      >>>>>>都删掉冲突就解决了

             

4. 标签

                     当某一个大版本完成之后,需要打一个标签用于  记录大版本 或者  备份大版本代码

                     1. 进入本地仓库 (与 .git 同级的文件夹下)

                     2. 本地打标签      git tag -a 标签名 -m '标签描述'
                          例:    git tag -a v1.0 -m 'version 1.0'

                     3.  推送标签到远程仓库      git  push origin  标签名

                                      git  push origin  v1.0        

                     4.  删除本地和远程标签

                              # 删除本地标签 :     git  tag  -d 标签名

                              # 删除远程仓库标签:     git  push origin  --delete tag 标签名

       

  5. 分支 

                1.  分支的作用

                       1) 区分生产环境[master主分支]代码以及开发环境代码[dev分支]

                       2)  研究新的功能或者攻关难题

                       3) 解决线上bug

                2.  查看当前分支            git   branch

                3.  创建分支步骤

                       1)创建并切换到 dev 分支         

                                     git checkout -b dev

                       2)设置本地分支跟踪远程指定分支(将分支推送到远程)                  

                                     git push -u origin dev

                       3) 修改 dev 分支源代码:  add 、commit 、 push

                       4) dev 分支合并到 master 分支

                               (1)  先切换到主分支: git checkout master

                               (2)  dev 分支合并到 master 分支: git merge dev

                       5)  合并分支默认在本地完成,合并后直接推送即可

                                    git  push

   

  #案例: 如果在zhangsan 创建了分支 test 01 , 然后在里面修改了代码; 正好在这个期间,其他人也修改了相同文件夹,并push 到了master分支上。 zhangsan 在 test01 分支上 git push 会报错。

 # 解决: 两种方式:

                1) 指定分支push  --    git push origin branchName , 合并主分支,在主分支提交时,处理冲突

                2)可以切换到master主分支,先 git pull 更新最新的mastet 分支代码;再切换到 test01 进行 push 与 合并

# 有些冲突的解决,需要你指定分支操作

# 推送到指定分支: git push origin branchName

# 拉取指定分支: git pull  origin master

--------------------------------常用 必须掌握-------------------------------------

# 初始化一个git仓库 让项目文件夹使用git管理起来 产生一个.git隐藏文件夹(本地仓库)
git init 

# 查看当前处于状态
git status

# 将工作区代码提交到暂存区
git add .

# 将暂存区代码提交到本地仓库
git commit -m "提交的备注"

# 将本地仓库代码-->推送到远程仓库
git push

# 拉取远程仓库最新代码
git pull 

# 查看日志/详细日志
git log/reflog

# 第一次克隆项目到本地
git clone 远程仓库地址(https)

# 创建分支并切换分支
git checkout -b 分支名称

# 切换分支
git checkout 分支名称

#合并分支
git checkout master
git merge dev

--------------------------------不太常用会copy-------------------------------------
# 版本回退(本地仓库)
git reset --hard HEAD^
git reset --hard 版本号

#从暂存区撤销
git reset HEAD -- 文件名
git checkout 文件名

# 检出 (工作区撤销)
git checkout 文件名

# 切换分支
git checkout master 

# 查看当前分支
git branch

# 删除
git rm

# 创建标签
git tag -a 标签名 -m '标签描述'
# 推送标签到远程仓库

补充:

1.  工作区    add   commit  push  pull   (pycharm实际操作中)

     1. 新建分支dev --> pull(master) --> push
     2. 先在自己分支写代码,-> 提交/commit -> push
     3. 切换到master分支上/checkout --> 拉取master代码 pull --> 合并自己分支的代码到 master 分支/(选择自己的分支,dev) merge into current -->push

2.  IDEA进行git push 操作,出现了如下图的操作

         Git 的流程讲解_第8张图片

解决:

Login(用户):码云/Github 远程仓库的用户名。  一般都是填写 邮箱地址

Password(密码):这里需要的密码时 码云/GitHub 远程仓库的 登录密码(忘记密码可以更改密码再在这里输入)

3. git push 时报错 fatal: Authentication failed for 'https://gitee.com/yl_dawn/spring.git/'

    这个一般是输入的gitee账号(邮箱地址) 与 密码(登录密码) 有问题导致的;可以先删除 电脑里

windows的凭证管理器中的记录,然后再 git push 时,输入 gitee 的账号,密码;

windows的凭据管理器查看地址:git pull/clone 报错 “git pull failed: Authentication failed for xxxxx.git”_yanglangdan的博客-CSDN博客

4. pycharm 处理冲突:

    ex: 1. 老杨修改了master 分支的 login.py 文件;

               Git 的流程讲解_第9张图片

           2. 小杨在自己的dev分支上开发(且没有拉取master分支),也改了 login.py 文件;

           3. 小杨开发完成后,add, commit, push 到自己的远程 dev 分支,然后切换到master分                   支,pull 更新master 的本地代码; git merge dev 时,产生冲突:

                You should resolve all conflicts before update.

           Git 的流程讲解_第10张图片

    点击merge就可以看到本地文件和远程的不同;

     通过 xx/删除, >>/追加 处理掉异常;再执行 git commit ,  git push 

    Git 的流程讲解_第11张图片

    

    

相关文件推荐:pycharm版本控制和数据库管理_皮皮blog-CSDN博客_pycharm数据库管理

5.  git merge 与 git rebase 的区别:

    推荐文档:https://segmentfault.com/a/1190000005013964

你可能感兴趣的:(git,github)