git和github

分布式版本控制系统

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

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

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

优点:

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

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

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

 

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

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

 

Git 快照:

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

缺点:占用磁盘空间较大

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

特点:空间换时间 

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

 

Git项目中的三个区域:

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

  ⚫ 工作区

  ⚫ 暂存区

  ⚫ Git 仓库

 

Git中文件的几种状态:

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

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

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

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

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

 

一、git本地常用指令

 退出git使用 ctrl+c或者只用q

  (一)初始化本地库

    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

三、常见问题

posted on 2021-06-30 08:29  前端码牛  阅读(43)  评论(0编辑  收藏  举报

导航