抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

简要记录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内部工作原理

1cf7xx.png

待续………………

五、分支管理

  • 首先可以fork + clone自己的仓库 + 修改
  • 然后选择性执行如下命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 查看当前分支命令  (直接clone下来的是 master 主干)
$ git branch

#查看所有分支命令 (查看改仓库的所有分支,显示分支列表)
$ git branch -a

# 查看所有分支的详细信息
$ git branch -avv

# 2. 新建分支命令 (新建一个名为 branchName 的分支)
$ git branch branchName

#删除分支命令 (删除名为 branchName分支,强制删除-D)
$ git branch -d branchName

# 3. 切换分支命令 (切换名为 branchName 分支)
$ git checkout branchNname

# 4. 在某分支上推送更新 (在 branchName分支上推送)
$ git push origin branchName

# 把A分支合并到当前分支(修改的是指针)
$ git merge A

备注更改主分支名:git branch -M main

受种族歧视问题影响,master分支更改为main分支,使用此命令可将master改为main。

tips:若不新建分支将在master分支上操作。但是这样做merge的时候不好。

  • push之后到自己的仓上点 New pull request

六、关于fork之后跟源仓的同步

由于fork之后是属于自己的project,所以fork到自己账户上的project并不会随着源仓更新而更新。所以当需要跟源仓同步时:

1
2
3
4
5
6
7
8
#1.添加源仓为自己fork后仓库的上游
$ git remote add upstream 源仓clone地址

#2.同步fetch上游仓库代码
$ git checkout master && git fetch upstream

#3.将上游代码合并至自己fork后的仓库(master分支)中,保证自己的master分支永远是最新版本
$ git merge upstream/master

详细可参考–git 如何更新 fork 的项目到原项目的最新版本

分支策略

  • fast-forward快速合并:原当前分支内容merge是基于这个分支的最新版本而进行新开发的分支(例如从master分出一个分支dev,dev做了修改,而master没动,然后master又merge bev)

若不使用此策略而要新生成一个版本,可以commit或merge时使用 --no-ff

  • 三方分支 原分支分出了新分支,两个分支都改了,然后再merge。其结果是再merge的当前分支新增一个二者的合并版本

七、版本控制

当你想回退到以前某一个版本的时候,就需要用到Git最核心、最关键的一部分————版本控制

比如这里初始化了一个仓库,新建一个README.md文件,并进行三次内容编写,每一次内容保存后提交(commit)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 第三个版本内容
ASUS@HZY MINGW64 /f/test (master)
$ cat README.md
The first version.

The second version.

The third version.

# 日志展示——三个版本
ASUS@HZY MINGW64 /f/test (master)
$ git log
commit d5a1be6b560ac343de2271eed87c9f81e01fe8d9 (HEAD -> master)
Author: MrGo123 <250……@qq.com>
Date: Tue Mar 3 15:40:40 2020 +0800

rebuild(readme.md):third version

commit 1843f71797e8ffa2f27e18a7c01a6aa8831ff032
Author: MrGo123 <250……@qq.com>
Date: Tue Mar 3 15:38:41 2020 +0800

reBuild(readme.md):second version

commit 0c3671095671c29d64d14321da9980bddff991c9
Author: MrGo123 <250……@qq.com>
Date: Tue Mar 3 15:36:20 2020 +0800

build(readme.md):Add README.md

tips:1.日志内容太多可以用 $ git log --pretty=oneline 来单行显示。
       2.commit id(版本号)就是commit后面的十六进制码。

1
2
3
4
# 查看简易日志
git log --online
# 查看简易日志且显示分支结构图
git log --online --graph

可以看到HEAD指向最新版本也就是 third version

1
2
3
4
5
6
7
8
9
┌────┐
│HEAD│
└────┘

└──> ○ third version

○ second version

○ Add README.md

开始退回版本,使用到git reset命令。在Git中,用HEAD表示当前版本,也就是最新的提交d5a1be…,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

1
$ git reset --hard HEAD^

回退到第二个版本。

1
2
3
4
5
6
7
8
9
┌────┐
│HEAD│
└────┘

│ ○ third version
│ │
└──> ○ second version

○ Add README.md

想要回退到第三个版本,即最新的版本。可以用版本号(commit id)来回退。

1
$ git reset --hard d5a1be #id的前部分

回退后结构:

1
2
3
4
5
6
7
8
9
┌────┐
│HEAD│
└────┘

└──> ○ third version

○ second version

○ Add README.md

若关闭了当前的Bash窗口,commit id不见了怎么办,可以用 git relog 查看所有的版本,用显示的 commit id回退版本。

八、添加SSH关联

**SSH(Secure Shell,安全外壳协议)**:是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。——维基

所以,在git和GitHub之间使用SSH关联,可以实现1.免登录git push,2.提高数据传输速度以及安全性。

实现本地Git和Github关联:

  1. 终端执行 ssh-keygen 命令按几次回车生成公私钥,公私钥存放在主目录下的隐藏目录 .ssh 中的两个文件中;
1
$ ssh-keygen -t rsa -C "your email@example.com" 
  1. 将公钥的内容复制到剪切板
1
$ clip < ~/.ssh/id_rsa.pub
  1. 到github的账户信息处进入 SettingSSH and GPG KeysNew SSH KeyTitle随意、Key粘贴Add SSH Key。done!
  2. 测试,git bash下执行如下命令
    1
    $ ssh -T git@github.com
  3. 按提示输入yes,显示successful则成功。

九、冲突解决

在日常的开发中,两个分支对同一部分内容做了修改并提交时,会发生冲突,导致一方提交不上去。

解决方法是:提交不上去的一方首先pull最新的版本,然后再提交commit,然后根据冲突内容对文件进行修改(选择哪一方的或重新修改作为最后的提交内容),再提交commit。

结合动态图认识一个命令

??这里还没消化,先码

用动图展示 10 个 Git 命令

十、stash储藏

储藏,顾名思义就是藏起来,在git中就是藏起来,使得在工作区中看不见,即清空工作区,但是是可恢复的。好处就是在“清空”之后我们可以做其他事情,当这个事情做完之后,我们又可以恢复回藏起来时的状态。命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
# 储藏
git stash
# 查看储藏仓情况
git stash list
# 恢复储藏的内容 方式一:恢复后stash内容不删除
git stash apply
# 恢复储藏的内容 方式一:(接上一条命令)删除恢复后stash内容
git stash drop
# 恢复储藏的内容 方式二:恢复后stash内容删除
git stash pop
# 恢复指定的内容先使用“git stash list”,再指定
git stash apply stash@{0}

#其他辅助内容

一、commit规范

@(译)通过 Git 和 Angular 了解语义化提交信息


#参考文档or推荐

  1. 《Pro Git》

Git官方Book,Chinese,详细+全面+官方,但就是太详细了,内容挺多的,留着日后再啃吧

  1. git - 简明指南

github上的项目,这个必须强推,常用且全面的操作都有,表层操作的话,够了,日常有需要可以翻翻

  1. 阿里云Git

阿里云的Git教程其实是菜鸟的,基础的方面都有,看得更舒服,读着更爽。

  1. github flow

github guide,说明指导Git及github上协作的工作流程。

  1. commit规范

整理的commit规范写法。

  1. 廖雪峰的Git教程

版本控制部分

  1. 使用 Github Pages 和 Hexo 搭建自己的独立博客【超级详细的小白教程】

    SSH关联

  2. git-cheatsheet.pdf

    精简主要命令pdf

评论

Gitalk评论系统对接至Github Issue,随心评论🐾🐾.....