Git三剑客之基础部分

git三剑客

概要

本篇文章基于极客时间中苏玲老师的《玩转git三剑客》完成

课程资料:https://gitee.com/geekbang-courseware/Git-Learning

一、Git基础

安装Git

**官方下载网址:**https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git

  • Windows:

    开 https://git-scm.com/download/win,下载会自动开始

  • Linux:

    centos等RPM发行版:sudo yum install git-all

    Ubuntu等Debian发行版:sudo apt install git-all

  • MacOS

    下载网址 https://git-scm.com/download/mac

    下载后解压安装包,双击bkg文件即可安装

验证安装

git --version

配置信息

配置user.name和user.email

git config --global user.name ‘your_name’

git config --global user.email ‘your_email’

注意:这里的email是为了可以联系到你,当代码出现问题可以直接发邮件通知你

config三个作用域

  • 配置config

    git config --local 只对当前仓库有效

    git config --global 对当前用户的所有仓库有效

    git config --system 对系统所有用户有效(极少用)

  • 显示config信息

    git config --list --local 如果当前位置没有创建git仓库,则会报错

    git config --list --global

    git config --list --system

创建仓库&&local信息

  • 创建仓库

    mkdir git_project && git init git_project && cd git_project 创建一个新文件,用来学习git相关命令

  • 配置local信息

    git config --local user.name ‘owl’

    git config --local user.email ‘owl@163.com’

  • 对比local和global信息是否一致(结果明显不一致)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2b55fgKL-1670468434100)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211100914631.png)]

  • 创建一个文件,将文件提交到根部

    echo ‘hello git’>> README.txt 创建README.txt文件,然后将hello git内容写入

    git add README.txt 将文件写入到暂存区

    git commit -m"add README.txt" 提交commit -m是描述信息

  • **git log:**查看log日志

    git log

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1PCzfUKT-1670468434101)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211100943859.png)]


footer{
  right: 0;
  bottom: 0;
  position: relative;
  padding: 10px 1rem 10px 0;
  margin-top: 50px;
  font-size: 0.7em;
  text-align: right;
}

footer p{
  margin-bottom:0;
}

简单认识工作区、暂存区

该部分用到相关资料,在资料链接中可以获取。通过四次提交代码来不断完善一个静态页面,从而理解工作区暂存区

  1. 加入index.html和git-log
  2. 加入style.css
  3. 加入script.js
  4. 修改index.html和style.css
1.生成git文件
  • 创建git文件&& 初始化git文件

    mkdir git_learning && git init git_learning && cd git_learning

    • 拷贝index.html和image文件到该目录下

      cp …/data_git/index.html.01 index.html

      cp …/data_git/images . -r

      浏览器打开:file:///home/user/git_learning/index.html 显示一下效果即为成功

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I2tNwTGJ-1670468434102)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211101432337.png)]

    • 将文件提交到暂存区&& 提交代码到仓库

      git add index.html

      git add image/

      git commit -m “add index.html&&image”

    • 查看状态 && 查看log日志

      git status

      git log

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LrDfROwe-1670468434102)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211101437479.png)]

2.加入style.css
  • 拷贝文件到路径下

    mkdir styles

    cp …/data_git/styles/style.css.01 styles/style.css

    • 刷新界面即可看到页面变化

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u5F8YaVX-1670468434103)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211101441231.png)]

  • 将代码添加到暂存区&& 提交到仓库 && 查看日志

    git add styles/

    git ci -m “add styles”

    git log

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R8tpYgE0-1670468434104)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211101444168.png)]

3.加入js文件
  • 拷贝文件 && 查看效果

    cp …/data_git/js -r .

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-muOJ5p0z-1670468434105)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211101448276.png)]

  • 提交文件到暂存区&& 提交到仓库 && 查看日志

    git add js/

    git ci -m"add js"

    git log

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yNzn82z8-1670468434106)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211101450824.png)]

4.修改文件
  • 修改index.html文件,打开该文件,最后加入一下代码

    <footer>
    	<p>
            <a href="https://github.com/TTN-js/unforGITtable">参考项目01</a>
        </p>
    </footer>
    
  • 修改style.css文件,最后加入一下代码

    footer{
      right: 0;
      bottom: 0;
      position: relative;
      padding: 10px 1rem 10px 0;
      margin-top: 50px;
      font-size: 0.7em;
      text-align: right;
    }
    
    footer p{
      margin-bottom:0;
    }
    
  • 提交代码(这里就不截图了,实现的效果是添加了参考文献,显示在页面右下角位置,自行测试吧)

    git add -u

    git ci -m"update code"

