GIT基本环境配置与基本使用(windows,命令行)

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基本流程与基本概念   

    GIT基本环境配置与基本使用(windows,命令行)_第1张图片   

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

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

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

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

3. git基本操作

    1)clone

$ git clone <远程仓库地址>

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

    一般远程仓库名字叫 origin

//查看远程仓库
$ git remote

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

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

//查看远程分支
$ git branch -a

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

//查看本地分支
$ git branch

    2)add  commit  push

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

GIT基本环境配置与基本使用(windows,命令行)_第2张图片GIT基本环境配置与基本使用(windows,命令行)_第3张图片

  •     把test.txt的内容修改为

    GIT基本环境配置与基本使用(windows,命令行)_第4张图片

  •     这时A的工作完成了需要提交代码到远程仓库,A依次执行如下命令
    
// 添加test.txt 到 index(缓冲区)
$ git add test.txt
// 提交缓冲区的文件 到 localrepository 的本地分支  master中
$ git commit test.txt -m"A has done"
// 将loacl repository 中master和origin/master比对是否有冲突 无冲突则推送到 remote repository,至此工作完成
$ git push
GIT基本环境配置与基本使用(windows,命令行)_第5张图片

        git commit -m"提交信息"

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

    3)fetch merge /pull

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

  •   fetch  merge      (推荐)

        B依次执行如下命令

//本地仓库的远程分支 origin/master  与 远程仓库 的origin 更新,此时你还看不到A的代码,因为的你master分支没有改变,remote origin可加可不加
$ git fetch origin
//将local repository 中的 本地分支master  与远程分支origin/master 同步,这时候你已经可以看到A的代码,可以开始工作了
$ git merge origin/master master

        GIT基本环境配置与基本使用(windows,命令行)_第6张图片

        GIT基本环境配置与基本使用(windows,命令行)_第7张图片

  •         pull
//相当于fetch + merge
$ git pull

4. 冲突解决

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

    1)产生冲突的原因

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

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

                   就会报冲突异常conflict。

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

    2)场景

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

        GIT基本环境配置与基本使用(windows,命令行)_第8张图片

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

        GIT基本环境配置与基本使用(windows,命令行)_第9张图片

        工作完成之后 A push代码

        GIT基本环境配置与基本使用(windows,命令行)_第10张图片

        这时push 失败了

    3)解决冲突

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

        GIT基本环境配置与基本使用(windows,命令行)_第11张图片

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

        打开test.txt

        GIT基本环境配置与基本使用(windows,命令行)_第12张图片

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

        GIT基本环境配置与基本使用(windows,命令行)_第13张图片

        然后执行 add  commit再push即可

        GIT基本环境配置与基本使用(windows,命令行)_第14张图片

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

5. 分支管理

    1)何谓分支?

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

    2)为何使用分支

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

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

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

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


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

        具体流程如下

    3)场景

        1. 先克隆项目

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

//查看分支
$ git branch

            GIT基本环境配置与基本使用(windows,命令行)_第15张图片 

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

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

//创建分支 newFunctionA
$ git branch newFunctionA
//切换到 newFunctionA
% git checkout newFunctionA
         GIT基本环境配置与基本使用(windows,命令行)_第16张图片

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

        3. 工作已经完成

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

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


            

            创建了一个文件

            GIT基本环境配置与基本使用(windows,命令行)_第17张图片GIT基本环境配置与基本使用(windows,命令行)_第18张图片

            提交

            GIT基本环境配置与基本使用(windows,命令行)_第19张图片

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

            

//切换回master
$ git checkout master

            GIT基本环境配置与基本使用(windows,命令行)_第20张图片

        

            GIT基本环境配置与基本使用(windows,命令行)_第21张图片

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

            

        

            GIT基本环境配置与基本使用(windows,命令行)_第22张图片

            GIT基本环境配置与基本使用(windows,命令行)_第23张图片

            

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

            

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

            

            GIT基本环境配置与基本使用(windows,命令行)_第24张图片

            GIT基本环境配置与基本使用(windows,命令行)_第25张图片                       

       

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

        GIT基本环境配置与基本使用(windows,命令行)_第26张图片

        此时工作已经完成

//删除指定分支newFunctionA
$ git branch -d newFunctionA

    4)更复杂的场景

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

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

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

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

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

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

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


        


6.参考文章

廖雪峰git教程

Git官方教程

15分钟学会使用Git


你可能感兴趣的:(Git)