IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 【玩转Git三剑客】Git学习笔记-20220902 -> 正文阅读

[开发工具]【玩转Git三剑客】Git学习笔记-20220902

第一章:Git基础 (13讲)

01 | 课程综述

Git 官网:
https://git-scm.com

GitHub:
https://github.com

GitLab:
https://about.gitlab.com

02 | 安装Git

https://git-scm.com/book/zh/v2

03 | 使用Git之前需要做的最小配置

# 本节知识点

## 添加配置

git config [--local | --global | --system] user.name 'Your name'
git config [--local | --global | --system] user.email 'Your email'

## 查看配置

git config --list [--local | --global | --system]

## 区别

local:区域为本仓库
global: 当前用户的所有仓库
system: 本系统的所有用户

04 | 创建第一个仓库并配置local用户信息

1)第一种理解
本地有个项目代码写了一段时间了,但还没有用 git 管理起来,现在想用git在本地帮着记录变更的版本。
2)第二种理解
很早之前本地生成了一个 git 的仓库,开发了一段时间,想把这个git仓库提交到公司git服务器新建的project中。

对于第一种理解:
cd existing_folder (本地进入到项目文件夹内)
git init (执行 init 命令,会创建出 .git 目录)
git add . (把项目文件加入到 git 的暂存区)
git commit -m “Initial commit” (创建第一个 git 的commit )

对于第二种理解:
cd existing_repo
git remote add origin git@your_git_server:your_group/your_project.git
git push -u origin --all
git push -u origin --tags

05 | 通过几次commit来认识工作区和暂存区

git add .与git add -A的区别
一.版本导致的差别:

1.x版本:

(1).git add all可以提交未跟踪、修改和删除文件。

(2).git add .可以提交未跟踪和修改文件,但是不处理删除文件。

2.x版本:

两者功能在提交类型方面是相同的。

二.所在目录不同导致的差异:

(1).git add all 提交的是整个仓库
(2).git add .只能够提交当前目录或者它子目录下相应文件。

06 | 给文件重命名的简便方法

git mv filesA FilesB

07 | 通过git log查看版本演变历史

本节的一些演示命令总结
? git log --all 查看所有分支的历史
? git log --all --graph 查看图形化的 log 地址
? git log --oneline 查看单行的简洁历史。
? git log --oneline -n4 查看最近的四条简洁历史。
? git log --oneline --all -n4 --graph 查看所有分支最近 4 条单行的图形化历史。
? git help --web log 跳转到git log 的帮助文档网页

08 | gitk:通过图形界面工具来查看版本历史

gitk
在这里插入图片描述

09 | 探密.git目录

cat HEAD 查看HEAD文件的内容
git cat-file 命令 显示版本库对象的内容、类型及大小信息。
git cat-file -t b44dd71d62a5a8ed3 显示版本库对象的类型
git cat-file -s b44dd71d62a5a8ed3 显示版本库对象的大小
git cat-file -p b44dd71d62a5a8ed3 显示版本库对象的内容

HEAD:指向当前的工作路径
config:存放本地仓库(local)相关的配置信息。
refs/heads:存放分支
refs/tags:存放tag,又叫里程牌 (当这次commit是具有里程碑意义的 比如项目1.0的时候 就可以打tag)
objects:存放对象 .git/objects/ 文件夹中的子文件夹都是以哈希值的前两位字符命名 每个object由40位字符组成,前两位字符用来当文件夹,后38位做文件。

10 | commit、tree和blob三个对象之间的关系

git有3种对象:commit、tree、blob。每次的提交,都是一个commit,一个commit又是包含了一棵tree,每个tree里面又是包含了多棵tree和blob,而文件的的最终形式是blob。对于blob,git会认为文件内容相同,就使用同一个blob,这样就极大的避免了频繁的提交时,git的存储空间的急剧上升。

每一次commit都对应一个tree,那这个tree是包裹在最外层的一个tree,使用git cat-file -p 命令的时候查看tree内部的内容,这里的每一个文件夹都可以看成一个tree,而在这些文件夹中的具体文件内容两两不相等文件都是一个blob,内容相同的文件统一为一个blob。

11 | 小练习:数一数tree的个数

12 | 分离头指针情况下的注意事项

那分离头指针在企业或日常使用中, 到底有哪些具体的适用地点呢?
如果临时想基于某个commit做变更,试试新方案是否可行,就可以采用分离头指针的方式。测试后发现新方案不成熟,直接reset回其他分支即可。省却了建、删分支的麻烦了。

