Git 学习笔记

写篇文章记录一下自己学习 git 的历程。开门见山,git 是什么就不说了,既然学习它,还是要知道学的是个什么东西。直接开始吧~


安装,配置

1.下载安装

https://git-scm.com/book/zh/v2/起步-安装-Git

根据自己系统选择不同的安装软件即可,安装成功后可使用 git --version 查看当前安装的 git 版本

2.配置 user 信息

user 代表当前的用户标识,有 name 和 email,下面是配置用户命令

git config --global user.name 'xxx'
git config --global user.email 'xxx@xx.com'

-- global 代表全局设置,一般常用的还有 --local ,设置的是当前具有 git 控制的项目中的用户标识

3.查看 user 配置

user 是配置的一种,可以使用 git config --list 查看,同样可以查看 全局 或 当前项目 配置

git config --list --global
git config --list --local

 4.git 时间格式配置

我们在使用 git log 查看时,显示的时间是这样的:

 

 看起来不够直观,可以配置一下格式:

git config --global log.date format:"%Y-%m-%d %H:%M:%S"

配置好后的时间格式:

 

 

通过 git 管理项目

场景1:把已有项目纳入 git 管理

进入项目根目录,使用命令:

git init

场景2:新建项目直接用 git 管理

在当前路径创建项目 xxx,使用命令:

git init xxx
cd xxx

开发时使用 Git 的基本流程

创建或修改本地文件 -> 暂存当前修改(git add) -> 提交本次修改 (git commit)   ...

工作区                            暂存区                                 本地仓库

 

 

git 基础命令

git 保存变更内容到暂存区

多个目标用空格隔开,保存 xxx.js 文件和 xxx 文件夹的变更到暂存区

git add xxx.js xxx

如果有多个文件变更,可以使用下面的命令全部提交到暂存区,也可在后面加上对应的路径:

git add -A
git add -u
git add .

-A 是 --all 的缩写,-A 和 . 在新版 git 中含义相同,提交所有修改。-u 则只添加修改和删除的,不添加新增的。

 

git 暂存区

查看暂存区内容

git status

撤销暂存区内容,xxx 对应文件,不填则对所有文件操作

git reset HEAD xxx

撤销本地修改,改为暂存区内容,xxx 为文件名字

git checkout -- xxx

 

git 提交

提交暂存区变更到本地仓库,-m 为本次变更的备注:

git commit -m '备注'

或者可以不进行 add 操作,直接将修改内容提交(不推荐):

git commit -am 'xxx'

消除最近几次提交(慎用):消除 xxx commit 后的所有 commit 数据;如果 xxx 为 HEAD 则直接放弃所有工作区和暂存区更改

git reset --hard xxx

 

git 修改提交信息

注意:这些操作仅是在本地操作时使用,如果已经提交到远程分支,慎用

修改最新一次的提交信息

git commit --amend

修改以前的 commit 信息;输入命令后会新打开一个文件,根据提示信息,在需要修改的那个分支前,将 pick 改成 reword 保存并退出;然后会进入那次分支的 message 文件,编辑保存退出就修改好了

git rebase -i xxx

把连续的几个 commit 合并起来:还是同样命令,进入上图文件,保留第一行和最后一行 pick ,将需要合并的改成 squash 这样就合并了

把间隔的几个 commit 合并起来:调整 commit 位置,使其连续,操作与上述相同

 

git 查看日志

git log

一般而言,如果一个任务需要修改多个文件,最好是每次修改一部分后添加到暂存区,全部修改完后再一起提交,git log 的其它用法:

简洁的显示   --oneline

git log --oneline

支持看固定条数 2条,4条   --n[x]

git log -n2 --oneline
git log -n4 --oneline

查看所有分支  --all

git log --all

图形化 log 显示   --graph

git log --graph

以上几个方式都可以组合使用,可以更清晰的看到 log 信息

 

git 分支

