Git--学习笔记

Git 的学习

一. 初始化(工作区,暂存区,本地仓库)

  1. 打开目录:

    a)       执行git init 命令,自动生成 .git 文件

   2.设置签名:

    a)       形式:

                                           i.            用户名:tom

                                         ii.            Email地址:xxxx@qq.com

    b)       作用:区分不同的开发人员身份

    c)        辨析:这里的设置的签名和登录远程库(代码托管中心)的帐号和密码没有任何关系

    d)       *设置签名的命令*:

                                           i.            项目级别/仓库级别:仅对当前本地仓库范围内有效

          1. Git config user.name zzh
          2. Git config user.email xxxx@qq.com
          3. 信息保存位置:./.git/config 文件夹下
          4.  

             

                                         ii.            系统用户级别:登录当前操作系统的用户范围

          1. Git config –global user.name zzh
          2. Git config –global user.email xxxx@qq.com
          3. 信息保存位置:cd ~ 加目录下的 .gitconfig文件下
          4. Cat ~/.gitconfig

                                        iii.            优先级别:

          1. 就近原则:项目级别优先于系统用户级别,二者都有时采用项目有级别的签名
          2. 如果只有系统用户级别的签名,以系统用户级别的签名为准
          3. 二者都没有时不允许的,二者至少设置一个

3.Git status ---查看当前项目的状态

a)      

b)       On branch master 在那个分支

c)        No commits yet 没有提交到暂存区

d)       Unrtracked file :未加入到暂存区的文件

e)       Git add project.txt  将文件加入到暂存区

f)         Git rm  - -cached project01.txt 将文件从暂存区中取出,并且将文件设置为不跟踪状态

  4.命令小结

a)       查看状态

                                           i.            Git status

                                         ii.            查看工作区和暂存区状态

b)       添加到暂存区

                                           i.            Git add project.txt

                                         ii.            将工作区的新建或修改的文件添加到暂存区

c)        提交操作

                                           i.            Git commit –m “解释” project.txt

                                         ii.            将暂存区的内容提交到本地仓库

d)       在工作区新建的文件必须先add到暂存区在commit提交到本地仓库

e)       但是(已经追踪到的文件)修改的文件我们可以不用添加到暂存区,直接提交到本地仓库,添加到暂存区可以撤回,git rm - -cached project.txt

f)         但是直接提交的就不能进行撤回操作了

g)       查看提交到本地仓库的历史记录

                                           i.            Git log:只显示HEAD指针指向的版本和他以前的版本信息,不能显示HEAD指针以后的版本信息

                                         ii.            Git log –pretty=oneline :只显示HEAD指针指向的版本和他以前的版本信息,不能显示HEAD指针以后的版本信息

                                        iii.            Git log –oneline ,只显示HEAD指针指向的版本和他以前的版本信息,不能显示HEAD指针以后的版本信息

                                        iv.            Git reflog:显示所有的版本信息包括HEAD指针指向的以后的版本信息,和具体移动回退的版本信息

          1. 移动到当前版本需要多少步
          2. 版本回退,HEAD指针移动

a)       Git reset –hard 某版本的标识

b)       Git reset –hard HEAD^ 回退一个版本,一个 ^ 标识回退一个版本,n个^表示回退n步

c)        Git reset –hard HEAD~2 回退两个版本

d)       Reset 三个参数的对比:

                                           i.            –soft

          1. 仅仅只是在本地仓库移动HEAD指针

a)       本地仓库回退一个版本,但是暂存区和工作区的内容不变

b)       相当于工作区的内容改变了,并且将内容add到了暂存区,但是还没有commit到本地仓库的状态。

                                         ii.            –mixed

          1. 在本地库移动HEAD指针
          2. 重置暂存区

a)       本地仓库回退一个版本,暂存区页跟着本地仓库会退一个版本,只有工作区的内容不发生变化,

b)       相当于是,工作区的内容发生该改变,但是还没有add到暂存区也没有commit到本地仓库

                                        iii.            –hard

          1. 在本地仓库移动HEAD 指针
          2. 重置暂存区
          3. 重置工作区

