图灵丛书——GitHub入门
这是一篇关于我个人学习 GitHub 的笔记,主要是记录一些我认为比较重要的知识点,以及一些我认为比较好的学习资料。
学习书籍:GitHub 入门与实践(图灵程序设计丛书)
这本书的目录是这样的
第 1 章到第 3 章的内容主要提了 Github 和 git、git 的配置、创建仓库等等。因为我本人平时有用过 Git 工具,以及 GitHub,我就简略看了,这里不赘述了。
4. 通过实际操作来学习 Git
4.1 基本命令
- git init
初始化仓库
>> mkdir Demo
>> cd Demo
>> git init
- git status 显示 Git 仓库的状态
这是一个十分常用的
命令
- git add——向暂存区中添加文件
>> git add README.md
>> git status # 查看一下状态
- git commit——保存仓库的历史记录
>> git commit -m "first commit"
- git log——查看提交日志
git log 命令可以查看以往仓库中提交的日志。包括可以查看什么人在什么时候进行了提交或合并,以及操作前后有怎样的差别
>> git log
>> git log --pretty=short #只显示提交信息的第一行
>> git log README.md #只显示指定目录、文件的日志
>> git log -p #显示文件的变动
>> git log -p README.md
- git diff——查看更改前后的差别
git diff 命令可以查看工作树、暂存区、最新提交之间的差别。
>> git diff HEAD 查看工作树和最新提交的差别
4.2 分支操作
在进行多个并行作业时,我们会用到分支。在这类并行开发的过程
中,往往同时存在多个最新代码状态。如图 4.1 所示,从 master 分支创
建 feature-A 分支和 fix-B 分支后,每个分支中都拥有自己的最新代码。
master 分支是 Git 默认创建的分支,因此基本上所有开发都是以这个分
支为中心进行的。
- git branch——显示分支一览表
git branch 命令可以将分支名列表显示,同时可以确认当前所在
分支。
>> git branch
* master # 表示当前分支
- git checkout -b——创建、切换分支
>> git checkout -b feature-A
上面命令等效于
>> git branch feature-A ## 创建分支
>> git checkout feature-A ## 切换分支
>> git branch ## 查看分支
* feature-A
master
来实际操作一下
1.在.gitnore文件中添加一行Hello
2.git add .gitnore
3.git commit -m "add .gitnore"
4.git checkout master 查看发现master分支没有收到影响
- git merge——合并分支
接下来,我们假设 feature-A 已经实现完毕,想要将它合并到主干分
支 master 中。首先切换到 master 分支。
然后合并 feature-A 分支。为了在历史记录中明确记录下本次分支合
并,我们需要创建合并提交。因此,在合并时加上 --no-ff参数。
>> git merge --no-ff feature-A
随后编辑器会启动,用于录入合并提交的信息。
默认信息中已经包含了是从 feature-A 分支合并过来的相关内容,所
以可不必做任何更改。将编辑器中显示的内容保存,关闭编辑器,然后就会看到下面的结果。
Merge made by the 'recursive' strategy.
README.md | 2 ++
1 file changed, 2 insertions(+)
这样一来,feature-A 分支的内容就合并到 master 分支中了。
- git log --graph——以图表形式查看分支
>> git log --graph
* commit 7ce2a1df16d795a87760e2748d0d7dae206adab0 (HEAD -> master)
|\ Merge: 446d54b 88bc87e
| | Author: 陆广兴 <1175278814@qq.com>
| | Date: Wed May 31 14:27:39 2023 +0800
| |
| | Merge branch 'feature-A'
| |
| * commit 88bc87efaf578047fa182dfcb408e2e7252af912 (feature-A)
|/ Author: 陆广兴 <1175278814@qq.com>
| Date: Wed May 31 14:09:03 2023 +0800
|
| Add to Feature-A
|
* commit 446d54bca9d80b48d3bf3eaadb244388c6edb3c3
| Author: 陆广兴 <1175278814@qq.com>
| Date: Wed May 31 13:21:06 2023 +0800
|
| 2
|
* commit 9946a43ae4a21af20ddfe50705bf91d6222b22f9
| Author: 陆广兴 <1175278814@qq.com>
| Date: Wed May 31 13:16:48 2023 +0800
|
| 1
|
* commit aa17b8adc6266b3f97440bb19d012fb064dbfacb
Author: 陆广兴 <1175278814@qq.com>
Date: Wed May 31 13:12:00 2023 +0800
初始化仓库
4.3 更改提交的操作
- git reset——回溯历史版本
我们先回溯到上一节 feature-A 分支创建之前,创建一个名为
fix-B 的特性分支。
要让仓库的 HEAD、暂存区、当前工作树回溯到指定状态,需要用
到 git rest --hard命令。只要提供目标时间点的哈希值 A,就可以完全恢复至该时间点的状态。事不宜迟,让我们执行下面的命令。
>> git log ## 查看feature-A之前的Hash
输出结果略
>> git reset --hard 446d54bca9d80b48d3bf3eaadb244388c6edb3c3
HEAD is now at 446d54b 2
创建 fix-B 分支
>> git checkout -b fix-B
Switched to a new branch 'fix-B'
在.gitignore文件中做点修改 最后一行添加”Hello,fix-b"
然后提交
>> git add ./.gitignore
>> git commit -m "Edit by fix-B"
[fix-B 3d07191] Edit by fix-B
1 file changed, 3 insertions(+)
现在的状态如图 4.5 所示。接下来我们的目标是图 4.6 中所示的状
态,即主干分支合并 feature-A 分支的修改后,又合并了 fix-B 的修改。
推进至 feature-A 分支合并后的状态
首先恢复到 feature-A 分支合并后的状态。不妨称这一操作为“推进
历史”。
git log命令只能查看以当前状态为终点的历史日志。所以这里
要使用 git reflog命令,查看当前仓库的操作日志。在日志中找出
回溯历史之前的哈希值,通过 git reset --hard命令恢复到回溯历
史前的状态
首先执行 git reflog 命令,查看当前仓库执行过的操作的日志。
>> git reflog
3d07191 (HEAD -> fix-B) HEAD@{0}: commit: Edit by fix-B
446d54b (master) HEAD@{1}: checkout: moving from master to fix-B
446d54b (master) HEAD@{2}: reset: moving to 446d54bca9d80b48d3bf3eaadb244388c6edb3c3
7ce2a1d HEAD@{3}: merge feature-A: Merge made by the 'ort' strategy.
446d54b (master) HEAD@{4}: checkout: moving from feature-a to master
88bc87e (feature-A) HEAD@{5}: checkout: moving from master to feature-a
446d54b (master) HEAD@{6}: checkout: moving from feature-A to master
88bc87e (feature-A) HEAD@{7}: commit: Add to Feature-A
446d54b (master) HEAD@{8}: checkout: moving from master to feature-A
446d54b (master) HEAD@{9}: commit: 2
9946a43 HEAD@{10}: commit: 1
aa17b8a HEAD@{11}: commit (initial): 初始化仓库
>> git checkout master ##先切换回到master分支
>> git reset --hard 7ce2a1d ##回到合并feature-A的节点
HEAD is now at 7ce2a1d Merge branch 'feature-A'
>> git log --graph
##此时应该可以看到.gitignone文件又回到了合并feature-A状态的样子,即最后一行有“### Edit on Feature-A”
>> git merge --no-ff fix-B ##合并fix-B
Auto-merging .gitignore
CONFLICT (content): Merge conflict in .gitignore
Automatic merge failed; fix conflicts and then commit the result.
从上面合并输出产生的信息可以看出,合并过程中产生冲突了
下面进行冲突消除
打开.gitignore文件可以发现,文件中变成了这样
<<<<<<< HEAD
- feature-A
=======
- fix-B
>>>>>>> fix-B
提交解决后的结果
>> git add ./.gitignore
>> git commit -m "Fix conflict"
[master f9951e5] Fix conflict
>> git log --graph ##以图形的方式查看分支历史
- git commit --amend——修改提交信息
我们将上一条提交信息记为了 "Fix conflict",但它其实是 fix-B 分
支的合并,解决合并时发生的冲突只是过程之一,这样标记实在不妥。
于是,我们要修改这条提交信息。
>> git commit --amend -m "Merge branch 'fix-B'"
>> git log --graph ##
|\ Merge: 7ce2a1d 3d07191
| | Author: 陆广兴 <1175278814@qq.com>
| | Date: Wed May 31 15:19:49 2023 +0800
| |
| | Merge branch 'fix-B'
| |
| * commit 3d07191a73a4e66fe16cbba1e51709ba216ce6f4 (fix-B)
| | Author: 陆广兴 <1175278814@qq.com>
经过修改过后可以看到提交的信息变成了 Merge branch 'fix-B'
- git rebase -i——压缩历史
在合并特性分支之前,如果发现已提交的内容中有些许拼写错误等,
不妨提交一个修改,然后将这个修改包含到前一个提交之中,压缩成一
个历史记录。这是个会经常用到的技巧,让我们来实际操作体会一下。
#创建 feature-C 分支
>> git checkout -b fix-C
作为 feature-C 的功能实现,我们在 README.md 文件中添加一行
文字,并且故意留下拼写错误,以便之后修正。
提交这部分内容。这个小小的变更就没必要先执行 git add命令
再执行 git commit命令了,我们用 git commit -am命令来一次
完成这两步操作。
>> git commit -am "Add fix-C"
[fix-C 801f93a] Add fix-C
1 file changed, 1 insertion(+), 1 deletion(-)
修正拼写错误
>> git commit -am "更正拼写"
| Author: 陆广兴 <1175278814@qq.com>
| Date: Wed May 31 15:48:44 2023 +0800
|
| 更正拼写
|
* commit 801f93a50af77c07d51bc5fd46783ee7ff617306
| Author: 陆广兴 <1175278814@qq.com>
| Date: Wed May 31 15:44:36 2023 +0800
|
| Add fix-C
|
>> git rebase -i HEAD~2
#用上述方式执行 git rebase命令,可以选定当前分支中包含
#HEAD(最新提交)在内的两个最新历史记录为对象,并在编辑器中
#打开。
按照下图所示,将 6fba227 左侧的 pick 部分删除,改写为 fixup。
pick 7a34294 Add feature-C
fixup 6fba227 Fix typo
合并分支到master
>> git checkout master
>> git merge --no-ff fix-C
>> git log --graph
4.4 推送到远程仓库
- 在GitHub上新建一个仓库,不需要勾选初始化仓库,避免生成README.md文件
- git remote add——添加远程仓库
>> git remote add origin git@github........
- git push——推送至远程仓库
>> git push -u origin master
##注意,这只会推送master分支,如果要推送其他分支,可以这样
>> git push -u origin branch-name
像这样执行 git push命令,当前分支的内容就会被推送给远程仓库
origin 的 master 分支。-u参数可以在推送的同时,将 origin 仓库的 master 分
支设置为本地仓库当前分支的 upstream(上游)。添加了这个参数,将来
运行 git pull命令从远程仓库获取内容时,本地仓库的这个分支就可
以直接从 origin 的 master 分支获取内容,省去了另外添加参数的麻烦。
4.5 从远程仓库获取
git clone——获取远程仓库
git branch -a
获取远程的 feature-D 分支
>> git checkout -b feature-D origin/feature-D
Branch feature-D set up to track remote branch feature-D from origin.
Switched to a new branch 'feature-D'
图灵丛书——GitHub入门的更多相关文章
- github入门到上传本地项目【网上资源整合】
[在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ...
- github入门到上传本地项目
GitHub是基于git实现的代码托管.git是目前最好用的版本控制系统了,非常受欢迎,比之svn更好. GitHub可以免费使用,并且快速稳定.即使是付费帐户,每个月不超过10美刀的费用也非常便宜. ...
- 《Github入门与实践》读书笔记 蟲咋先生的追求之旅(上)
<Github入门与实践>作者: [日] 大塚弘记 译者:支鹏浩/刘斌 简介 本书从Git的基本知识和操作方法入手,详细介绍了GitHub的各种功能,GitHub与其他工具或服务的协作 ...
- 服务端技术进阶(八)GitHub入门篇
服务端技术进阶(八)GitHub入门篇 前言 在投递简历的过程中,发现有的公司会要求填写自己的GitHub地址,而自己却还没有GitHub帐号,准确点说是自己还不太会使用GitHub.(貌似开源社区中 ...
- Github入门详情教程
前言 之前我写了一篇文章<一篇文章了解Github和Git教程>还延伸了几篇阅读,对大部分小白很有用,那么我继续普及下Github页面及其概念. 定义 GitHub 是一个网站,一个面向开 ...
- Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍
系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...
- 【github&&git】2、github入门到上传本地项目
[在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ...
- <转>github入门到上传本地项目
转自 http://www.cnblogs.com/specter45/p/github.html GitHub是基于git实现的代码托管.git是目前最好用的版本控制系统了,非常受欢迎,比之svn更 ...
- github 入门教程之 github 访问速度太慢怎么办
github 是全世界最流行的开源项目托管平台,其代表的开源文化从根本上改变了软件开发的方式. 基本上所有的需求都能从 github 上或多或少找到现成的实现方案,再也不用重头开始造轮子而是自定义轮子 ...
- GitHub 入门 与 2023年2月18日10:29:02
用 GitHub 有一段时间了,之前一直用来做 Hexo 的服务器,直到前阵子搞 GitHub Action 因为命令不熟,把 GitHub 上的源码强制拉到本地把本地的 Hexo 搞崩了,博客源码都 ...
随机推荐
- Linux理论知识
Linux理论知识 理论知识 1.1文件名后缀 1 作用是说明和注释一个文件的性质. 2 与文件类型无关. 1.2常见的压缩文件后缀名 1.gz 2.bz2 3.xz 4.zip 5.tar 6. ...
- LeetCode刷题笔记 - 2022
这篇博客集中整理在LeetCode的刷题记录,方便查阅 258. 各位相加 - 力扣(LeetCode) (leetcode-cn.com) 代码 class Solution { public: i ...
- go微服务框架kratos学习笔记二(kratos demo 结构)
目录 api cmd configs dao di model server service 上篇文章go微服务框架kratos学习笔记一(kratos demo)跑了kratos demo 本章来看 ...
- 【算法总结】强化学习部分基础算法总结(Q-learning DQN PG AC DDPG TD3)
总结回顾一下近期学习的RL算法,并给部分实现算法整理了流程图.贴了代码. 1. value-based 基于价值的算法 基于价值算法是通过对agent所属的environment的状态或者状态动作对进 ...
- 单元测试、文档测试、读写文件、StringIO和BytesIO
1.单元测试就是为了测试程序执行的正确性 2.编写单元测试时,需要编写一个单元测试类,继承unittest TestCase类 3.单元测试最常用的断言是assert,断言期望抛出指定的异常 4.运行 ...
- 补五月五号java基础知识点
1.容器类:容器类是java以类库的形式供有用户开发程序时可直接使用的各种数据结构.2.java容器框架中有两个名称分别为Collection和Set的接口,为防止名称的冲突,本书将Collectio ...
- Ubuntu2204部署容器引擎Containerd
为什么使用containerd? 使用containerd的原因主要有两点吧,第一个是docker在k8s1.24以后不再支持,如果需要在k8s中继续使用docker作为容器引擎,我们需要额外部署cr ...
- DG:RFS[8]: No standby redo logfiles created for thread 2
环境:两节点的RAC在线搭建DG,处理报错 现象:RFS[8]: No standby redo logfiles created for thread 2 ,thread2 没有建立redo Tue ...
- CommunityToolkit.Mvvm8.1 IOC依赖注入控制反转(5)
本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址 ...
- 解决CKEditor中img标签自动添加style样式的问题-禁止自动设置width和height 帝国cms编辑器图片自动加宽高
在使用CKEditor的过程中发现,每次上传或添加图片的时候,总会自动给img标签添加width和height的style内联样式.由于网站本身对图片有进行自适应处理(添加了自适应的CSS),所以im ...