重命名

  • git mv命令

    git mv README.txt README.md

    git ci -m"changh name" 改完名字记得提交

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sNNX6gd8-1670468434107)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211101510593.png)]

log-版本演进

  • 基本命令

    git log 查看当前分支提交日志

    git log --all 查看所有分支提交日志

    git log --online 查看简介的提交日志

    git log --n4 查看近四条日志

    git log --all --graph 查看所有分支提交日志,并且显示分支详情

  • 分支基本命令

    git branch -av 查看有哪些分支

    git checkout -b branch_name version_id 创建新分支:branch_name为分支名字,xxx为版本号,从哪个地方创建分支

    git branch -b branch_name realy_branch_name 这里-b后面跟着创建的分支名,以及基于哪个已存在的分支创建分支

    git branch -d branch_name 删除分支

    git checkout branche_name 切换分支

  • 部分演示

    [user@localhost git_learning]$ git log --oneline
    61c5e33 (HEAD -> temp) checkout index.html
    e956d0b add js
    391fdd0 add styles
    c39af74 add index.html && image
    
    [user@localhost git_learning]$ git log --all --graph
    
    * commit 61c5e33d112e54759ff51dee9eb1fc744b5c5d50 (HEAD -> temp)
    | Author: ronghaili <ronghaili.work.com>
    | Date:   Fri Nov 11 10:22:56 2022 +0800
    | 
    |     checkout index.html
    |   
    | * commit dddb933a4d1a6f3ea483d406b203ce5e7434677f (master)
    | | Author: ronghaili <ronghaili.work.com>
    | | Date:   Thu Nov 10 15:09:40 2022 +0800
    | | 
    | |     changh name
    | | 
    | * commit 5ab7e21666d123e7ff63ea81eb18d8b650af0c81
    |/  Author: ronghaili <ronghaili.work.com>
    |   Date:   Thu Nov 10 15:08:16 2022 +0800
    |   
    |       add readmi
    | 
    * commit e956d0b4a585ef13255cdedd9b2a0199264b7e00
    | Author: ronghaili <ronghaili.work.com>
    | Date:   Thu Nov 10 14:49:51 2022 +0800
    | 
    |     add js
    | 
    * commit 391fdd0c1acc576f32fd12459ade35e5b89875ac
    | Author: ronghaili <ronghaili.work.com>
    | Date:   Thu Nov 10 14:43:36 2022 +0800
    | 
    |     add styles
    | 
    * commit c39af74c4a4e764da490f5070eaaddc3fffb14af
      Author: ronghaili <ronghaili.work.com>
      Date:   Thu Nov 10 14:36:45 2022 +0800
    

.git文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qmFGcNR9-1670468434108)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211111221046.png)]

重点文件

  • config

    记录的是local的配置信息,可用于修改相关配置

  • HEAD

    记录的是指向当前分支的引用,具体内容在.git/refs文件加中

  • refs

    存放的是分支信息,分支中保存最新的commit对象

  • objects

    存放的是git对象信息

查看命令

git cat-file -t object_id 查看对象类型

git cat-file -p object_id 查看对象内容

git三大对象

Git对象

Git有三大对象:commit(提交对象)、tree(树对象)、blob(数据对象);所有对象都保存在.git/objects文件夹中

  • commit:是提交时的一个快照,记录着提交时的所有文件快照

  • tree:可以理解为一个文件夹,包含tree和blob对象

  • blob:一个具体文件,包含文件的内容

注意:

blob和自身文件名没有任何关系,只与文件内容相关,即文件相同在git中只有一份blob;

在文件被存放在缓存区,就会自动生成一个blob对象。当进行commit提交,就会生成tree(如果提交存在目录的话)和commit对象

