git 是非常灵活的 项目管理工具,灵活主要体现在 同一个 操作 可以通过 不同的 方式实现。
以下介绍几个核心概念:
- Workspace:工作区,文件编辑的地方
- Index / Stage:暂存区,.git目录下的index文件, 暂存区会记录git add添加文件的相关信息
- Repository:本地仓库,git commit后同步index的目录树到本地仓库
- Remote:远程仓库
^_^ git安装
sudo apt install git # 开始安装
git --version
^_^ 本地仓 和 远程仓 的 连接
add方式 建立 连接
git init
git add .
git commit -m "..."
git remote add origin 远程仓地址(https 或 ssh)
git push -u origin master
git push
git pull
说明:
- -u 参数说明:是 --set-upstream 的简写,作用是 关联分支 。
以后 git push 就能默认找到关联分支
master;- add . 和 add * 是有区别的,add . 在添加文件的时候,会根据 .gitignore文件做过滤
- 强推送: git push -u origin master
-f
的后果是:本次推送的内容会覆盖点 该分之下原有的内容及推送记录。- push 和 pull 都是默认的
关联分支
,如果想 推送 和 拉取 非关联分支
,那就得指定一下: git pushorigin
dev
克隆方式建立连接
git clone 远程仓地址(https 或 ssh)
删除连接
git remote rm origin
查看连接aaa.txt
git remote -v
说明:
如果是 https:// 就是采用的是https方式;
如果是 git@ 就是采用的是 ssh 的方式;
若是什么都不返回说明 没有和 远程建立连接
扩展: 操作git钩子
git 在 commit 或 push 之前都会调用一个钩子,如不想用这个钩子,只需将相应的文件夹改个名字
例如,不想在 commit 时 进行js的语法检测:
cd .git/hooks
mv pre-commit pre-commit123
完成
^_^ commit版本迭代
1. 查看 commit推送记录
# 缩略展示
git log --oneline
# 只看 指定用户的 推送记录
git log --author=WangHaiOu
# 只看 指定日志 之前的推送记录
git log --before='2022-08-22'
说明:
- 每个commit都有对应唯一的commitID
- 每次commit就相当于是一个版本
2. 版本回退
git reset --hard HEAD^ # 回到上个版本
git reset --hard HEAD^^ # 回到上上个版本
git reset --hard commitID # 回到指定的版本
git reflog # 查看 操作版本 的记录
3. 版本标签
git tag v1.0 # 给当前最新的头版本打上标签 v1.0
git tag v1.0 commitID # 给指定版本打上标签
git tag # 查看打的所有标签aaa.txtaaa.txt
git show v1.0 # 查看 v1.0 版本的具体信息
git tag -d v1.0 # 删除v1.0版本标签(打该标签的版本无任何影响)
4. 版本区别 git diff
使用git比较两次commit之间的差异文件
commitHash1 是先于 commitHash2 提交的哈希值
git diff commitHash1 commitHash2 --stat // 查看哪些文件是有改动的
git diff commitHash1 commitHash2 src/views/home/Home.vue // 查看文件具体改动的内容
5. 冲突合并
拉取的 内容 和 我们 最新 commit 后的内容 产生冲突时, 要进行 冲突处理。
# step1: 查看是否有 冲突的 文件
git diff --check
===》 以下显示 冲突的文件 和 位置
aaa.txt:3: leftover conflict marker
aaa.txt:5: leftover conflict marker
aaa.txt:7: leftover conflict marker
# 在vscode中看到的aaa.txt是这样的:
1 func aaa() {
2 this is aaa is name tom
3 <<<<<<< HEAD
4 this is add tom123
5 =======
6 this is add cat123
7 >>>>>>> 74ae07ab9aaef1651f3029e4c3fac4d5482bde64
8 this is hahaah
9 }
# step2: 合并冲突, 通过 vim 处理冲突,以上冲突 合并 可以删除 第 3,4,5,7行。
vim aaa.txt
# 推荐使用 vscode 进行处理,方便省心。
6. 改动查看 git show
- 查看改动 的 文件信息:
# 1.查看最后一次提交记录的修改文件信息
git show --raw
# 2.查看指定commit id对应修改文件列表
git show --raw commit_id
######### 输出:
:100644 100644 e562209 7eab101 M pkg/logger/logger.go
:100644 100644 fff176c 86f72e6 D pkg/setting/section.go
:100644 100644 586daa9 80f292b A pkg/setting/setting.go
:100644 100644 dca125f 254e8ad M pkg/tracer/tracer.go
:100644 100644 db5ce21 5bc1eb2 M storage/logs/app.log
输出说明: ===> M:修改 A:增加 D:删除
- 查看改动 的 文件 内容信息:
# 1.查看最后一次提交记录的修改
git show
# 2.查看指定commit id对应的修改
git show commit_id
# 3.查看指定commit id对应的 特某文件 的 修改
git show commitId fileName
######### 输出:
commit 2447e2b9c15472f2ead7bf451aa5f11111111112 (HEAD -> master)
Author: aaa <aaa@163.com>
Date: Sun Aug 21 15:22:08 2022 +0800
update example data
# 第一行 -------------------
diff --git a/name.txt b/name.txt
# 第二行 -------------------
index ac37a53..0ed306a 100644
# 第三行 -------------------
--- a/name.txt
+++ b/name.txt
# 第四行 -------------------
@@ -1,4 +1,4 @@
tom
-alice
+jerry
bily
andy
# 第五行 -------------------
\ No newline at end of file
diff --git a/age.txt b/age.txt
......
\ No newline at end of file
输出说明:
- 第一行: diff --git a/name.txt b/name.txt
该行是说:接下来 展示中,以 a/name.txt 代表修改之前的文件名, 以 b/name.txt 代表修改之后的文件名。- 第二行:index ac37a53…0ed306a 100644
ac37a53: 修改之前的 文件对象; 0ed306a:修改只会的文件对象。
100644:表示这是一个常规文件,文件权限为 644# 通过 一下命令 可以看 指定 文件对象 的 当时状态 的 文件具体内容。 git cat-file -p 61ea990
- 第三行:
--- a/name.txt
表示修改前的文件;+++ b/name.txt
表示修改后的文件- 第四行:
@@ -1,4 +1,4 @@
: 修改区域,开头和结尾的 @@ 为固定格式。
-1,4 表示 这个 修改区域 的 范围 在 修改前的文件的 1~4行,
+1,4 表示 这个 修改区域 的 范围 在 修改完成之后 的文件的 1~4行。
举例说明:@@ -0,0 +0,3 @@
说明 修改之前文件为空, 修改的具体操作 是 加了 3行代码。
下面是 具体的改动 信息,新增内容前面是加号 +,删除内容前面是减号 -:tom -alice +jerry bily andy
- 第五行: \ No newline at end of file
这个 文件 的改动信息 结束, 进入 下一个 文件的改动信息 查看区。
^_^ pull 和 fetch 区别
# git pull 相当于 以下两个步骤的 集合
git fetch origin master // 从远程主机的master分支拉取最新内容
git merge FETCH_HEAD // 将拉取下来的最新内容合并到当前所在的分支
^_^ 分支管理
1. 基本管理
- 查
# 查看本地分支
git branch
# 查看远程分支
git branch -r
# 查看本地和远程分支
git branch -a
- 增
# 创建wtt分支(内容上,当前分支的内容复制一份给创建的分支)
git branch wtt
# 将本地创建的 分支 同步到 远程
git push --set-upstream origin wtt
- 删
# 删除本地分支
git branch -d wtt # 会在删除前检查merge状态(其与上游分支或者与head)
git branch -D wtt # 是 git branch --delete --force的简写,它会直接删除。
# 删除远程分支
git push origin --delete wtt
- 合并
git merge dev # 合并dev分支到 当前分支
- 切换
git checkout dev # 或 git switch dev 切换分支
2. 在本地新建的aaa分支 并和 远程的bbb 建立连接
git checkout -b aaa origin/bbb
3. 默认分支
git clone 的时候 默认拉取 的是 默认分支 代码
git clone git@gitee.com:Auth/ProjectName.git
如果拉取指定分支的代码,例如 abc分支 的代码,则如此操作:
git clone -b abc git@gitee.com:Auth/ProjectName.git
^_^ 变动保存
1、基本使用:
git stash
说明:
- 默认情况下,会把 以下修改 存储到一个 stash栈中:
1、暂存区中的修改
2、工作区中已经存在的文件的修改
- 默认情况下,不会存储下列文件:
1、工作区中新增的文件(untracked files)
2、被版本库忽略的文件(.gitignore 中定义的)
- 如果非要存储 新增的文件,可以:
git stash -u
- 如果非要存储 新增的文件 和 被版本库忽略的文件 可以使
git stash -a
执行 git stash 命令后,具体表现为:
暂存区 中的修改看不见了,工作区 中已经存在的文件的修改也看不见了。
注意: stash栈中的内容可以被所有git分支访问
2、stash备注
git stash save "备注信息"
因为可以多次 向 堆栈中 stash 数据,所以如果你想要在 git stash 时,想像 commit -m “***” 一样添加一个 信息注解,可以使用 save 选项.
3、查看stash
git stash list # 查看全部的stash
git stash show # 查看最近一次git stash 的 保存的 大概 内容
git stash show -p # 查看最近一次git stash 的 保存的 详细 内容
git stash show stash@{id} # 产看指定 哪一次git stash 的 保存的大概内容
stash 每次添加的代码都会到一个独立空间,多个 stash,通过 stash_id 进行区分
4、将堆栈中的stash 代码 返回到 工作区(不是暂存区)
复制 到工作区:
git stash apply # 将堆栈中的最近一次 stash,放到工作区(保留堆栈的内容)
git stash apply stash@{id} # 将堆栈中的指定 stash 放到工作区(保留堆栈的内容)
剪切 到工作区:
git stash pop # 将堆栈中的最近一次 stash,放到工作区(删除堆栈的内容)
git stash pop stash@{id} # 将堆栈中的指定 stash 放到工作区(删除堆栈的内容)
删除堆栈中的stash
git stash drop # 删除最近一次的stash
git stash drop stash@{id} # 删除指定的一次 stash
git stash clear # 删除所有的 stash
摘要: save、list、show、apply、pop、drop
^_^ 配置ssh
方便push 和 clone代码
- step1
git config --global user.name “WHO”
git config --global user.email “888888@126.com”
- step2
cd ~; ls =》查看家目录下是否有.ssh目录,
如果没有下面命令会自动生成一个
ssh-keygen -t rsa -C “888888@126.com” # 一路按回车
说明: 这个.ssh目录不只属于git ,而是 用户密钥 的存储目录。
- step3
进入.ssh目录你会看到两个文件id_rsa和id_rsa.pub,
d_rsa是私钥,id_rsa.pub自然就是公钥啦,
然后我们需要做的就是把id_rsa.pub文件中的内容拷贝一下 。
- step4
进入你自己的github,进入Settings->SSH and GPG keys->New SSH key,
然后在Key那栏下面将第四步拷贝的东西粘贴进去就可以了,最后点击 Add SSH key按钮添加。
(如果之前有配置过的公匙,先删掉,再将新的复制进去)
修改git的提交方式: https —> ssh
配置完ssh,就可以把原有项目的提交方法 由 https 改为 ssh
- 查看当前项目采用的提交方式:git remote -v
如果是https://
就是采用的是https方式;
如果是git@
就是采用的是 ssh 的方式。 - 删除原有的https方式(也就是原有的源):git remote rm origin
- 查看原有的源是否删除成功: git remote
- 以ssh的方式添加一个源: git remote add origin ssh链接
- 此时可以再次查看 采用的提交方式。
- 注意 切换了源,不能简单的用 git push 提交,而是要用:
git push --set-upstream origin master