git checkout commitId:会出现分离头指针的情况,这种情况下比较危险,因为这个时候你提交的代码没有和分支对应起来,当切换到其他分支的时候(比如master分支),容易丢失代码;但是分离头指针也有它的应用场景,就是在自己做尝试或者测试的时候可以分离头指针,当尝试完毕没有用的时候可以随时丢弃,但是如果觉得尝试有用,那么可以新建一个分支,使用 git branch <新分支的名称> commitId

13 | 进一步理解HEAD和branch

"^"这个操作符代表父commit。
当一个commit有多个父commit时,可以通过在符号“^”后面跟上一个数字来表示第几个父commit。
比如,“A^” 等于 “A^1”(表示A这个commit的第1个父commit)。

连续的“^”符号依次沿着父commit进行定位,直到某个祖先commit。

~ 相当于连续n个符合“^”。

所以,HEAD^^ 等同于 HEAD~2 是对的。

第二章:独自使用Git时的常见场景 (16讲)

14 | 怎么删除不需要的分支?

git branch -d branch_name:使用-d 在删除前Git会判断在该分支上开发的功能是否被merge的其它分支。如果没有,不能删除。如果merge到其它分支,但之后又在其上做了开发,使用-d还是不能删除。-D会强制删除。

15 | 怎么修改最新commit的message?

git commit --amend 对最新一次提交做 commit 修改

16 | 怎么修改老旧commit的message?

修改历史的 Commit message,通常用在还没有提交到集成分支之前:
git rebase -i father_commit_id
交互界面里的命令选 reword

17 | 怎样把连续的多个commit整理成1个?

把连续的多个 Commit 合并为 1 个:
git rebase -i father_commit_id
交互界面里的命令选 squash,并输入新的 commit message

18 | 怎样把间隔的几个commit整理成1个?

修改最新的:git commit --amend
修改老旧的:git rebase --xxxxxxx pick 改为r reword
合并连续的:git rebase --xxxxxxx(父commit id) 保留较老的pick,其他要合并的使用s squash
合并不连续的:git rebase --xxxxxxx(父commit id)保留较老的pick,其他要合并的移动到第二行,使用s。如果没有父commit id。用git rebase -i --root,或者手动加上。

19 | 怎么比较暂存区和HEAD所含文件的差异?

vi index.html 修改index.html的内容
git add index.html 将修改的文件添加到暂存区
git status 显示在哪个暂存区 有没有文件改变将要提交
git diff --cached 查看文件改变情况 看变更的文件有没有问题
git commit -m’Add the frist command with config’ 做提交操作

20 | 怎么比较工作区和暂存区所含文件的差异?

假定:HEAD、缓存区、工作区中的readme.md文件内容均不相同。
git diff HEAD – readme.md # 工作区 <=== > HEAD
git diff – readme.md # 工作区 < => 缓存区
git diff --cached – readme.md # 缓存区 <
=> HEAD

21 | 如何让暂存区恢复成和HEAD的一样?

git reset 有三个参数
–soft 这个只是把 HEAD 指向的 commit 恢复到你指定的 commit,暂存区 工作区不变
–hard 这个是 把 HEAD, 暂存区, 工作区 都修改为 你指定的 commit 的时候的文件状态
–mixed 这个是不加时候的默认参数,把 HEAD,暂存区 修改为 你指定的 commit 的时候的文件状态,工作区保持不变

22 | 如何让工作区的文件恢复为和暂存区一样?

舍弃html文件的修改
git checkout – index.html(有个空格)
或新版本
git restore index.html

23 | 怎样取消暂存区部分文件的更改?

git reset HEAD ,是让暂存区恢复为HEAD所指向的节点,使用了该命令后,工作区修改的内容会被保留(保险),如果本地的修改需要丢弃掉,那么可使用–hard

24 | 消除最近的几次提交

修改了工作区,恢复:git checkout

add后,想撤销: git reset HEAD

commit后,想撤销: git reset–hard hash值

25 | 看看不同提交的指定文件的差异

git diff commit-id1 commit-id2 path-to-filename

对不同的分支进行差异化的比较使用 git diff commit_id commit_id – index.html

26 | 正确删除文件的方法