分离头指针

  • 进入分离头指针

    git checkout version_id 使用版本号进入分离头指针

    [user@localhost git_learning]$ git checkout e956d0b
    注意:正在切换到 'e956d0b'。
    
    您正处于分离头指针状态。您可以查看、做试验性的修改及提交,并且您可以在切换
    回一个分支时,丢弃在此状态下所做的提交而不对分支造成影响。
    
    如果您想要通过创建分支来保留在此状态下所做的提交,您可以通过在 switch 命令
    中添加参数 -c 来实现(现在或稍后)。例如:
      git switch -c <新分支名>
    或者撤销此操作:
      git switch -
    
    通过将配置变量 advice.detachedHead 设置为 false 来关闭此建议
    
    HEAD 目前位于 e956d0b add js
    
  • 含义

    分离头指针状态就是 当前处于没有分支的状态;在这种状态下可以继续commit操作,对其他分支没有影响

  • 缺点

    在分离头指针状态下做的一些提交,当切换到新的分支后,有可能git会默认为垃圾清理掉

  • 应用场景

    想做一些尝试性的变更,这样可以随时丢弃掉,无需做其他操作,直接切换到新分支就可以

  • 进入分离状态,HEAD值指向commit引用

    [user@localhost git_learning]$ git cat-file -t 59daf57784
    commit
    
  • 离开分离头指针,同时保存提交记录,可以根据提示创建分支

    [user@localhost git_learning]$ git checkout master
    
    警告:您正丢下 1 个提交,未和任何分支关联:
      59daf57 Backgroud to green
    如果您想要通过创建新分支保存它,这可能是一个好时候。
    如下操作:
     git branch <新分支名> 59daf57
    切换到分支 'master'
    
    [user@localhost git_learning]$ gitk --all
    [user@localhost git_learning]$ git branch fix_css 59daf57
    [user@localhost git_learning]$ git branch -av
    
      fix_css 59daf57 Backgroud to green
    * master  dddb933 changh name
      temp    61c5e33 checkout index.html
    
    

HEAD && branch

branch
  • 创建分支

    git branch -b branch_name realy_branch_name 这里-b后面跟着创建的分支名,以及基于哪个已存在的分支创建分支

diff
  • 查看不同

    git diff version_id version_id

    git diff HEAD HEAD^ 这里的HEAD表示当前提交的信息,HEAD^表示他的上一次提交

HEAD
  • 指向问题

    当处于分离头指针状态,HEAD指向一个commit对象

    当处于某个分支,HEAD指向某个分支,分支本质也是指向某个commit对象

错误演示

  • 添加文件后直接commit

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6nrHHH76-1670468434110)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211100931640.png)]

二、git应用场景

删除分支

  • 普通删除

    git branch -d branch_name
    
  • 强制删除

    git branch -D branch_name
    

commit–修改

  • 修改最近的commit
git commit --amend

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n3VGV40G-1670468434111)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211151431784.png)]

  • 修改旧的commit

    使用的到的命令

    git rebase -i branch_id

  1. 首先查看log日志确认修改哪一个分支的commit
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHsCpedL-1670468434112)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211190911747.png)]

  2. 使用命令

    [owl@owl learning_git]$ git rebase -i 324c28046bdae
    

    执行命令会弹出一下窗口个

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KRlbHzdm-1670468434112)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211190914236.png)]

    这里我们将之前的commit信息:a update index.html 改为 update index.html,如下图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vc23geEA-1670468434113)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211190916085.png)]

    退出该窗口后,会弹出另一个页面,同样修改第一行commit的信息为最新的commit信息,然后退出就完成了commit的修改
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O0bq40WD-1670468434114)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211190918870.png)]

  3. 修改commit后,除了commit信息发生了改变,其修改commit的分支到最新的分支的分支id也会变化,对比如下
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5pEu55GH-1670468434114)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211190923938.png)]

commit–整合

  • 连续多个合并为一个

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XuR7mN9a-1670468434115)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211190933279.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7RsiIf1T-1670468434115)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211190935030.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ai50bUUf-1670468434116)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211190938860.png)]

    修改完输入 wq!退出

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6lC4A6BS-1670468434116)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211190954824.png)]

  • 把间隔的几个commit整合到一起
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTBdQedc-1670468434117)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211191006089.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aTsqDHEP-1670468434117)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211191005229.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwS5deXZ-1670468434118)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211191008189.png)]

文件比较

  • 暂存区 VS HEAD

    git diff --cached

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2xwaw1WE-1670468434118)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211191021811.png)]

  • 暂存区 VS 工作区

    git diff

  • 比较某个文件的区别

    git diff – file_name --cached

  • 比较几个commit的差异

    git diff branch1_name branch2_name – file_name 比较两个分支中某个文件的差异

    git diff branch_id branch_i --file_name

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9NYy3CA-1670468434119)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211211641920.png)]

文件恢复

  • 暂存区恢复与HEAD一致

git reset HEAD

