Git 教程(保姆级,手把手教你学会git)

Git是一个开源分布式版本控制系统软件 最先进最流行的版本控制系统.

Git记录完整的文件快照

断网也可以在本地保存(但是等连网才能上传到中心服务器同步给他人)

一. Git安装

==不要安装中文和特殊路径下, 不要挪动git软件的目录==

下载地址: Git

默认全都下一步即可完成安装

打开cmd终端, 输入命令 git --version (注意中间空格是必须的)

如果出现版本号, 就代表git软件成功安装到了你的电脑中

二. Git概念 - 3个区域和3个状态

  • 工作区
    • 文件显示在磁盘上,供我们使用或修改的区域。项目文件夹就是工作区
  • 暂存区
    • 执行 git add .之后,文件由工作区,添加到了暂存区。 暂存区保存了下次将提交的文件列表信息。
  • Git 仓库(本地仓库)
    • 执行 git commit -m '提交说明' (单引号必须),暂存区 -> Git本地仓库。
    • 仓库区是 Git 中最重要的部分,代码只有提交到仓库,才会形成一次历史记录, 形成一个版本 (提交过才会被记录快照)
  • 远程仓库
    • Git服务器上的仓库,比如,码云gitee或者github网站上创建的的仓库或者自己有服务器创建git远程仓库,叫做远程仓库。远程仓库用于存储代码和发布项目,多人协作也需要远程仓库。

三. Git基础使用

  本机 - 全局配置用户名和邮箱(一生只需要一次)

Git软件在工作的时候,需要知道你是谁?所以需要设置一个用户名和邮箱。

这个用户名和邮箱,最好使用你的码云账号,当然随便填也可以。(让别人能联系到你)

