GIT操作手册

同事整理的,copy过来,作为笔记,杠杠的

1. git安装与配置

    1) 安装git Git官网

    2) 生成ssh key

        打开git bash 执行如下命令(其后所有命令都在git bash下执行,之后不再赘述)

        ssh -keygen 

        找到 c:/user/你的当前用户/.ssh目录

        把id_rsa.pub发给git服务器管理员配置

    3)克隆项目

        管理员配置好你的key之后,就可以执行如下命令,克隆出你想要的项目

$ git clone git@url/*/*.git

        项目会生成在你的当前目录,后文会说明此命令究竟干了什么

 

2. git基本流程与基本概念   

       

            workspace : 工作区,通俗来讲就是你在文件系统,ide中看到的文件,你可以直接经行修改的文件

            index : 暂存区 , 一个本地的缓冲区

            local repository : 本地仓库,里面有远程分支和本地分支, 处于本地,你不可以直接对其经行修改

            remote repository :  远程仓库,位于git服务器上,有效文件最终要提交到的地方

 

3. git基本操作

    1)clone

$ git clone <远程仓库地址>

    此命令从远程仓库clone项目到了你的当前目录并与其建立联系

    一般远程仓库名字叫 origin

 
  1. //查看远程仓库

  2. $ git remote

    loacl repository 中会生成一个 origin/master 的远程分支  一个master本地分支

    Tip:远程分支仅仅与与远程仓库保持一致

 
  1. //查看远程分支

  2. $ git branch -a

    workspace 中产生一个master本地分支的拷贝,你将在这个分支上工作

 
  1. //查看本地分支

  2. $ git branch

    2)add  commit  push

  •     现在我们已经成功克隆出项目,员工A进入工作目录开始工作

  •     把test.txt的内容修改为

   

  •     这时A的工作完成了需要提交代码到远程仓库,A依次执行如下命令

    

 
  1. // 添加test.txt 到 index(缓冲区)

  2. $ git add test.txt

  3. // 提交缓冲区的文件 到 localrepository 的本地分支 master中

  4. $ git commit test.txt -m"A has done"

  5. // 将loacl repository 中master和origin/master比对是否有冲突 无冲突则推送到 remote repository,至此工作完成

  6. $ git push

        git commit -m"提交信息"

        提交信息是必须的,否则不给你提交,如图中红色所示

    3)fetch merge /pull

        员工B需要开始工作,他需要先更新自己的项目,有两种方式

  •   fetch  merge      (推荐)

        B依次执行如下命令

 
  1. //本地仓库的远程分支 origin/master 与 远程仓库 的origin 更新,此时你还看不到A的代码,因为的你master分支没有改变,remote origin可加可不加

  2. $ git fetch origin

  3. //将local repository 中的 本地分支master 与远程分支origin/master 同步,这时候你已经可以看到A的代码,可以开始工作了

  4. $ git merge origin/master master

 

        

        

  •         pull
 
  1. //相当于fetch + merge

  2. $ git pull

 

4. 冲突解决

    以上都是最理想的工作状态,所有员工的工作都没有冲突,当然现实中是不存在这种情况的。

    1)产生冲突的原因

        产生:多个开发者同时使用或者操作git中的同一个文件,最后在依次提交和push的时候,

                   第一个操作的是可以正常提交的,而之后的开发者想要执行pull(拉)和push(推)操作的时候,

                   就会报冲突异常conflict。

        解决:保留自己修改的数据,同时保留别人的数据信息。

    2)场景

        B在修改test.txt文件之后,成功push了。

        

       A第二天继续开始工作,他没有先更新B修改之后的代码就继续在test.txt中进行编辑

        

        工作完成之后 A push代码

        

        这时push 失败了

    3)解决冲突

        先执行fetch代码,再尝试经行merge

       

        这时提示我们自动合并失败,需要手动处理冲突,并自动进入master|MERGING 状态

        打开test.txt

        

        可以看到红框处就是我们需要处理的部分,A保留了A和B的内容并保存

        

        然后执行 add  commit再push即可

        

        冲突解决完成,B也可以更新到最新的代码了。

 

5. 分支管理

    1)何谓分支?

        请参考GIT官方对分支的解释

    2)为何使用分支

        我们在前文说过,你在clone一个项目下来的时候。本地仓库已经存在了一个master分支和origin/master远程分支

        origin/master远程分支是直接与远程仓库同步的,我们不用管。

        你当然可以直接在master分支上直接开展工作,但是如果你的代码出现问题且你无法快速的解决。

        你就可能被迫放弃自己的更改,然后重新clone一给项目。

 

        所以不建议在master直接工作,而是创建一个与master相同的分支,然后再分支上工作。工作完成后再合并到master

        具体流程如下

    3)场景

        1. 先克隆项目

        2. 你需要开发一个新功能A,这时你创建一个分支newFunctionA,再此分支上工作

 
  1. //查看分支

  2. $ git branch

             

        可以看到当前只有一个分支master

        *表示当前我们处于哪个分支,括号里的内容也会提示我们目取处于哪个分支

 
  1. //创建分支 newFunctionA

  2. $ git branch newFunctionA

  3. //切换到 newFunctionA

  4. % git checkout newFunctionA

        

        我们已经成功创建并切换到newFunctionA,可以看到括号内的提示也改变了

        3. 工作已经完成

            情况A. 如果你的工作出现前文说的问题,你只要执行切换回master分支就可以了,并不需要重新clone项目,

            并且你的更改仍存再newFunctionA之中,一条命令就实现了回滚的操作且不丢失你的更改(即使这个更改是错误的)

 

            

            创建了一个文件

            

            提交

            

            这时我意识到我的代码写错了,并且我没有 时间/能力 直接修复

            

 
  1. //切换回master

  2. $ git checkout master

            

        

            

            我切换到master分支,发现一切都回到错误之前了,并且提示我的master和远程分支origin/master是一样的。

            

        

            

            

            

            再切换回newFunctionA,我的更改仍然存在,这就方便我保留其中有用的代

            

            情况B 你的工作正常完成,在newFunctionA中commit到本地仓库,切换回master分支,与newFunctionA合并后push

            

           

                                   

       

        这时master已经和newFunctionA一致了,你可以push了,然后删除newFunctionA分支(当然你也可以保留)

        

        此时工作已经完成

 
  1. //删除指定分支newFunctionA

  2. $ git branch -d newFunctionA

    4)更复杂的场景

        你接到了新的任务,开发新功能B,这时你创建了newFunctionB的分支在上开发。

        在你开发没有完成的时候,客户反馈之前的功能A出了bug,需要立刻修复,但是此时B功能的代码还不能push

        可以按照以下思路解决问题

 

        1. 返回到原先已经发布到生产服务器上的分支(master)。

        2. 为这次紧急修补建立一个新分支(debugFunctionA),并在其中修复问题。

        3. 通过测试后,回到生产服务器所在的分支,将修补分支合并进来,然后再推送到生产服务器上。

        4. 切换到之前实现新需求的分支(newFunctionB),继续工作。

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值