zoukankan      html  css  js  c++  java
  • git

    Git是一个分布式代码管理工具

    • 中央式:所有的代码保存在中央服务器,所以提交必须依赖网络,并且每次提交都会带入到中央仓库,如果是协同开发可能频繁触发代码合并,进而增加提交的成本和代价。最典型的就是svn

    • 分布式:可以在本地提交,不需要依赖网络,并且会将每次提交自动备份到本地。每个开发者都可以把远程仓库clone一份到本地,并会把提交历史一并拿过来。代表就是Git

    1.2 文件状态

    在Git中文件大概分为三种状态:已修改(modified)、已暂存(staged)、已提交(committed)

    • 修改:Git可以感知到工作目录中哪些文件被修改了,然后把修改的文件加入到modified区域

    • 暂存:通过add命令将工作目录中修改的文件提交到暂存区,等候被commit

    • 提交:将暂存区文件commit至Git目录中永久保存

    1.3 commit节点


    在Git中每次提交都会生成一个节点,而每个节点都会有一个哈希值作为唯一标示,多次提交会形成一个线性节点链

    1.4 HEAD

    HEAD是Git中非常重要的一个概念,你可以称它为指针或者引用,它可以指向任意一个节点,并且指向的节点始终为当前工作目录,换句话说就是当前工作目录(也就是你所看到的代码)就是HEAD指向的节点。

    1.5 远程仓库

    虽然Git会把代码以及历史保存在本地,但最终还是要提交到服务器上的远程仓库。通过clone命令可以把远程仓库的代码下载到本地,同时也会将提交历史、分支、HEAD等状态一并同步到本地,但这些状态并不会实时更新,需要手动从远程仓库去拉取

    2分支

    当一个分支指向一个节点时,当前节点的内容即是该分支的内容,它的概念和HEAD非常接近同样也可以视为指针或引用,不同的是分支可以存在多个,而HEAD只有一个。通常会根据功能或版本建立不同的分支。

    3命令详解

    通过命令 add 实现

    添加某个文件到暂存区:=====>git add 文件路径

    添加所有文件到暂存区:=====>git add .

    撤销工作区改动:=======>git checkout -- 文件名

    清空暂存区:======>git reset HEAD 文件名

    提交  =====>git commit -m "该节点的描述信息"

    创建分支=========>  git branch 分支名

    切换分支========>git checkout 分支名

    创建一个分支后立即切换======>git checkout -b 分支名

    删除分支======>git branch -d 分支名

     合并相关:

    常用的合并命令大概有三个merge、rebase、cherry-pick

     某个分支或者某个节点的代码合并至当前分支=======>git merge 分支名/节点哈希值

    rebase也是一种合并指令=============>git rebase 分支名/节点哈希值

    cherry-pick的合并不同于merge和rebase,它可以选择某几个节点进行合并=======>git cherry-pick 节点哈希值

     

    分离HEAD:

    在默认情况下HEAD是指向分支的,但也可以将HEAD从分支上取下来直接指向某个节点,此过程就是分离HEAD========>git checkout 节点哈希值
    //也可以直接脱离分支指向当前节点
    git checkout --detach

    由于哈希值是一串很长很长的乱码,在实际操作中使用哈希值分离HEAD很麻烦,所以Git也提供了HEAD基于某一特殊位置(分支/HEAD)直接指向前一个或前N个节点的命令

    //HEAD分离并指向前一个节点
    git checkout 分支名/HEAD^

    //HEAD分离并指向前N个节点
    git checkout 分支名~N

    将HEAD分离出来指向节点有什么用呢?举个例子:如果开发过程发现之前的提交有问题,此时可以将HEAD指向对应的节点,修改完毕后再提交,此时你肯定不希望再生成一个新的节点,而你只需在提交时加上--amend即可

    git commit --amend

    回退:

    //回退N个提交
    git reset HEAD~N  ========>reset和相对引用很像,区别是reset会使分支和HEAD一并回退。

    clone:

    Git中可以通过clone从远程仓库复制一份代码到本地=========>git clone 仓库地址

    fetch:

    fetch命令就是一次下载操作,它会将远程新增加的节点以及引用(分支/HEAD)的状态下载到本地=======>git fetch 远程仓库地址/分支名

     

    pull:

    pull命令可以从远程仓库的某个引用拉取代码======>git pull 远程分支名   =====>>> [其实pull的本质就是fetch+merge,首先更新远程仓库所有状态到本地,随后再进行合并。合并完成后本地分支会指向最新节点]

    另外pull命令也可以通过rebase进行合并=======>git pull --rebase 远程分支名

     

    push:

    push命令可以将本地提交推送至远程  ========>git push 远程分支名

  • 相关阅读:
    《拼音字母》 蓝桥杯复试试题
    ZT:成熟是一种明亮而不刺眼的光辉
    如何Enable FireFox里的Java Plugin
    将App发布到WasLiberty的较稳妥方法
    记一个发HTML格式邮件的问题
    有些工作,做一辈子也不会成功
    论本事
    又一次遇到Data truncation: Data too longData truncation: Data too long问题
    查看Linux上MySQL版本信息
    很多人终身一事无成
  • 原文地址:https://www.cnblogs.com/KL2016/p/14765370.html
Copyright © 2011-2022 走看看