a)       整体的回退一个版本

                                        iv.            Git reset –hard HEAD 将暂存区和工作区恢复到当前指针值定的版本位置的样式

  6.删除文件的找回

a)       常见文件Vim aa.txt

b)       将文件加到暂存区git add aa.txt

c)        将文件提交到本地仓库git commit –m “aa.txt 提交” aa.txt

d)       在工作区执行删除文件的操作rm aa.txt

e)       因为执行了删除,aa.txt文件发生变化(相当于是更新操作),将执行了删除的操作的文件加到暂存区git add aa.txt

f)         提交到数据库git commit –m “执行删除aa.txt” aa.txt

g)       移动HEAD指针,将版本回退到有aa.txt文件的版本,则aa.txt文件找回

                                           i.            文件记录会被记录,只要恢复到有删除文件的版本,我们就可以找到删除的文件

                                         ii.            删除的前提是:删除文件前,文件存在的状态已提交到了本地仓库

                                        iii.            操作:git reset –hard 指针位置

  7.指针位置:

a)       删除操作已经提交到本地仓库:指针指向本次版本就可以(HEAD==当前的版本)

b)       删除操作尚未提交到本地仓库:指针执行历史记录且是有删除文件存在的历史记录

  8.文件比较

    a)       命令:git diff bb.txt

                                           i.            和当前暂存区的bb.txt 文件进行比较

    b)       命令:git diff HEAD bb.txt

                                           i.            和本地库中指针指向的当前版本中的bb.txt进行比较

    c)        命令:git diff 【本地库中某个版本】 bb.txt

                                           i.            和本地库中某个历史版本中的 bb.txt 文件进行比较

    d)       命令:git diff

                                           i.            后面不带文件名时,会比较多个文件

 

二. 分支管理

  1. 什么是分支

    a)       在版本控制过程中,使用多条线同时推进多个任务

  2.分支的命令

a)       查看所有的分支:git branch –v

b)       创建新的分支:git branch 新的分支名

c)        切换分支:git checkout 分支名

d)           

  3.分支的好处

    a)       同时并行推进多个功能的开发,提高开发效率

    b)       各个分支在开发工程中,如果有一个分支开发失败,不会对其他的分支造成任何的影响,失败分支删除即可

  4.分支命令:

a)       查看所有的分支:Git branch –v

b)       创建新的分支且和master分支一样:Git branch hot_fix

c)        切换分支:git checkout hot_fix

  5.合并分支,将分支中修改的数据,同步到主分支

a)       在新的分支中修改数据

                                           i.            Git checkout hot_fix

                                         ii.            Vim aa.txt

                                        iii.            Git add aa.txt

                                        iv.            Git commit –m “这是第一次修改” aa.txt

                                         v.            Git checkout master

                                        vi.            Git merge hot_fix (合并分支)

                                       vii.            Vim aa.txt (查看修改的内容)

  6.Git 合并分支时产生的冲突何修改

    a)       为什么会产生冲突呢两个分支修改的地方一样,且修改的内容不一样

                                           i.            Vim aa.txt 在mastet 分支中修改内容

                                         ii.            Git add aa.txt 将修改的文件添加到暂存区

                                        iii.            Git commit –m “在master中修改的内容” aa.txt 将文件提交到本地仓库

                                        iv.            Git checkout hot_ifx 切换到hot_fix分支

                                         v.            Vim aa.txt 修改内容且修改的内容和master 中修改的地方一样

                                        vi.            Git add aa.txt 将文件添加到暂存区

                                       vii.            Git commit –m “在hot_fix分支修改的内容” aa.txt 将文件提交到本地仓库

                                     viii.            Git checkout master :切换到master分支

                                        ix.            Git merge hot_fix:将hot_fix分支修改的内容合并到master 分支

                                         x.           

 

 

 

                                        xi.            会发生冲突

            ,

                                       xii.            两个分支修改的地方一样,但是修改的内容不一样,git无法判断是保留哪一个分支的内容

                                      xiii.            Vim aa.txt 修改文件内容,删除特殊符号,编辑成我们想要的样子

                                     xiv.            Git add aa.txt :将修改后的文件添加到暂存区,解决冲突

                                       xv.            Git commit –m “解决冲突的第一次提交” :将文件加到本地仓库,解决冲突(注意命令后面不需要加文件名)

  7.提交对象

