简介

  1. Git是一个版本控制工具,通过分支管理不同版本的代码。另外,它拥有回滚代码的功能,主要是靠提交功能存储到本地仓库,有时候因为某些问题,你需要回滚到以前的代码,只需查看提交日志,复制修订号,再输入回滚命令,就能回滚到指定的代码
  2. Git和Github区别,一个是工具,另一个是开源社会,区别还是蛮大的

版本控制

版本迭代

  1. 老板想要个方案A,你写好后提交给他,他觉得不满意让你重做,于是方案B来了,他看了下想让你修改某个地方,方案C跟着出来了……不知道修改多少版本,最后老板觉得方案A更好
  2. 版本迭代相当于是备份版本,可以因某些问题回溯到旧版本

Git和SVN区别

  1. SVN是集中式版本控制系统,版本库是集中放在中央服务器,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统必须是联网才能工作,对网络带宽要求较高
  2. Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件

Git是目前世界上最先进的分布式版本控制系统

环境配置

  1. 我的操作系统是Mac,之前安装Git,主要是为hexo博客服务,中间发生很多问题,要么版本太老,要么安装出错,最后用Homebrew安装成功
  2. Win系统卸载Git,先从环境变量开始删除,最后是卸载Git程序
  3. Win系统安装Git,官网下载安装,下载慢可以用淘宝镜像源,安装只需点下一步,最后鼠标右键查看是否有三个指令
    • Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
    • Git CMD:Windows风格的命令行
    • Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

配置环境变量,只是为了全局使用而已
不论在哪个地方,鼠标右键都能弹出三个指令,配不配置无所谓
Mac系统,我印象里没做过任何一次配置,一样可以使用

  1. 基本的Linux命令
    命令 说明
    cd 改变目录
    cd.. 回退到上一个目录,直接cd进入默认目录
    pwd 显示当前所在的目录路径
    ls(ll) 列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细
    touch 新建一个文件,touch index.js就会在当前目录下新建一个index.js文件
    rm 删除一个文件,rm index.js就会把index.js文件删除
    mkdir 新建一个目录,就是新建一个文件夹
    rm -r 删除一个文件夹,rm -r -src删除src目录
    mv 移动文件,mv index.html src,index.html是我们要移动的文件,src是目标文件夹
    reset 重新初始化终端/清屏
    clear 清屏
    history 查看命令历史
    help 帮助
    exit 退出终端
    # 表示注释
  2. 设置用户名与邮箱,它影响我们能否上传代码
    • git config --global --list:查看用户名和邮箱
    • git config --global user.name "diyulan":修改用户名,加不加双引号都可以
    • git config --global user.email "cc2533334969@gmail.com":修改邮箱