查看分支;-a 查看所有,包括远程仓库分支;-v 分支最新信息;

git branch
git branch -a
git branch -v

新建分支;checkout 为创建分支;-b 是创建后并切换到该分支;xxx 是分支的名字; yyy 是基于该分支创建,可以不填,默认基于当前分支

同样的 checkout 也可以指向某次 commit ,具体后面的 git 小技巧会说到

git checkout -b xxx yyy

 删除分支;-d 删除分支(未合并的情况下无法删除) 或者是 -D (强制删除)

git branch -d xxx

 

git 比较差异

比较 工作区 和 暂存区 的差异,如果只看对应文件,可以加上 -- 后跟多个文件名

git diff

比较 暂存区 和当前仓库 HEAD 的差异

git diff --cached

比较 commit 之间差异,可以使用 diff 命令;xxx 和 yyy 可以是两个不同的 commit;或者是使用 HEAD 指向比较,HEAD 后的 ^ 代表与其父亲比较,可以有多个,~ 则是向前查找多次

git diff xxx yyy
git diff HEAD HEAD^
git diff HEAD HEAD~2

 比较分支之间的差异;xxx yyy 均为分支名字(其实就是两个分支最新的 commit 比较);-- 后跟你想看的文件,部填则是全部

git diff xxx yyy -- abc.js

 

git 文件操作

修改文件名:一般我们直接修改文件名的话,git 会提示有文件被删除,且有一个新文件出现,我们需要先 git add 添加新文件,然后 git rm 删除 git 中管理的旧文件,git 才会提醒文件名变更。

但是如果直接使用 git mv 命令修改文件名,则不需要这么繁琐:

git mv xxx xxs

删除文件:

git rm xxx

 

git 隐藏功能

可以将工作区的更改先隐藏起来

git stash

查看隐藏内容

git stash list

取出隐藏的内容

# 取出来后就删除隐藏变更
git stash pop
# 取出来后依旧保留变更
git stash apply

 

git 仓库的备份

git 仓库备份与克隆类似,--bare 为不带工作区内容,只备份仓库内容;xxx 为协议地址,name 为备份名字;支持哑协议(传输进度不可见),智能协议(进度可见),http,ssh

git clone --bare xxx name

 

 

git 图形化界面

除了 git gui 图形化工具之外呢,我们还可以使用 gitk 命令调出 git 自带的的图形化界面

 

 

git 的三大对象:commit tree blob

git commit:每次提交后都会生成一个 commit 对象

git tree:文件 tree,每次 commit 对应了一个 tree,相当于一个快照

git blob:真正的文件内容,只包含内容,只要文件内容相同,就对应一个文件,依赖于 tree

每个对象都有自己的哈希值标识,我们可以使用 cat-file 命令查看对应哈希是什么,以及其内容

# 查看 xxx hsah 对应的文件类型
git cat-file -t xxx
# 查看 xxx hsah 对应的文件内容
git cat-file -p xxx

三大对象简图:

 

 

.git 文件夹的小知识

HEAD:储存当前工作区指向,一般都是分支

config:当前配置

refs:引用,存放 branch,tags 的地方

objects:储存的文件内容(只要任何文件的内容相同,那就是唯一的一个 blob)

 

 

git 小技巧

分离 HEAD 指针(有一定风险):

使用 checkout 指向一次 commit,这种情况下,HEAD 并没有指向一个分支,你所做的操作在切换分支后可能都会被 git 清除掉

试用场景:在某个分支进行某些尝试,然后并不需要保留它,checkout 后这些尝试都不会去保存

假设你在分离指针后,突然想保留这次提交了,那可以新建一个分支来保留它:

# xxx:branch name
git switch -c xxx

 

如何设置某些文件不纳入版本控制

使用 .gitignore 在里面添加对应的规范

 

 

 

 

......  持续更新中

posted @ 2020-05-29 11:21  镜暮  阅读(123)  评论(0编辑  收藏  举报