本课使用【rm < filename>】先删除工作区的文件后,再使用命令【git add < filename>】提交到暂存区中,效果和使用【rm < filename>】再使用【git rm < filename>】一样。只是【git rm < filename>】可以省略本地工作区【rm < filename>】这个命令的操作步骤。
总结:直接在工作区和暂存区中删除某个将来不需要提交到commit的文件时,使用命令【git rm < filename>】即可。

27 | 开发中临时加塞了紧急任务怎么处理?

git stash 将手头正在修改的东西先存起来放到一边去处理紧急任务

git stash apply
第一个作用将之前git stash存放的内容弹出来 把他的东西放到工作区去
第二个使用git stash list查看链表里的内容还在可以进行反复使用

git stash pop 和stash的区别 pop中list不保留 apply保留

28 | 如何指定不需要Git管理的文件?

.gitinore对其中的内容进行配置,可以设置git不用管理的文件或者文件夹
doc是不管理这个文件夹和文件
doc/不管文件夹管文件

29 | 如何将Git仓库备份到本地?

1)找个目录执行 clone 。或
2)用init建个git仓库,然后从备份数据库添加remote,再push到新建仓库;
3)或者用init建个git仓库,然后在新仓库添加remote,再把备份数据库fetch/pull到新仓库。

# 本地模拟推送,git备份

## 远程库

git clone --bare file:///XXXX/.git  remoteRepoName.git

bare不包含工作区,作为远端,以后备份方便一点

这样的话,已经备份了

## 本地仓库

跟远程库建立关联

git remote add remoteRepoName file:///XXXX/remoteRepoName.git

本地发送一些改动,比如新增分支develop

推送分支变动到远程

git push --set-upstream remoteRepoName develop

再到远程库下面查看就会发现远程也有develop分支了

第三章:Git与GitHub的简单同步 (4讲)

30 | 注册一个GitHub账号

31 | 配置公私钥

首次生成密钥时还需要执行一下命令
ssh-add ~/.ssh/id_rsa

github网站更新后,配置SSH keys的入口在:右上角头像 --> Settings --> 左侧导航栏的SSH and GPG keys

32 | 在GitHub上创建个人仓库

本地分支往远端分支做push,如果远端分支不是本地分支的祖先,那它俩就不是 fast forward 了。反之,它俩就是fast forward的关系。

33 | 把本地仓库同步到GitHub

个人笔记总结
git remote -v 查看远程版本库信息
git remote add github < url> 添加github远程版本库
git fetch github 拉取远程版本库
git merge -h 查看合并帮助信息
git merge --allow-unrelated-histories github/master 合并github上的master分支(两分支不是父子关系,所以合并需要添加 --allow-unrelated-histories)
git push github 推送同步到github仓库

第四章:Git多人单分支集成协作时的常见场景 (5讲)

34 | 不同人修改了不同文件如何处理?

每次push本地代码之前pull一下远端代码,然后在push,就没有问题了。


老师你好,我有个问题哈,clone命令 git clone git@github.com:git2019/git_learning.git既然已经把远程仓库所有内容都克隆到本地了,为什么还需要git checkout -b feature/add_git_commands origin/feature/add_git_command 命令基于远程分支在本地建立分支,不是从远程clone下来了嘛,为什么还要新建,难道clone命令不能克隆分支嘛
作者回复: 我们在本地无法直接在clone下来的远程分支上做变更的,只能基于远程分支建本地分支后,才能创建commit

35 | 不同人修改了同文件的不同区域如何处理?

git pull 相对于两步git fetch+merge在什么场景下有问题?谢谢。
作者回复: 比如,团队有3个人共同维护一个特性分支,你们在本地直接在该分支上做开发。你的本地功能还没有开发完,还不想和远端的特性分支做集成,只是想看看和远端分支的差异,此时,就可以先执行 fetch,而不用 pull 。

36 | 不同人修改了同文件的同一区域如何处理?

git使用原则
1:push前一定先pull
2:合并代码必须两人结对
3:合并冲突,非自己的变动保持原样,和自己冲突的代码找相应的代码提交人确认如何解决冲突
4:合并完成后,保证本地能编译能运行再push
5:合并到主干的代码必须通过测试,必须通过代码review
6:不同的功能从主干上拉新分支进行开发工作
7:分支的命名需要加上,拉取人+拉取说明
8:上完线的分支要及时清理

37 | 同时变更了文件名和文件内容如何处理?

一个人改了文件名,一个人改了文件内容,还是可以自动处理的。

