zoukankan      html  css  js  c++  java
  • Git的操作与理解

    工作树:其存储着仓库内所有被管理文件 (untracked files是不记录在工作树中的) 的当前状态,随各文件的的改动而实时变化
    HEAD : 当前分支中最新一次提交的指针
    暂存区:提交之前的临时区域
    (工作区 -add-> 暂存区 -commit-> 版本库)

    git init        : 初始化仓库,即为项目生成(.git)
    git status   : 查看仓库状态
    git log         : 查看commit日志
                -p    : 显示每次提交的改动
         文件名    : 只显示与这个文件有关的commit日志
        —graph   : 以图表的形式显示分支commit情况
    git reflog      : 查看当前仓库的操作日志 

    git add       : 将文件或改动添加到暂存区中(commit的就是暂存区)
    git commit : 吸纳暂存区的改动,更新HEAD(即将暂存区的改动添加到老的HEAD快照中合成为新的HEAD快照)
                -m  : 输入一行提交信息 
       不加参数 :会自动启动编辑器,允许输入详细的提交信息

    git diff             : 查看工作树与暂存区之间的差别(将改动add到暂存区后,git diff就不会有输出了)
    git diff HEAD  : 查看工作树与HEAD之间的差别(将改动commit之后,git diff HEAD就不会有输出了)
    【两者是一个递进关系,体味如下:在将改动add到暂存区之前,暂存区状态=HEAD状态,但是工作树是记录着新改动的,所以git diff与git diff HEAD的输出是一样的。但是当add到暂存区之后,暂存区状态=工作树状态 > HEAD状态,因而git diff没输出,但git diff HEAD有输出】
    所以得出:工作树记录着所有被管理文件的最新状态,暂存区是个过渡区,而commit不是拍下当前工作树的快照作为HEAD,而是吸纳暂存区的改动生成新的HEAD,要是commit直接拍下工作树的当前状态作为新HEAD,那还要暂存区有毛用?所以commit是不管当前工作树的状态,它只去暂存区里面看该怎么更新HEAD,所以每次改动之后,都要先add,才能commit
    【体味下引入暂存区的设计理念:把代码的改动与commit之间隔离开来了,我可以改动十个文件,工作树负责记录这十个文件的新状态。这时我可以只commit其中的两个,只把这两个add到暂存区再commit就行了,其他八个都不受影响。而若是没有暂存区,commit时只是拍下工作树的当前状态作为新的HEAD,可能就没这么灵活了】

    [主干分支master中是不能存在开发到一半的代码的,所有的开发活动都应该在特性分支中进行,开发完毕之后再合并到主干分支]
    git checkout -b feature-A   =  git branch feature-A + git checkout feature-A
    git checkout -b 本地分支名 origin/远程分支名:拉远程分支到本地,并切换到新建的本地分支上,同时还建立了该本地分支与远程分支之间的对应联系
    git branch:查看本地分支
                  -a:查看所有分支,包含远程分支
                  -d:删除分支
    【有时候,别人刚push到远程仓库的分支在本地用git branch -a是看不到的,此时可以切到master pull一下,就会更新了】

    git reset —hard 哈希值 :将仓库的工作树、暂存区、HEAD回溯到指定状态
    git merge feature-A :将feature-A分支合并到当前所在分支
    【当merge到当前分支却产生冲突时,当前分支下的对应文件也会被修改的,修改后的冲突位置格式如下:
                                            <<<<<<< HEAD
                                            code on feature A(本分支代码)
                                            =======
                                            code on feature B(合并进来的feature/B的代码)
                                            >>>>>>> feature/B
    这时,可手动修改,然后用git add与git commit达到合并到本分支的目的】
    【所以merge有冲突时,git已经把两个分支的代码按上述格式重新写会到本分支的文件中去了,只要用git status找到哪些文件被改写了,再去手动改好,然后重新add与commit就可以了】

    git remote add origin git@github.com:仓库名 :为本地仓库设置远程仓库[只有建立了本地仓库与远程仓库之间的对应联系,才能push或pull。在git clone时,会自动建立这种联系,但如果是手动在本地建的仓库,可能就得手动建立这种联系了]

    git clone :复制远程仓库到本地,并自动建立master分支,同时建立本地仓库与远程仓库,master分支与origin master分支的对应联系
    git pull origin 分支名:拉取远程分支的代码到当前分支(不会自动建立对应联系)
    git push -u origin 分支名:将当前分支内容push到远程分支上
                                       -u   : upstream,置远程分支为本地分支的上游,建立两个分支的对应关系



    github:
    Fork:将别人的仓库fork到自己的github账户下
    Clone:将别人的远程仓库clone到本地
    Pull Request : 将自己github账户下修改后的feature分支推给原始的github仓库,请求合并

    操作流程:首先Fork别人的仓库到自己的github账户下,然后clone到本地,建立分支并修改后,要push到自己fork来的仓库中,不能直接push到别人的仓库。新分支push到自己的github仓库后,向原始仓库发送pull request 
  • 相关阅读:
    题目3:爬楼梯
    题目1:删除排序数组中的重复数字
    最近目标
    软件工程----个人总结
    软件工程第二次作业——结对编程
    软件工程第一次作业补充
    爬楼梯
    买卖股票的最佳时机
    删除排序数组中的重复数字
    思考题
  • 原文地址:https://www.cnblogs.com/dosmile/p/6444412.html
Copyright © 2011-2022 走看看