zoukankan      html  css  js  c++  java
  • git和github

    分布式版本控制系统

    特点:基于服务器、客户端的运行模式

    服务器保存文件的所有更新版本

    ⚫ 客户端是服务器的完整备份,并不是只保留文件的最新版本

    优点:

    ① 联网运行,支持多人协作开发

    ② 客户端断网后支持离线本地提交版本更新

    ③ 服务器故障或损坏后,可使用任何一个客户端的备份进行恢复

    Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理 从很小到非常大的项目版本管理。

    特点:项目越大越复杂,协同开发者越多,越能体现出 Git 的高性能和高可用性

    Git 快照:

    是在原有文件版本的基础上重新生成一份新的文件,类似于备份。为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。

    缺点:占用磁盘空间较大

    优点:版本切换时非常快,因为每个版本都是完整的文件快照,切换版本时直接恢复目标版本的快照即可。

    特点:空间换时间 

    近乎所有操作都是本地执行,Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。

    Git项目中的三个区域:

    Git 管理的项目,拥有三个区域,分别是:

      ⚫ 工作区

      ⚫ 暂存区

      ⚫ Git 仓库

    Git中文件的几种状态:

      未跟踪 Untracked:  文件未被跟踪,也就是文件没有被gie所管理

      未修改 Unmodified:  文件没有被修改,git的终极目标就是让项目中的文件都处于这个状态

      已修改 Modified:  表示修改了文件,但还没 将修改的结果放到暂存区

      已暂存 Staged:  表示对已修改文件的当前 版本做了标记,使之包含 在下次提交的列表中

      已提交 committed  :表示文件已经安全地保存 在本地的 Git 仓库中

    一、git本地常用指令

      (一)初始化本地库

        git init  #在当前目录中生成一个.git 目录(含有.git目录的目录即是git仓库)

      (二)用户设置

        用于在团队中标明身份,安装完 Git 之后,要做的第一件事就是设置自己的用户名和邮件地址。因为通过 Git 对项目进行版本管理的时 候,Git 需要使用这些基本信息,来记录是谁对项目进行了操作。

    Git 的全局配置文件 通过 git config --global user.name 和 git config --global user.email 配置的用户名和邮箱地址,会被写 入到 C:/Users/用户名文件夹/.gitconfig 文件中。这个文件是 Git 的全局配置文件,配置一次即可永久生效。 可以使用记事本打开此文件,从而查看自己曾经对 Git 做了哪些全局性的配置。

        git config --global user.name XXX  #用户名

        git config --global user.email XXX   #用户邮箱

        git config user.name  #查看指定的全局配置项

        git config --list  #查看用户信息

        git config --list --global 和  git config --global --list 两者好像是等效的

        注:加--global,全局设置。 

      (三)查看库信息

        git help config  #打开git config命令的帮助手册

        git config -h  #获取git config命令的快速参考

        git status  #检查文件状态

        git status -s  #以精简的方式显示文件状态,其中 -s 是 --short 的简写形式,也可以写成下面的形式

        git status --short

        git log  #查看提交历史

        git log -2  #只展示最新的两条提交历史,可以根据需要修改数字

        git log -2 --pretty=oneline   #在一行上展示最近两条提交历史的信息

        git log --pretty=oneline   #在一行上展示所有的提交历史

        git log --graph  #以图形化(节点)展示当前git库的提交信息。

        git show

      (四)正向操作

        /*实际上是为修改内容添加index索引。*/

        git add [path] #会把对应目录或文件,添加到stage状态

        git add .   #会把当前所有的untrack files和changed but not updated添加到stage状态

        /*提交修改*/

        git commit –m “XXXX”     #提交修改,添加注释

        git push origin 分支名  #向远端库推送修改(提交修改)

        暂存修改: 

        git stash可以把当前的改动(stage和unstage,但不包括untrack的文件)暂存。然后通过git stash list查看。并通过git stash apply重新取出来。但apply之前要保证worktree是干净的。

        git commit -a -m "描述信息"   #跳过暂存区直接提交修改

        

        注:git 提示: 没有需要add时红色字体,没有需要commit时绿色字体,都已提交则working tree clean

       

      (五)逆向操作

        撤销整体修改

        git reset [path]  #会改变path指定的文件或目录的stage状态,到非stage状态。

        git reset  #会将所有stage的文件状态,都改变成非stage状态。

        git reset --hard  #回到原来编辑的地方,改动会丢失。(同样适用于团队对于其他人的修改恢复)

        git reset --hard sdv143kvf…... #可回到指定的版本#(hard后面为每次提交系统自动生成的一串哈希值)

        git reset HEAD

        撤销某次修改

        git reset HEAD^  #回退1个change

        git reset HEAD^^  #回退2个change

        git reset HEAD~3  #回退3个change

        git rm -f index.js   #从仓库和工作区同时移除index.js文件

        git rm --cached index.css   #只从仓库中移除index.css文件,保留工作区中的index.css文件

        

      (六)忽略文件

        一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 在这种情况下,我们可 以创建一个名为 .gitignore 的配置文件,列出要忽略的文件的匹配模式。

         文件 .gitignore 的格式规范如下:

          ① 以 # 开头的是注释

          ② 以 / 结尾的是目录

          ③ 以 / 开头防止递归

          ④ 以 ! 开头表示取反

          ⑤ 可以使用 glob 模式进行文件和文件夹的匹配(glob 指简化了的正则表达式)

        

       (七)glob 模式

        所谓的 glob 模式是指简化了的正则表达式:

        ① 星号 * 匹配零个或多个任意字符

        ② [abc] 匹配任何一个列在方括号中的字符 (此案例匹配一个 a 或匹配一个 b 或匹配一个 c)

        ③ 问号 ? 只匹配一个任意字符

        ④ 在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配 所有 0 到 9 的数字)

        ⑤ 两个星号 ** 表示匹配任意中间目录(比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等

      (八)

    二、git团队合作常用指令

       git clone 远程仓库的地址   #将远程仓库克隆到本地

      (一)分支

        在进行多人协作开发的时候,为了防止互相干扰,提高协同开发的体验,建议每个开发者都基于分支进行项目 功能的开发

         master 主分支

          在初始化本地 Git 仓库的时候,Git 默认已经帮我们创建了一个名字叫做 master 的分支。通常我们把这个 master 分支叫做主分支。

          在实际工作中,master 主分支的作用是:用来保存和记录整个项目已完成的功能代码。 因此,不允许程序员直接在 master 分支上修改代码,因为这样做的风险太高,容易导致整个项目崩溃。

        功能分支 

          指的是专门用来开发新功能的分支,它是临时从 master 主分支上分叉出来的,当新功能开发且测试 完毕后,最终需要合并到 master 主分支上

        分支操作

        git branch  #以查看当前 Git 仓库中所有的分支列表

        git branch 新的分支名称   #基于当前分支,创建一个新的分支,此时,新分支中的代码和当前分支完全一样

        git checkout login   #切换到指定的(login)分支上进行开发

        git checkout -b login   #这是一种简写形式,意思是创建login分支,并且切换到login分支进行开发

        合并分支:分两步,1、切换分支;2、合并分支。假设要把 C 分支的代码合并到 A 分支, 则必须先切换到 A 分支上,再运行 git merge 命令,来合并 C 分支!

        删除分支: git branch -d 分支名称

        遇到冲突时的合并分支:如果在两个不同的分支中,对同一个文件进行了不同的修改,Git 就没法干净的合并它们。 此时,我们需要打开 这些包含冲突的文件然后手动解决冲突。

         将本地分支推送到远程仓库

        如果是第一次将本地分支推送到远程仓库,需要运行如下的命令:

        git push -u 远程仓库的别名 本地分支名称:远程分支名称     #-u表示把本地分支和远程分支进行关联,只在第一次推送的时候才需要。

        例如:git push -u origin payment:pay

        #如果希望远程分支的名称和本地分支的名称保持一致,可以对命令及逆行简化:

        git push -u origin payment

        

        查看远程仓库中所有的分支列表

        git remote show 远程仓库名

        跟踪分支

        git checkout 远程分支名   #从远程仓库中,把对应的远程分支下载到本地仓库,保持本地分支和远程分支名称相同

        拉取远程分支的最新的代码

         git pull

        删除远程分支

        git push 远程仓库名称 --delete 远程分支名称

        例如:git push origin --delete pay

    三、常见问题

  • 相关阅读:
    初学angular
    C#二维数组及其本质(转)
    蓝桥杯之递归算法
    同时安装Office2016和Visio2016
    蓝桥杯之暴力破解、枚举
    NAT(地址解析协议)
    云中继
    ACL(访问控制列表)
    虚拟链路(virtual-link)
    单臂路由
  • 原文地址:https://www.cnblogs.com/shangsi/p/14952819.html
Copyright © 2011-2022 走看看