git 基础学习教程| 青训营笔记

164 阅读5分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记

git

本地库连接github远程库:

 git remote add origin git@github.com:yourname/learn.git
 git branch -M main
 git push -u origin main
  1. -M: 是 --move --force的缩写。
  • --move(-m): Move/rename a branch.
  • --force(-f): 即使新命名的branch名存在也执行。
  1. 第一次推送master分支时,需要加上-u参数,可以将本地的master分支推送到远程master上,

    并且实现两者的同步,以后就不需要这个参数了:$ git push origin main

基础

创建仓库并推送

使用git 打开文件夹 输入 git init 创建一个仓库

基本操作-命令

  1. 状态查看操作
  • git status
  • 查看工作区、暂存区状态
  1. 添加操作
  • git add[file name]

    (git add . : 当前目录全部添加到暂存取)

  • 将工作区的“新建/修改”添加到暂存区

  1. 提交操作
  • git commit -m “commit message”[file name]

  • 将暂存区的内容提交到本地库

  • git commit -a:

    加了-a,在 commit 的时候,能帮你省一步 git add ,但也只是对修改删除文件有效, 新文件还是要 git add,不然就是 untracked 状态

推送本地库:

 git push -u origin main

image-20211117235457219

密码 key:********

image-20211117155929196

  1. 查看、操作版本的前进和后退

操作指针的前进和后退进行版本的前进和回退

查看历史版本 git log

--pretty=oneline(以一行显示)

image-20211117160756690

--oneline (显示一部分哈希值,日志)

image-20211117160649314

reflog (显示指针移动次数)

image-20211117160851356

基于索引值操作[推荐]

  1. git reset --hard [局部索引值](reflog操作之后显示的)
  2. 使用^符号:只能回退
  • git reset --hard HEAD^
  • 一个^表示一步,n个表示n步
  1. git reset --hard HEAD~3
  • (以波浪线连接,数字为要回退的版本,比如这里是回退三个版本)

公钥

image-20211117233804775

得到密钥

image-20211117234332314

直接复制会破怪密钥格式,输入指令复制:

 clip < ~/.ssh/id_rsa.pub

image-20211117234332314

工作区域、暂存区域、Git仓库

Git的工作流程:

  1. 在工作目录中添加、修改
  2. 将需要进行版本管理的文件放入暂存区域
  3. 将暂存区域的文件提交到Git仓库

Git管理的文件有三种状态:

  1. 有修改(modified)
  2. 已暂存(staged)
  3. 已提交(committed)

将工作目录的文件放在Git仓库只需要两步:

git add 文件名

git commit -m “对本次文档的说明”

项目级别/仓库级别,仅在当前本地范围内有效

系统用户级别:登陆当前操作系统的用户范围

使用Linux cat命令 查看config(配置)

cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。

 $ cat .git/config
 ​
 $ cat .git/config
 [core]
         repositoryformatversion = 0
         filemode = false
         bare = false
         logallrefupdates = true
         symlinks = false
         ignorecase = true
 [user]
         name = tom_pro
         email = goodMorning_pro@cocovs.com
 ​

使用vim编辑文件 vim 文件名

退出vim编辑,Esc+:wq

git将不同版本的修改添加进.git文件中

git branch/checkout:提交、切换分支

git branch <分支名> :创建一个新的分支

git checkout <分支名> :切换到当前分支

git merge 分支和合并

将两个分支合并到一起。就是说我们新建一个分支,在其上开发某个新功能,开发完成后再合并回主线。

git merge:在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。

image-20211212111753830

git rebase第二种合并分支的方法

实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。Rebase 的优势就是可以创造更线性的提交历史

Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。 image-20211212112904833

git在提交树上移动

HEAD是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。

HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。

HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。

分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。操作是指图中的c1,分支是main

image-20211212133308634

查看HEAD指向

cat .git/HEAD

查看HEAD指向的引用

git symbolic-ref HEAD

相对引用 git log

通过指定提交记录哈希值的方式在 Git 中移动不太方便。在实际应用时,并没有像本程序中这么漂亮的可视化提交树供你参考,所以你就不得不用 git log 来查查看提交记录的哈希值。

并且哈希值在真实的 Git 世界中也会更长(译者注:基于 SHA-1,共 40 位)。例如前一关的介绍中的提交记录的哈希值可能是 fed2da64c0efc5293610bdd892f82a58e8cbc5d8

比较令人欣慰的是,Git 对哈希的处理很智能。你只需要提供能够唯一标识提交记录的前几个字符即可。因此我可以仅输入fed2 而不是上面的一长串字符。

通过哈希值指定提交记录很不方便,所以 Git 引入了相对引用。使用相对引用的话,你就可以从一个易于记忆的地方(比如 bugFix 分支或 HEAD)开始计算。

两个简单的用法:

  • 使用 ~<num> 向上移动多个提交记录,如 ~3
  • 使用 ^ 向上移动 1 个提交记录

~操作符

如果你想在提交树中向上移动很多步的话,敲那么多 ^ 貌似也挺烦人的,Git 当然也考虑到了这一点,于是又引入了操作符 ~。该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。

可以直接使用 -f 选项让分支指向另一个提交。

git branch -f main HEAD~3,命令会将 main 分支强制指向 HEAD 的第 3 级父提交。

撤销变更 reset or revert

在 Git 里撤销变更的方法很多。和提交一样,撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。我们这个应用主要关注的是后者。

主要有两种方法用来撤销变更 :

  • git reset

    通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。向上移动分支,原来指向的提交记录就跟从来没有提交过一样。

  • git revert

    虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!为了撤销更改并分享给别人,我们需要使用 git revert

    撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2' 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2' 的状态与 C1 是相同的。

    revert 之后就可以把你的更改推送到远程仓库与别人分享啦。 image-20211212135810906

远程仓库

下载github项目

在目标文件夹中右键进入git

git clone git@github.com:william-zk/RB_Tree.git

常用操作清单

命令功能
git init在本地的当前目录里初始化git仓库
git status查看当前仓库的状态
git add -A增加目录中所有的文件到缓存区
git add file增加相应文件到缓存区
git commit -m "信息"将缓存区中更改提交到本地仓库
git log查看当前版本之前的提交记录
git reflog查看HEAD的变更记录,包括回退
git branch -b branch_name建立一个新的分支
git diff查看当前文件与缓存区文件的差异
git checkout -- file取消更改,将缓存区的文件提取覆盖当前文件
git reset --hard 版本号回退到相应版本号,同样也可以回退到未来的版本号
git clean -xf删除当前目录中所有未追踪的文件
git config --global core.quotepath false处理中文文件名