前面章节讲git的文件存储时,说git存放blob文件时是以文件内容来区分的,并不以文件名来区分;此处的变更文件名操作和变更文件内容的操作能够自动被git处理,原因就在于blob文件并没有发生修改的冲突吧?如果其中一个人既变更了文件名又修改了文件,同时另一个人也修改了该文件的同一位置的内容,就会被git识别为冲突,而不能自动进行处理了。

38 | 把同一文件改成了不同的文件名如何处理?

人为判断需保留哪一个文件。

老师,你好。想问一下比较简单的多人协助开发代码怎么管理代码分支合并? 现在我作为一个小组长,每天要合并各个成员的代码,打包到测试、预上线等等环境。又涉及到出错回滚等等。每天都花挺多时间在这里。老师能否给个流程或者建议。谢谢了。

作者回复: 你们看起来配置了专门的集成人员,你就充当了类似的角色。我补充说一下,如果你是懂业务并懂开发的,那么你来做这个涉及集成的一系列的工作,倒也挺好。否则就让开发自己来做集成。
为了早点发现集成是否有冲突,或者集成是否能通过一些列的测试,你们团队可以考虑用工具帮你们尽快发现集成的问题。找一些持续集成的资料看看吧,可以借助 Jenkins 或 其他CI工具试试吧。

第五章:Git集成使用禁忌 (2讲)

39 | 禁止向集成分支执行push -f操作

老师,如果发现之前提交的commit不想要了,想恢复成之前的样子,是不是就不得不用git push -f命令了呢?

作者回复: 自己独自使用的分支,可以采用push -f 的方式。
团队集成分支,通常做法不是去掉不想要的commit,而是把不想要的commit的内容采用revert的方式生成新的commit,以此去掉不想要的变更。然后push到远端。

40 | 禁止向集成分支执行变更历史的操作

1:在主干分支上禁止使用git push -f
因为可能会抹掉其他的提交节点,假如有些东西提交了想回滚,那就修改后再提交

2:在主干分支上禁止使用变更提交历史的命令
因为会抹掉一些历史提交信息,我们貌似一直使用rebase,主要是不喜欢混乱的提交线,不过也没出现什么问题,合代码出问题主要集中在合并冲突时,有些代码调整的存在问题。

自己的分支随意,自己可以完全掌控,自己完全负责。公共分支是公地,不要做出影响他人的行为。

第六章:初识GitHub (6讲)

41 | GitHub为什么会火?

42 | GitHub都有哪些核心功能?

43 | 怎么快速淘到感兴趣的开源项目?

之前在github上搜索项目,直接用项目名搜索,学习这一讲内容后,以后可以添加其他限制条件,如stars:>1000,in:readme等,可以快速有效搜索自己刚兴趣的项目。

44 | 怎样在GitHub上搭建个人博客

45 | 开源项目怎么保证代码质量?

46 | 为何需要组织类型的仓库?

老师,我有个问题,就是如果某用户加入了某个组织,这个组织可以管理n个仓库,那么我是这个组织的一员,是不是就可以对这些仓库进行操作?还是我加入了组织,还得加入到某个team,才能对应进行操作?
作者回复: 这个权限继承的方式,建议大家到GitHub平台上测试一下。平台的做法可能也会随时间而改变的。

第七章:使用GitHub进行团队协作 (10讲)

47 | 创建团队的项目

48 | 怎样选择适合自己团队的工作流?

略
在这里插入图片描述

49 | 如何挑选合适的分支集成策略?

在这里插入图片描述

50 | 启用issue跟踪需求和任务

github
在这里插入图片描述
gitlab
在这里插入图片描述

51 | 如何用project管理issue?

github
在这里插入图片描述

52 | 项目内部怎么实施code review?

github:pull request
在这里插入图片描述

53 | 团队协作时如何做多分支的集成?

54 | 怎样保证集成的质量?

55 | 怎样把产品包发布到GitHub上?

Travis-CI工具

56 | 怎么给项目增加详细的指导文档?

wiki
在这里插入图片描述

第八章:GitLab实践 (6讲)

57 | 国内互联网企业为什么喜欢GitLab?

58 | GitLab有哪些核心的功能?

在这里插入图片描述

59 | GitLab上怎么做项目管理?

gitlab
在这里插入图片描述

60 | GitLab上怎么做code review?

gitlab:merge request
在这里插入图片描述
在这里插入图片描述

61 | GitLab上怎么保证集成的质量?

CICD

62 | 怎么把应用部署到AWS上?

CICD的例子

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:38:53  更:2022-09-13 11:42:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 11:43:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码