Git 知识点及常用指令,看这一篇就够了

本文精简涵盖了 Git 工作、笔试、面试的重要知识点,旨在为有复习需求的同学提供全方位、无死角的内容,不适合零基础的同学。原创不易,欢迎关注。

Git

一、基础知识

  1. 集中式版本控制工具:SVN、CVS

  2. 分布式版本控制工具:Git

    Git

  3. Git 工作流程图

    工作流程图

    指令流程

    暂存区可以用来解耦,如果没有暂存区,会造成很多次提交

二、Git 指令

指令功能
git add 文件名/通配符将文件放入暂存区
git ls-files查看暂存区中的文件
git rm --cached 文件名将该文件取消暂存,之后该文件会变为未跟踪状态
git commit -m "注释"将所有文件从暂存区提交到仓库(-m 即 message),提交后并不会清除暂存区
git status [-s]查看所有文件的状态,-s 简略状态(第一列是暂存区状态,第二列是工作区状态)
git log [--oneline]查看提交日志(-oneline 以一行的方式简略输出)
git reset --soft 版本号回滚版本
git reset --hard 版本号回滚版本(常用)
git reset [--mixed] 版本号回滚版本(可以省略 --mixed ,效果一样)
git reflog [--oneline]所有操作记录
touch .gitignore创建 .gitignore 以添加要忽略的文件,添加后该文件不会被版本控制(如要 ignore.a 文件,可编辑 *.a
rm 文件名删除单个文件(操作无法撤销)
rm -rf 目录名用递归的方式删除整个目录(操作无法撤销)
mv 文件1 文件2将文件1移动到本目录,命名为文件2(可以用来完成重命名操作,如 mv .gitingnore .gitignore
git branch查看所有分支
git branch 分支名创建分支
git merge 待合并分支合并其他分支到当前分支
git checkout 分支名切换分支
git checkout -b 分支名创建并切换分支
git branch -d 分支名删除分支(需要做各种检查)
git branch -D 分支名强制删除分支
git remote查看远程仓库
git push [-f] [-u] [远端名称 [本地分支名][:远端分支名]]-f 表示强制覆盖,一般不用
-u 推送到远端的同时与远端分支关联
如果本地分支已经关联远端分支,则可以简写为 git push
git branch -vv查看本地分支和远端分支的关联

三、其他知识

  1. 文件状态

    状态说明
    未跟踪 U从未被 Git 管理过
    新添加 A第一次被 Git 暂存
    未修改 ‘’addcommit 后会进入该状态,三个区域统一
    已修改 M工作区内容变化
  2. 三种 reset 方式

    reset三种模式区别

  3. 合并冲突

    核心思路:处理文件中有冲突的地方、手动 addcommit

    注意几种特殊情况:

    • 先创建 test.txt,再创建分支 dev,修改 dev 中的 test.txt 后进行冲突合并时,会发生 Fast-forward 合并,此时不会发生冲突,它会直接将目标分支(master)的指针移动到源分支(dev)的指针位置(也就是快进),而不会创建新的合并提交。在这种情况下,mastertest.txt 的内容将被 dev 分支上的版本覆盖。

    • 会产生新的合并提交的情况

      分支-合并与提交
      分支-合并与提交2

    • A 先在本地修改了 file.txt 中的内容,并 add、commit、push;之后 B 也在本地修改了 file.txt 的内容,两个人修改的内容处于同一行,B 也 add、commit 了,此时 B 发现 A 已经在他之前修改过 file.txt 的内容并已经 push 到远程仓库,

      • 情况一:如果 B 执意 push 上远程仓库,会报错
      • 情况二:B 先将远程仓库中的 file.txt 拉下来,此时拉取会出现冲突,B 将冲突内容修改后再进行 push 则不会报错。之后,如果 A 再从远程仓库中 pull 下来 file.txt,不会报错,因为 A 在之前 push 后到最后 pull 这段时间,没有修改过本地的 file.txt
  4. 忽略文件

    通过 .gitignore 文件可以让 git 彻底忽略跟踪指定文件(在 VsCode 中,这些文件会被标记为灰色)

    例如,系统或软件自动生成的文件,编译产生的结果文件,运行时生成的日志文件、缓存文件、临时文件,涉及文件、密码、密钥等文件,都需要进行忽略

    // 忽略 npm 下载的第三方包
    node_modules
    // 忽略分发文件夹
    dist
    // 忽略 VsCode 配置文件
    .vscode
    // 忽略密钥文件
    *.pem
    *.cer
    // 忽略日志文件
    *.log
    

    如果某些需要忽略的文件已经被暂存区跟踪过,可以先从暂存区中移除

  5. 推送到远程仓库

    1. 本地配置全局 nameemail

      $ git config --global user.name '杨紫瑞' 
      $ git config --global user.email '12777993+yzr-kito@user.noreply.gitee.com'
      
    2. 两种不同方式进行远端仓库连接

      1. SSH 免密方式(通过 SSH 进行绑定,无需验证 gitee 账号密码)

        • 生成 ssh 公钥

          $ ssh-keygen -t ed25519 -C "Gitee SSH Key"
          
        • 查看公钥

          $ cat ~/.ssh/id_ed25519.pub
          
        • 将生成的 ssh 公钥添加至 gitee

        • 测试连接

          $ ssh -T git@gitee.com
          
        • 对接仓库:通过远程仓库的 ssh ,将本地仓库与远程仓库对接(将远程仓库命名为 origin

          $ git remote add origin git@gitee.com:yzr-kito/notes.git
          
      2. HTTPS 方式(需要验证 gitee 账号密码)

        • 对接仓库

          $ git remote add origin https://gitee.com/yzr-kito/notes.git
          
        • 输入 gitee 账号密码验证

    3. 如果是非空仓库(如远端仓库中有 readme.md 等初始化文件),需要先 pull 才能 push(不 pull 会报错)

      但直接 pull 也会报错,需要使用**变基(--rebase)**进行强制拉取

      $ git pull --rebase origin master
      
    4. 将本地仓库的主分支 master 推送至远程仓库

      $ git push origin master
      
    5. 将本地分支 master 和远端分支 master 建立关联(--set-upstream 也可以写成 -u

      $ git push --set-upstream origin master:master
      
    6. 以后推送只需要 git push 即可(每次修改本地代码之前,先 pull 一下,确保本地代码始终最新)

    7. 克隆远程仓库至本地

      $ git clone git@gitee.com:yzr-kito/notes.git [克隆后的本地名称]
      
    8. 抓取:将远程仓库中的更新内容(也就是 git log)都抓取到本地,不会进行合并

      $ git fetch origin [要抓取的分支,如果不指定,则会抓取所有分支]
      
    9. 将远程仓库更新的内容合并到本地

      $ git merge origin/master
      
    10. 拉取:将远程仓库中的更新拉到本地并合并,等同于 fetch + merge

    $ git pull origin [要抓取的分支,如果不指定,则会抓取所有分支]
    
  6. Gitee Pages 服务

    如果想用 gitee 的服务器免费部署静态网页,可以使用 Gitee Pages 进行部署

  • 54
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值