简要记录Git原理及常用操作
Git思维导图
Background: 经过这几天的摸鱼,以及阅读部分Git文档的相关内容后,Git学习暂时够用了,就暂时不深入学习,所以来做个总结记录mark一下,Let’s go!work more!BB less!
#前言
copy了一份鹅厂某猿的Git思维导图(含命令)——Git思维导图
概念简介
Git:是一个开源的分布式版本控制系统
定位:项目管理工具
#各部分内容
一、登录
下载配置完之后开始使用,首先登录自己的github账户,使github与本地关联。
$ git config –global user.name “用户名”
$ git config –global user.email 邮箱
tips:--global
的作用相当于在该Git下执行的账户作为默认账户,否则每次得登录。如要更换账户,把--global
去掉重新输入要更换的账户即可。
二、查看配置信息
$ git config –list
tips:显示账户等信息
三、创建及初始化仓库
- 法一:本地建仓:
#使某一文件夹变为仓库
$ git init
推送还需在github上创建一个新的仓库或使用已有的仓库作为远程仓库,推送时自定义远程仓库
#先远程和本地关联
$ git remote add origin [目的仓库url]
#再推送
$ git push -u origin master
tips:在本地初始化一个Git仓库。
- 法二:直接从远程仓库上clone:
$ git clone [目的仓库url] (filename)
tips:直接克隆仓库到本地,filename可以自己定义,或者不定义。
四、Git内部工作原理
待续………………
五、分支管理
- 首先可以fork + clone自己的仓库 + 修改
- 然后选择性执行如下命令
1 | # 1. 查看当前分支命令 (直接clone下来的是 master 主干) |
备注更改主分支名:git branch -M main
受种族歧视问题影响,master分支更改为main分支,使用此命令可将master改为main。
tips:若不新建分支将在master分支上操作。但是这样做merge的时候不好。
- push之后到自己的仓上点
New pull request
。
六、关于fork之后跟源仓的同步
由于fork之后是属于自己的project,所以fork到自己账户上的project并不会随着源仓更新而更新。所以当需要跟源仓同步时:
1 | #1.添加源仓为自己fork后仓库的上游 |
分支策略
- fast-forward快速合并:原当前分支内容merge是基于这个分支的最新版本而进行新开发的分支(例如从master分出一个分支dev,dev做了修改,而master没动,然后master又merge bev)
若不使用此策略而要新生成一个版本,可以commit或merge时使用
--no-ff
。
- 三方分支 原分支分出了新分支,两个分支都改了,然后再merge。其结果是再merge的当前分支新增一个二者的合并版本
七、版本控制
当你想回退到以前某一个版本的时候,就需要用到Git最核心、最关键的一部分————版本控制。
比如这里初始化了一个仓库,新建一个README.md
文件,并进行三次内容编写,每一次内容保存后提交(commit)。
1 | 第三个版本内容 |
tips:1.日志内容太多可以用 $ git log --pretty=oneline
来单行显示。
2.commit id
(版本号)就是commit后面的十六进制码。
1 | # 查看简易日志 |
可以看到HEAD指向最新版本也就是 third version
。
1 | ┌────┐ |
开始退回版本,使用到git reset
命令。在Git中,用HEAD
表示当前版本,也就是最新的提交d5a1be…,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
。
1 | git reset --hard HEAD^ |
回退到第二个版本。
1 | ┌────┐ |
想要回退到第三个版本,即最新的版本。可以用版本号(commit id)
来回退。
1 | git reset --hard d5a1be #id的前部分 |
回退后结构:
1 | ┌────┐ |
若关闭了当前的Bash窗口,commit id
不见了怎么办,可以用 git relog
查看所有的版本,用显示的 commit id
回退版本。
八、添加SSH关联
**SSH(Secure Shell,安全外壳协议)**:是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。——维基
所以,在git和GitHub之间使用SSH关联,可以实现1.免登录git push
,2.提高数据传输速度以及安全性。
实现本地Git和Github关联:
- 终端执行 ssh-keygen 命令按几次回车生成公私钥,公私钥存放在主目录下的隐藏目录 .ssh 中的两个文件中;
1 | ssh-keygen -t rsa -C "your email@example.com" |
- 将公钥的内容复制到剪切板
1 | $ clip < ~/.ssh/id_rsa.pub |
- 到github的账户信息处进入
Setting
➡SSH and GPG Keys
➡New SSH Key
➡Title随意、Key粘贴
➡Add SSH Key
。done! - 测试,
git bash
下执行如下命令1
$ ssh -T git@github.com
- 按提示输入yes,显示successful则成功。
九、冲突解决
在日常的开发中,两个分支对同一部分内容做了修改并提交时,会发生冲突,导致一方提交不上去。
解决方法是:提交不上去的一方首先pull最新的版本,然后再提交commit,然后根据冲突内容对文件进行修改(选择哪一方的或重新修改作为最后的提交内容),再提交commit。
结合动态图认识一个命令
??这里还没消化,先码
十、stash储藏
储藏,顾名思义就是藏起来,在git中就是藏起来,使得在工作区中看不见,即清空工作区,但是是可恢复的。好处就是在“清空”之后我们可以做其他事情,当这个事情做完之后,我们又可以恢复回藏起来时的状态。命令如下:
1 | 储藏 |
#其他辅助内容
一、commit规范
@(译)通过 Git 和 Angular 了解语义化提交信息
#参考文档or推荐
Git官方Book,Chinese,详细+全面+官方,但就是太详细了,内容挺多的,留着日后再啃吧
github上的项目,这个必须强推,常用且全面的操作都有,表层操作的话,够了,日常有需要可以翻翻
阿里云的Git教程其实是菜鸟的,基础的方面都有,看得更舒服,读着更爽。
github guide,说明指导Git及github上协作的工作流程。
整理的commit规范写法。
版本控制部分
使用 Github Pages 和 Hexo 搭建自己的独立博客【超级详细的小白教程】
SSH关联
-
精简主要命令pdf