a)       提交的对象,做has算法,每个提交对象都对应一个has值,提交对象指向自己的hastree ,每个提交的对象都对应一个has树,has树内包含了对象中所有文件的,每个文件都有自己的has值大小等信息

b)       每个提交对象还会指向自己的父版本,也是通过夫版本的has值指向夫版本的。

                           i.     

                                         ii.           

c)        Git分支管理

                                           i.            创建分支

          1. 创建一个分支,直接就创建指针指向master分支当前指向的提交对象,而不用在重新赋值一份提交对象,在让新的指针指向提交的对象。
          2.   

                                         ii.            分支的切换

          1. 切换分支相当于将HEAD指针指向testing分支而不是master分支,切换到那个分支,就让HEAD指针只想那个分支指针就可以了。
          2. 当testing分支在提交对象时,就只会对testing分支造成影响,就不会影响master分支了。
          3.  

                                    

               iii.            切换到master分支在进行提交对象时,这是两个分支就分开了,两个分支就执行了不同的提交对象了。版本数据才开始分叉

  8.远程仓库拉取

a)       远程仓库:pull(拉取) push(推送)clone(克隆 )

b)      

 

 

  9.Git建立远程仓库

  a)       远程仓库的地址:https://github.com/zzhAylm/test01.git

  b)       由于我们每次使用会很不方便,所以我们可以为远程仓库地址起别名

                                           i.            创建命令:git remote add别名 远程仓库地址

                                         ii.            查看:git remote -v

 

                                        iii.           

  

c)        将项目中某个分支push 推送到远程仓库中,命令:git push test01 master,

d)       Git push 远程仓库的地址 分支名称

e)      

  10.将远程仓库中的目标文件clone(克隆) 到我们本地,且本地的文件无需使用 git init 命令进行初始化。

                                           i.             首先我们在我们在我们工作空间中建立一个文件夹,使用命令:mkdir test02,然后再使用cd test02进入到工作目录

                                         ii.            使用命令将test01远程文件进行克隆:git clone 远程库地址,这里我们使用的是:git clone https://github.com/zzhAylm/test01.git

                                        iii.            然后使用:ls –la 查看test02中的文件,会发现有一个test01的文件夹,这就是我们通过克隆远程仓库的内容,下载到我们本地的文件。Test01里面就是我们推送时的完整的test01.

                                        iv.           

                                         v.            克隆文件有三个效果(git clone [远程仓库的地址])

          1. 完整的将远程库下载到本地
          2. 创建test01远程仓库别名
          3. 初始化本地库

  

    补充ssh免密登录:

    1. 打开git bash
    2. 打开根目录 :cd ~
    3. 删除以前的ssh文件:rm -r .ssh/
    4. 设置免密 : ssh-keygen -t rsa -C 你的邮箱地址
    5. 打开生成的ssh目录:cd ~/.ssh
    6. 查看生成的文件:ll
    7. 打开id_rsa.pub,并复制起内容:cat id_rsa.pub
    8. 登录到自己的github账号,进入网站
    9. 打开个人信息管理,点击SSH and GPG keys,new  SSH key
    10. 将 id_rsa.pub中文件的内容复制到key中,填写标题,并点击Add SSH Key

      •  

         

    11.  

       SSH免密设置成功,当我们下次push推送项目是,只要我们使用的是ssh的访问地址就不需要填写我们的GitHub账号和地址了。

      •  

         

      

 

 

  

 

posted @ 2021-05-05 16:31  张紫韩  阅读(56)  评论(0编辑  收藏  举报