基本理论

  1. Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/index)、资源区(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域
    • Workspace:工作区,平时存放项目代码的地方
    • Stage/Index:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
    • Repository:仓库区(或本地仓库),就是安全存放数据的位置,里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
    • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
  2. 个人理解,项目目录通过git add .(这里的.表示全部文件)传给暂存区,暂存区通过git commit传给本地仓库,本地仓库通过git push传给远程仓库
  3. 反过来,从远程仓库传到项目目录,远程仓库通过git pull传给本地仓库,本地仓库通过git reset传给暂存区,暂存区通过git checkout传给项目目录

项目搭建

  1. 有一个demo项目,里面有a~c.htmlindex.js,总共4个文件,我想把它们上传到github仓库里
  2. 打开github,创建新仓库,选公开仓库(私人仓库要花钱),添加描述文件(可以写项目信息)
  3. 仓库生成后,点Code按钮,再复制仓库路径
  4. 克隆(下载)仓库文件到本地
    git clone https://github.com/diyulan/test.git
  5. 再把a~c.htmlindex.js文件复制进去
  6. 通过三个步骤上传文件到远程仓库
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 添加所有文件到暂存区
    git add .

    # 添加暂存区中的内容到本地仓库
    git commit -m '代码提交信息'

    # 所有文件上传至远程仓库
    git push origin -u main

    # 后面再次提交,使用以下代码
    git push / git push origin main
  7. 返回到仓库查看,全部文件已上传成功

文件操作

  1. 版本控制就是对文件进行修改、提交等操作,首先要知道文件当前在什么状态,否则会提交出现在不想提交的文件,或者要提交的文件没提交上
    • Untracked:未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制,通过git add状态变为staged
    • Unmodify:文件已经入库,但未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处,如果它被修改,而变为Modified。如果使用git rm移除版本库,则成为Untracked文件
    • Modified:文件已修改,仅仅是修改,并没有进行其他的操作,这个文件也有两个去处,通过git add可进入暂存staged状态,使用git checkout则丢弃修改过,返回到unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改!
    • Staged:暂存状态,执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态,执行git reset HEAD filename取消暂存,文件状态为Modified
  2. 上面说文件有4种状态,通过如下命令可以查看文件的状态
    1
    2
    3
    4
    5
    # 查看指定文件状态
    git status [filename]

    # 查看所有文件状态
    git status
  3. 忽略文件,有时候我们不想把某些文件纳入版本控制中,比如数据库文件、临时文件、设计文件等。在根目录下简历.gitignore文件,此文件有如下规则:
    • 忽略文件中的空行或以#开始的行将会被忽略
    • 可以使用Linux通配符。例如:星号(*)表示任意多个字符,问号(?)表示一个字符,方括号([abc])表示可选字符范围,大括号({string1, string2, …})表示可选的字符串等
    • 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略
    • 如果名称的最前面有一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略
    • 如果名称的最后面有一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)
      1
      2
      3
      4
      5
      *.txt       #忽略所有.txt结尾的文件
      !lib.txt #但lib.txt除外
      /temp #仅忽略根目录下的TODO文件,不包括目录temp
      build/ #忽略build/目录下的所有文件
      doc/*.txt #忽略doc/notes.txt,但不包括doc/server/arch.txt

WebStorm集成Git

  1. 使用vue创建名为hello的项目,点击菜单栏上的Git,如果是第一次使用,菜单栏只有VCS,VCS选择Git就有了,接着点击管理远程,URL填写仓库地址(例如:https://github.com/diyulan/test)
  2. 默认本地分支master,新增本地分支dev,用来上传项目到github仓库
  3. 创建与修改文件都要点击git提交,这个功能在右上角菜单栏中
  4. 接着使用git推送,它会把项目推送到github仓库,具体是哪个仓库,由URL决定,最后生成本地分支同名的远程分支

我无法推送到main分支,同样合并也无法使用,如果你想把项目文件推送到main分支,请查看项目搭建篇章

WebStorm修改分支

  1. 比方说,我想要在ver3.0分支上提交与推送,新建分支不多说了,主要说如何切换分支,汉化版叫签出,点击后就会自己切换
  2. 本地分支与远程分支切换,其实都一样啦,只是代码会有些不同而已

常用的Git命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 切换到分支
git checkout 分支

# 使用git pull 把分支代码pull下来
git pull

# 切换到主分支
git checkout master

# 把分支的代码merge到主分支
git merge 分支

# git push推上去ok完成,现在 你自己分支的代码就合并到主分支上了
git push

# 提交代码
git commit -m "feat/refactor:描述内容"
git commit -m "feat:某某某功能已完成"
git commit -m "refactor:删除一些无用的代码"

# 查看全部的提交日志
git log --graph

# 回滚到特定的提交代码
git reset --hard 查看提交日志,复制想要回滚的修订号
git reset --hard e462c5d68d60dd3b3e52b7e18a1028158f99f16f

# 合并最近一条的提交代码
git commit --amend -m "refactor:删除一些无用的代码"

总结

  1. 如果我想把项目push到main分支,必须clone到本地,再把项目代码复制进去,最后git三连上传到main分支中
  2. 使用编辑器push到main分支会被拒绝,甚至main合并其他分支同样会被拒绝
  3. 允许本地其他分支push到远程其他分支,只要不是main分支,其他分支可以任意合并
  4. 另外,编辑器切换分支,项目文件也会跟着变化