具体做法:

  1. 任何文件夹,空白处,右键 --> Git Bash Here 

     

  2. 依次执行下面两行代码 --global 会将配置项保存到用户配置 (以后这台计算机, 无论哪个git项目文件夹都使用这个名字和邮箱

  3. 执行命令 - 设置你的名字

git config --global user.name "名字" 

      执行命令 - 设置你的联系邮箱

git config --global user.email "邮箱"
  • 会配置到 C:\Users\用户名\.gitconfig中

1.Git初始化

初始化本地git环境, 让git来监测本地文件, 搭建三大区域

创建一个项目文件夹,打开项目文件夹

注意:一定要在项目文件夹,右键-->Git Bash Here。

执行命令 - 初始化.git文件夹

  • bash git init
  • 执行 git init 命令之后,会在项目文件夹中生成一个隐藏的 .git 文件夹
  • Git 管理项目的每一次记录版本快照,都在 ==.git== 文件夹里面保存着。所以==这个文件夹不能删除==
  • 项目没有==.git==,才需要git init

  •  mac系统: shift Command . 可以显示隐藏文件

2.Git记录 - 代码变更

  1. 写代码测试

    • 随便新建文件, 里面随便写点代码
  2. 项目文件夹, 右击, Git Bash Here

    • 执行命令 (.代表项目文件夹 - 工作区一切 保存到 暂存区)

      • 只有添加到暂存区,才叫做被Git管理
      • 空文件夹不能暂存
    • git add .  
    • 再执行命令 (代表把 暂存区的一切 保存到 git本地仓库)

    • git commit -m '提交说明' 
    • 执行完,这两个命令,表示使用Git把当前代码及文件的改动记录起来了 - 有了一次==快照==

  3. 重复1-2这2步, 这个过程4次,多使用Git记录几次

3.查看 - 历史记录

查看提交日志

  • git log - 打印详细信息

执行命令: (查看提交的日志 - 在一行简略显示)

  • git log --oneline

4.体验 - 历史中穿梭

  • 执行命令 (可以在历史版本中穿梭 (版本号指的上图3885368))
git checkout 版本号   
  • 执行命令 (可以切换回到"现在") - master代表最近的一次提交

git checkout master

4.1穿梭后 - 查看所有的版本号

穿梭到历史版本之后,通过 git log 查看不到未来的版本号

需要加 --reflog 选项,才能查看所有的版本号

  • 执行命令 (查看所有版本号, 简略版)
git reflog --oneline

5.查看文件的状态

再次修改/新增代码后 - 过多的话, 如何查看本地有什么文件变更呢?

  • 执行命令 (查看文件的几种状态)
git status
  • 未跟踪 - 新文件

  • 已修改 - modified

  • 已暂存 - 执行git add . 以后的再查看git status

  • 已提交 - 执行git commit -m '提交信息说明' 以后再运行git status

    • 表示没有什么东西可以提交了;即,所有的内容都已经提交过了 (都已经保存到本地仓库了)

如果看到有红色字体或绿色字体的文件,说明还有文件没有提交到本地仓库形成快照 (git不负责报错哦)

四. Git高级_分支

  1.创建分支

使用Git管理项目的时候,会有很多次提交。把每一次提交连接起来,向一条线一样。这就叫做分支。

初始化之后,默认是在master分支上进行操作的,master分支也叫做主分支。

相关命令:

  • 执行命令 - 查看所有本地分支

git branch
  • 执行命令 - 创建新分支 (dev叫分支名, 随便起)

git branch dev
  • 执行命令 - 切换分支 (现在本地代码都在dev这个分支下) - 如果想回到master就把dev写成master

git checkout dev

测试:

  • 在dev分支上,写点代码,提交一下(暂存, 提交)
  • 切换回到master分支, 查看代码不同

==切换分支之前,必须把当前分支的代码全部提交到仓库==

如果需要把dev分支的代码合并到master分支

  • 切换到master

  • 执行命令 - 当前在master分支上, 把dev上修改的代码合并过来

git merge dev

打印git log --oneline 查看master分支和dev分支

两种合并

1.快进模式 (Fast-forward)

  • dev分支,它包含master分支的所有提交记录

  • 合并的时候,只需要让maser分支的代码和dev分支的代码一样即可

  • 执行命令 - 删除无用的分支(不会影响master里的代码 -d代表删除意思)

git branch -d dev

2.合并模式

  • 新建newdev分支

git branch newdev
  • 切换到newdev分支上

git checkout newdev
  • 然后删除一点原来的js代码, 再它上面修改新的代码(保证和原来master状态下, 不一样就行)

  • 再切换到master分支

git checkout master
  • ==master分支的同样地方也进行了修改, 然后 自己提交一份 (非常重要, 不这样操作就不会显示冲突了)==

  • 在master分支下, 把newdev分支的内容合并上来

git merge newdev
  • 报冲突如下:

  • 也就是说,一个分支不包括另一个分支的全部提交记录

  • 这种模式的合并,有可能会有冲突出现上述画面,需要执行下面的操作:

  • 回到vscode查看代码冲突的地方, 解决: 找到对方是谁, 删除谁的, 还是都保留下来

3.解决冲突

在合并代码的时候,有可能会有冲突,遇到冲突,解决冲突,然后提交即可。

执行 git merge 分支名 的时候,如果出现如下画面,表示有冲突:

  • 打开有冲突的文件
  • 去掉分割线
  • 解决冲突
  • 保存代码,执行 git add . 和 git commit -m '提交说' 从而完成这个合并。

五.远程仓库

1.注册码云账号

码云和github都提供仓库的托管服务。

区别是码云是国内的服务器,打开速度较快;github是国外的服务器,打开速度不能保证。

码云:Gitee - 基于 Git 的代码托管和研发协作平台 - 使用这个

github:GitHub: Where the world builds software · GitHub

能登录成功就代表注册成功了, 要牢记账号/登录的方式

2.配置码云的SSH秘钥

秘钥就是一个钥匙, 开门的作用 (免登陆)

我们向码云或github网站推送代码的时候,最好使用SSH的方案,这个方案需要提前配置好秘钥。下面是具体的配置方法。

任何文件夹位置,空白处右键,选择右键菜单中的 “Git Bash Here”,执行下面的命令,可以生成SSH秘钥(包含一个公钥一个私钥)

  • 执行命令 (生成秘钥文件)

    • ssh-keygen 固定命令, 生成秘钥文件
    • -t 指定秘钥类型 (加密方式 - rsa加密)
    • -C 设置注释文字(如何联系你)
ssh-keygen -t rsa -C "邮箱"

注意,回车执行命令,然后继续回车,回车....直至生成完毕~

最后生成的秘钥在:

Windows:
C:\Users\用户名\.ssh

mac:
你的用户名那个文件夹中。 按shift+Commend+.  可以显示隐藏文件,然后就可以看到 .ssh文件夹了

找到 .ssh/id_rsa.pub,用vscode打开,复制里面全部的内容,配置到远程仓库

(重要) 相当于和远程仓库建立非账号密码方式的登录链接

  • 码云右上角头像下的设置
  • 左侧有 SSH公钥
  • 在显示的界面中,公钥把刚才.id_rsa.pub里的值都粘贴进去, 标题自动填充
  • 点击确定即可

3.创建远程仓库 - 获取SSH地址

在网站上创建一个项目, 申请一块磁盘空间 (如果自己有服务器, 在服务器上搭建一个git服务端的服务也一样)

  1. gitee.com 首页登录后
  2. 右上角+号, 新建仓库

==自己公司项目可不要公开啊,可能被敌对机构窃取==

  1. 点击创建后 ==千万不要点初始化 readme 文件==

4.推送代码到远程

本地已有仓库

  1. 执行命令 - 本地添加远程仓库地址(远程分支名字叫origin, ==地址写你的, 别写我的==
  • git remote add origin 远程仓库地址
    • remote 远程
    • add 添加
    • origin 源,这个名字可以自定义,叫什么无所谓。
    • 最后,是ssh远程仓库的地址(注意,不是https地址)

如果报错: 假如提示origin名字这个本地仓库已经用过了, 可以先移除 git remote remove origin 再执行这句命令

  • ==前提远程仓库上什么都没有== git push -u origin master
    • push 推送
    • origin 远程仓库地址,和上一条命令中的origin对应
    • master,表示推送本地的master分支
    • -u,首次推送需要 -u。(表示把本地的master和远程的master直接关联起来) ((全称叫upstream, 上传)
  • ==假如远程仓库有东西==, 先拉取下来和本地仓库的文件合并了 (rebase是把远程的直接合并到本地master里)
    • git remote add origin 远程仓库地址
    • git pull origin master --rebase (多这一步)
    • 再执行, git push -u origin master
  • 可以网页上去看到远程仓库去看看 就都上来了 哈哈哈

只能把本地仓库的代码推送到远程仓库;不能把工作区的、暂存区的代码推到远程。

SSH警告

如果首次使用SSH,会出现一个SSH警告,提示如下

  • 如果提示 “Are you sure you want to continue connecting (yes/no/[fi....])
    • 输入yes,回车

注意事项

一个远程仓库只能放一个本地仓库的代码

是SSH不是https

六.某项目 - 拉取远程仓库代码到本地

本地没有仓库

项目经理或组长处得到所需的   git的地址和秘钥

  1. 把秘钥粘贴到我们上面创建时的相同位置上即可
  2. 新建空白的文件夹(一定空白不能有隐藏文件)
  3. 直接运行命令 (不用初始化git)

克隆远程仓库到本地

  • 实际开发中,有些时候,我们需要把一个远程仓库克隆到本地

    • 开发项目的时候,可以先创建远程仓库,然后克隆到本地,再进行开发
    • 下载别人的代码的时候,可以选择克隆
    • 多人合作开发的时候,需要克隆合作伙伴的代码到本地
  • 克隆命令 - 再想要把远程仓库里代码下载的文件夹执行这个命令哦

    git clone 远程仓库地址/ssh地址

    克隆,相当于下载

  • 如果克隆的是自己的仓库,那么克隆之后,可以对代码进行修改,修改之后,直接 add、 commitpull、 push 即可。

  • 注意:克隆之后,路径并不是仓库的路径。需要把黑窗口关闭,进入项目文件夹,重新打开黑窗口

查看分支

git branch -a (-a代表远程分支也一起查看)

多人协作

实现原理:

  • 分支合并(把远程分支和本地分支合并到一起)

实现步骤:

  • 可以先创建远程仓库
  • 【可选】我先把基础的代码推送到远程仓库
  • 合作者,需要把远程仓库的代码,克隆到你的计算机中
  • 管理员邀请合作者共同来开发
  • 合作者,需要同意
  • 然后,管理员和合作者,都可以向远程仓库推送代码
    • 暂存 git add .
    • 提交 git commit -m '消息'
    • (与远程服务器上的合并) - 必须先拉取 git pull (前提是已经和远程服务器有过交互了, 否则请查看远程仓库配置章节第一次和服务器交互)
    • 拉取之后,如果有冲突,解决冲突,必须add、commit一次。
    • 最后推送。git push 即可把自己新写的代码, 同步到远程服务器 (别人 拉取, 别人 就有了你新写的代码了)

帮助文档

git help config - 自动弹出英文文档

中文文档: Git 参考手册

忽略文件

.gitignore 这是一个忽略文件

有时候项目中有些文件, 无需让git管理, 我们可以配置在忽略文件中(比如开发依赖包...)

使用规则:

#开头 是注释

/结尾的 是目录

/开头 防止递归文件夹

!开头 表示取反

还可以使用正则表达式来 匹配文件

# 忽略 index.css文件 (无论哪里的)
index.css

# 忽略所有的 .a 结尾的文件
*.a 

# 只忽略当前.gitignore文件同级目录下的TODO文件夹, 不忽略abc/TODO
/TODO  

# 忽略任何目录下名为build的文件夹
build/
    
# 忽略 doc/a.txt  doc/cbd.txt 但不忽略doc/ab/a.txt
doc/*.txt

# 忽略 doc/ 目录以及所有子目录下的 .pdf文件
doc/**/*.pdf

图形化界面

  • vscode
  • webstorm
  • sourceTree(最新版的sourceTree,低版本的windows可能安装不上)
  • 小乌龟(windows系统能用)

vscode

  • 暂存文件(git add .)

  • 提交到本地仓库

  • 推送

 

版本管理软件分类

  • 集中式,典型代表 SVN
  • 分布式,典型代表 Git

总结:


代码clone:git clone  地址 ,只拉取了主分支代码
拉取远程其它分支代码:git checkout -b 分支名 origin/远程分支名

git命名
  git初始化  git init
  git提交到暂存:git add .
  将暂存 提交到本地仓库:git commit -m"注释"
  提交本地仓库到远程
     和远程建立 联系:git remote add origin 地址
     第一次提交  git push -u origin master
     后续 提交:git push
     创建分支:git branch 分支名
          git checkout -b 分支名
     查看分支:git branch -a  查看本地与远程分支
     拉取代码 git pull
     删除分支
        本地:git branch -d(-D) 分支名
        远程:git push origin :远程分支名 
    合并分支:
        git merge dev   将dev分支合并到当前分支
    
    回滚:
      git reset --hard   版本号(git reflog --oneline)
   刚写的代码想回滚,但是只是回滚提交
      git reset --soft 版本号
      
    冲突解决:
       什么原因产生的:你改的代码不是在最新代码基础上修改的
          main.js
             a=1      a=3,提交前,有人将a=2
             标志:  分支名  | merging
                   找到冲突文件  修改  git add .  git commit -m""  git push
                   git merge --abort  取消合并
     万能:
        这个仓库不管了,
        再重新拉取最新代码,将自己代码复制进去再提交

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值