git reset HEAD – file_name

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Or6S5R7o-1670468434120)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211191728675.png)]

  • 工作区恢复与暂存区一致

git checkout file_name

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R8CEGSdr-1670468434120)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211191734669.png)]

消除最近几次提交

git reset --hard 慎用

正确删除文件

  • 方式一

    rm -rf file_name

    git rm file_name

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1UC6AztY-1670468434121)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211211646973.png)]

  • 方式二

    git rm file_name

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0CfK8aD1-1670468434122)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211211649581.png)]

处理紧急任务

临时保存修改中的git,处理完紧急任务恢复

git stash 将临时修改隐藏起来

git stash list 查看stash 中的记录

git stash pop 将隐藏的文件取出来 同时删除该记录

git stash apply 将隐藏的文件取出来 保留记录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2q89QVp-1670468434122)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211211658411.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f4hJYdFh-1670468434123)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211211658586.png)]

无需提交文件

创建文件.gitignore

注意,如果是过滤文件夹的话,文件夹名后面需要夹/

备份

其他

  • git reset --hard

    比如我们想将暂存区的文件全部清理掉,可以使用该命令

    git reset --hard

    git ci -am"描述" 添加到暂存区&&提交到仓库

    特别注意,这命令是会清理掉暂存区所有文件,谨慎使用

    • 效果

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TKoynwF0-1670468434124)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211101525002.png)]

三、Git与GitHub

注册GitHub

配置公私钥

  • centos端

检查是否存在.ssh文件

cd ~/.ssh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCqX0jKL-1670468434124)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211221939817.png)]

生成一个新的公私钥

ssh-keygen -t 4096 -C “you email”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v03uuPWJ-1670468434125)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211221942872.png)]

查看公私钥

ls -la

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZerzHjP-1670468434125)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211221943633.png)]

获取公钥

cat id_rsa.pub

  • github 端

    找到ssh添加key

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mL0FYCBP-1670468434126)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211221945502.png)]

github创建个人仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WATG1FFs-1670468434127)(https://gitee.com/owl_eye/image-bed/raw/master/img/202211222033371.png)]

本地仓库同步到GitHUb

  1. 添加远程版本库

git remote add [name] [url] 添加远程版本库

git remote -v 显示所有远程仓库

git remote rm [name] 删除远程仓库

name:自定义远程仓库名

URL:远程ssh地址

[owl@owl learning_git]$ git remote add origin git@github.com:PyGriffin/learning_git.git
[owl@owl learning_git]$ git remote -v

github	git@github.com:PyGriffin/learning_git.git (fetch)
github	git@github.com:PyGriffin/learning_git.git (push)

2.远端存在本地不存在的文件,首先要拉取远端的数据

git pull origin

git branch -av 显示线上线下所有分支

git merge origin/master 合并master分支

git push origin

[owl@owl learning_git]$ git merge origin/master

自动合并 README.md
冲突(添加/添加):合并冲突于 README.md
自动合并失败,修正冲突然后提交修正的结果。
[owl@owl learning_git]$ vi README.md 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你从零开始学习Git时,以下是一些入门的步骤和概念: 1. 安装Git:首先,你需要在你的计算机上安装Git。你可以从Git官方网站(https://git-scm.com/)下载适合你操作系统的安装程序,并按照提示进行安装。 2. 创建一个仓库:在Git中,你可以使用git init命令在本地创建一个新的仓库。进入你想要创建仓库的目录,然后运行git init命令。 3. 添加文件:将你想要跟踪的文件添加到Git仓库中。使用git add命令将文件添加到暂存区。 4. 提交更改:使用git commit命令将暂存区中的更改提交到本地仓库。每次提交都应该附带一条有意义的提交消息,以便于日后查看。 5. 查看状态:使用git status命令可以查看当前仓库的状态,包括已修改但未暂存的文件、已暂存但未提交的文件等。 6. 查看历史记录:使用git log命令可以查看提交历史记录,包括每次提交的作者、日期、提交消息等信息。 7. 分支管理:Git允许你创建和切换分支,以便于并行开发和管理不同的功能。使用git branch命令可以查看当前分支列表,使用git checkout命令可以切换分支。 8. 远程仓库:Git还提供了与远程仓库进行交互的功能,你可以将本地仓库推送到远程仓库,或者从远程仓库拉取最新的更改。使用git remote命令可以管理远程仓库。 这些是Git的一些基本概念和操作步骤,希望对你入门有所帮助。如果你有更具体的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值