参考来源:
csdn技能树-git
https://fishc.com.cn/forum-334-1.html fishc论坛的扩展阅读
git能做什么?
进行版本控制,版本记录、版本回退;
需求场景:一个新的开发项目,随着功能的增加,代码量、相关文件数量也在逐渐增多……
这样开发就会遇到一个问题:当需要修改一些代码的时候,不得已要删除另外一些代码。第二天脑袋突然被门框给夹了一下,又想恢复回昨天删除的代码,肿么办?
git的创作和出版时间线
2005年4月3日:Linus 开始开发 Git
2005年4月6日:Git 项目对外发布
2005年4月7日:Git 实现作为自身的版本控制工具
2005年4月18日:实现多分支合并
2005年6月16日:Linux 内核 2.6.12 发布,Git 已经可以用于维护 Linux 核心源码
2005年7月26日:Linus 功成身退,将 Git 的维护工作交给另一名 Git 的主要贡献者 Junio C Hamano
与git相关的两个消息
消息1:github上线
2008 年,GitHub(http://www.github.com)网站正式上线,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub。
消息2:SVN 和 Git 的区别在哪里吗?
同类型的其他版本控制系统的区别,其他版本控制系统有RCS、CVS、SVN
最核心的区别时 SVN 是集中式的版本控制系统,而 Git 是分布式的。
集中式版本控制系统需要找一个服务器作为大本营,所有的代码都需要提交到服务器上进行统一的管理。当你需要对代码进行改动时,需要先从服务器上下载一份拷贝,修改完成之后,还需要上传回服务器。
在分布式版本控制系统中,大家都拥有一个完整的版本库,不需要联网也可以提交修改,所以中心服务器就显得不那么重要了。
那开发成员之间如何交换修改呢?
由于大家都拥有一个完整的版本库,所以只需把各自的修改推送给对方,就可以互相看到对方的修改了。
不过分布式版本控制系统一般也有一个“中心服务器”,但它只是用于方便大家的交换而已(挂了也没关系),而 GitHub 就是这么一个平台。
版本控制工具关注的特性:
版本同步的速度、版本更新的影响(高内聚)、版本依赖问题(低耦合)、版本异常容错机制(高可用)
克隆一份全新的目录以同样拥有 5 个分支来说,SVN 是同时复製 5 个版本的文件,也就是说重复 5 次同样的动作。而 Git 只是获取文件的每个版本的元素,然后只载入主要的分支(master)。在我的经验,克隆一个拥有将近一万个提交(commit),5 个分支,每个分支有大约 1500 个文件的 SVN,耗了将近 1 小时!而 Git 只用了区区的 1 分钟!
在 SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。如果工作成员想要开啟新的分支,那将会影响“全世界”!每个人都会拥有和你一样的分支。如果你的分支是用来进行破坏工作(安检测试),那将会像传染病一样,你改一个分支,还得让其他人重新切分支重新下载,十分狗血。而 Git,每个工作成员可以任意在自己的本地版本库开启无限个分支。举例:当我想尝试破坏自己的程序(安检测试),并且想保留这些被修改的文件供日后使用, 我可以开一个分支,做我喜欢的事。完全不需担心妨碍其他工作成员。只要我不合并及提交到主要版本库,没有一个工作成员会被影响。等到我不需要这个分支时, 我只要把它从我的本地版本库删除即可。无痛无痒。
SVN 只能有一个指定中间版本库。当这个中间版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。而 Git 可以有无限个版本库。或者,更正确的说法,每一个 Git 都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。如果主要版本库(例如:GitHub 的版本库)发生了什么事,工作成员仍然可以在自己的本地版本库(local repository)提交,等待主要版本库恢复即可。工作成员也可以提交到其他的版本库!
在 SVN,当你提交你的完成品时,它将直接记录到中间版本库。当你发现你的完成品存在严重问题时,你已经无法阻止事情的发生了。如果网路中断,你根本没办法提交!而 Git 的提交完全属於本地版本库的活动。而你只需“推”(git push)到主要版本库即可。Git 的“推”其实是在执行“同步”(Sync)
学习策略推荐:
来自git作者Linus Torvalds在git十周年的演讲推荐
学习 Git 的最好方法是从基本开始,熟悉基础后再去摸索不一样的东西。
开始基本部分的练习实践记录
步骤一:安装git软件,pass
步骤二:配置本地git全局配置信息
全局配置中的名称和邮箱设置,检查全局配置
C:\Users\Administrator>git config --global user.name "****"
C:\Users\Administrator>git config --global user.email ***@163.com
C:\Users\Administrator>git config --listdiff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/git/Git/mingw64/etc/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
gui.recentrepo=F:/tmp/githubtmp
user.name=***
user.email=***@163.com
C:\Users\Administrator>
步骤三:创建目标,初始化仓库
创建一个用来存放git学习的文件夹,作为git学习的仓库
F:\tmp\learning-git>git init
Initialized empty Git repository in F:/tmp/learning-git/.git/
步骤四:创建一个readme.txt文件,并写入内容,作为测试原材料
写入readme.txt文件
F:\tmp\learning-git>echo "Git is a version control system.">readme.txt
F:\tmp\learning-git>echo "Git is free software.">>readme.txt
F:\tmp\learning-git>type readme.txt
"Git is a version control system.""Git is free software."
F:\tmp\learning-git>
步骤五:进行版本提交操作–git添加文件需要两步
第一步 add 文件
没有任何显示,说明提交成功
F:\tmp\learning-git>git add readme.txt
F:\tmp\learning-git>
第二步 commit 加-m参数备注信息,易读性
F:\tmp\learning-git>git commit -m"wrote a readme file"[master (root-commit) b75599d] wrote a readme file1file changed, 2 insertions(+)
create mode 100644 readme.txt
F:\tmp\learning-git>
步骤六:修改文件(最后添加一行),查看git状态,理解输出内容
F:\tmp\learning-git>echo "add new line.">>readme.txt #追加模式
F:\tmp\learning-git>type readme.txt #windows下查看文件内容用type"Git is a version control system.""\nGit is free software.""add new line."
F:\tmp\learning-git>git status #查看git状态
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
F:\tmp\learning-git>
步骤七:查看版本变动内容
F:\tmp\learning-git>git diffdiff--git a/readme.txt b/readme.txt
index 6b71d15..c4a59d3 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
"Git is a version control system.""\nGit is free software."
+"add new line."
F:\tmp\learning-git>
步骤八:了解了变动之后,重新通过两步提交,查询git状态确认
F:\tmp\learning-git>git add readme.txt
F:\tmp\learning-git>git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: readme.txt
F:\tmp\learning-git>git commit -m"add distributed"[master 02d503a]add distributed
1file changed, 1 insertion(+)
F:\tmp\learning-git>git status
On branch master
nothing to commit, working tree clean
步骤九:查看日志,优化日志显示内容
F:\tmp\learning-git>git log --pretty=oneline
02d503a922312ecacb92ca012ace6d3064fc428f (HEAD -> master)add distributed
b75599d967b37ba3687be9dc1605181dd15201dd wrote a readme file
F:\tmp\learning-git>git log
commit 02d503a922312ecacb92ca012ace6d3064fc428f (HEAD -> master)
Author: luoluojialuo <[email protected]>
Date: Wed Aug 28 00:24:46 2024 +0800
add distributed
commit b75599d967b37ba3687be9dc1605181dd15201dd
Author: luoluojialuo <[email protected]>
Date: Wed Aug 28 00:18:16 2024 +0800
wrote a readme file
步骤十:版本回退–遇到非预期问题
F:\tmp\learning-git>git -h HEAD
fatal: 'D:/git/Git/mingw64/share/doc/git-doc/gitHEAD.html': documentation file not found.
F:\tmp\learning-git>git reset --hard HEAD^
More?
HEAD is now at 02d503a add distributed
F:\tmp\learning-git>type readme.txt
"Git is a version control system.""\nGit is free software.""add new line."
F:\tmp\learning-git>
没有回退成功,没有报错,不知道啥原因,More之后有个问号?我点了回车
步骤十一:版本重置,查询重置日志
版本回退之后的后悔药,通过查询重置日志,重置到指定版本
F:\tmp\learning-git>git reflog
b75599d (HEAD -> master) HEAD@{0}: reset: moving to HEAD
b75599d (HEAD -> master) HEAD@{1}: reset: moving to HEAD^
02d503a HEAD@{2}: reset: moving to HEAD
02d503a HEAD@{3}: commit: add distributed
b75599d (HEAD -> master) HEAD@{4}: commit (initial): wrote a readme file
F:\tmp\learning-git>type readme.txt
"Git is a version control system.""\nGit is free software."
F:\tmp\learning-git>git reset --hard 02d5
HEAD is now at 02d503a add distributed
F:\tmp\learning-git>type readme.txt
"Git is a version control system.""\nGit is free software.""add new line."
F:\tmp\learning-git>
快速回顾:通过十一个步骤的小结,得到git的基础操作场景有:
git全局配置和仓库初始化;
版本提交;
版本状态查看;
版本回退、版本重置;
查看日志、查看版本重置日志;
版权归原作者 勇敢的星火 所有, 如有侵权,请联系我们删除。