分布式版本控制工具Git--基本操作指令

安装完配置name/email

$ git config --global user.name="..."
$ git config --global user.email="..."

初始化git仓

$ git init

随后都隐藏$

此时项目文件夹内生成.git隐藏文件夹
image

目录下

image

各层文件作用
  • hooks:存放一些shell脚本

  • info:包含git仓库的一些信息

  • logs:保存所有更新的引用记录。logs文件夹有refs文件夹和HEAD文件

    (1)HEAD文件保存的是所有的操作记录,使用git reflog查询的结果就是从这个文件来的

    (2)refs文件夹中一般会有两个文件夹:

    1. heads: 存储所有本地分支的对象,每个本地分支名对应一个文件名称。这些分支文件中存储的是对应本地分支下的操作记录。使用git branch查看本地所有分支时,查询出的分支就是heads文件夹下所有文件的名称。
    2. remotes:存储所有远程分支的对象,每个远程分支对应一个文件名称。这些分支文件中存储的是对应远程分支下的操作记录
  • objects:存放所有 git 对象,哈希值一共40位,前 2 位作为文件夹名称,后 38 位作为对象文件名

  • refs:引用,一般有三个文件夹:
    (1)heads:存储所有本地分支的对象,每个本地分支名对应一个文件名称,文件中存储了分支最近一次提交commit对应的id(是一个哈希值)。
    (2)remotes:远程仓库信息,其中\refs\remotes\origin\HEAD记录了当前分支指向的远程分支,即当前分支提交到的远程分支
    (3)tags: 发布重要版本时,用于标记此里程碑。

  • COMMIT_EDITMSG:存储着最近一次的提交信息,Git系统不会用到这个文件,只是给用户一个参考

  • config:存储当前仓库的配置信息

  • description:描述信息

  • HEAD:HEAD指针,它指向了当前分支,这个文件记录了当前分支是哪个分支。

  • index:暂存区(stage),是一个二进制文件

操作指令

推送入仓

git status查看状态

  • 未入仓的文件状态为 Untracked(未跟踪)

git add 文件名将文件添加至暂存区

  • 此时状态为 Staged(暂存)

git commit 文件名将文件提交至本地库,编写注释完成提交 或者

git commit -m "注释/解释内容" 文件名直接带注释提交

  • 此时状态为 Unmodify(未修改),即版本库中的文件快照内容与文件夹中完全一致
CRLF警告

image
直接
git config --global core.autocrlf false

解释:由于不同系统的换行符不同引起的警告,无碍

版本回退穿梭
版本更新
  • 修改了某个文件后,此文件的status变为 Modified(已修改)

需要重新对该文件进行add,commit操作
git add 文件名
git commit -m "注释/解释内容" 可不跟文件名

git log 文件名 查看该文件历史记录
git log --pretty=oneline 文件名 可简易查看

版本回退

git reset --hard HEAD^ 回退到上次操作
git reset --hard HEAD~n回退n次操作

版本穿越

git reflog 文件名 查看历史记录的版本号
git reset --hard 7位版本号 版本号的穿越

还原文件

git restore 文件名 撤销修改过的文件内容,已修改未add

删除某个git文件(已在仓中)

git rm 文件名 此时该文件状态变为 deleted
然后
git commit -m "日志msg"完成此操作

Git的三个区

  1. 工作区(Working Directory)
    电脑上的硬盘目录

  2. 本地库(Repository)
    工作区中的隐藏目录.git就是Git的本地版本库

  3. 暂存区(Stage)
    一般存放在.git下的index文件,有时也称为索引

图片源自网络

image

Git分支操作

分支的作用,举个例子:产品上线的同时又要修改bug,又要开发新功能供给上线,分支让主生产(主线程)不受影响的情况下完成版本迭代

创建分支

git branch 分支名 创建分支
git branch -v 查看分支

分支为镜像不影响主分支

切换分支

git checkout 分支名 切换至分支
git checkout -b 分支名 一步完成(创建加切换)

合并分支

git checkout master 先切换至主干
git merge 目标分支名 把目标分支合并到当前分支

此处出现的问题:版本冲突(本地库)

image

image

  • 冲突原因:不同分支都做出了修改,系统无法决定合并哪个分支
  • 解决方法:人工干预,不能将其他开发人员的代码覆盖或者del掉
    👇
    git diff:查看冲突,对比(vim也能查看)
    双方共同解决(对冲突文件rebuild)vim a.txt
    git commit -m "fix conflict"
    git add a.txt
    git commit -m "fix conflict"

顺利解决
image

删除分支

git checkout master 先切换至主干

git branch -d 分支名 删除分支

关联远程库

创建SSH Key

ssh-keygen -t rsa -C 邮箱地址创建SHH Key
会生成一个类似二维码的output和一个sha-256的哈希
用户本地生成一个.ssh的文件夹,其中包含公钥和私钥
公钥用于建立远程库链接时的凭据

image

image

视为创建成功

测试连接性:

ssh -T git@github.com

返回

image

连接成功

关联远程库

git remote add origin https://github.com/aabbcc/a.git 关联一个远程库

git push -u origin main(第一次要用-u) 把当前的main分支推送至远程库(push之前先fetch!!!避免冲突!!!)

git pull orgin main 拉取远程库至main分支

git clone https://github.com/..... 从远程库中克隆

git remote 查看远程库的信息(加-v是详细信息)

git remote rm origin移除远程库

远程库与本地库
三种状态

先执行git fetch origin 分支名匹配远程库

然后执行git status

  1. 本地库比远程库新(fetch后可放心push)
    image

  2. 远程库比本地库新(fetch后首先pull,避免冲突!)
    image

  3. 本地库与远程库版本一致
    image

posted @ 2021-10-18 19:45  Wenfancy  阅读(39)  评论(0编辑  收藏  举报