网站首页 > 技术文章 正文
上一次在半小时学会使用Git(一)一文中,我主要记录了Git是什么东西,在Windows下安装Git以及使用Git创建仓库三大内容。那么作为该文的续篇,这篇文章我将主要记录历史版本管理和远程仓库github两方面的内容。
话不多说,直接进入正题。
一、历史版本管理
前面已经说过,Git作为分布式版本控制系统,它的核心功能就是做版本控制。所谓的版本控制,说白了不就是对迭代多次过后的历史版本进行管理,以实现修改保存新版本、版本回退、删除之类的功能嘛。在正式开撸这部分内容之前,我想先就工作区、暂存区、默认分支master和指针HEAD做个补充介绍。
上节已经说过,工作区就是创建的版本文件夹目录下没被隐藏的目录,即非.git目录,而.git则是Git的版本库,版本库中又分为stage/index(暂存区)、第一个分支master和指向当前分支的指针HEAD。大致关系如下图:
git add命令是把工作区的文件修改添加到暂存区;
git commit命令是把暂存区的内容提交到当前分支,此处指master,后面如果有新建分支,那么当前分支的含义就是Git控制台当前所处的分支;
同理,HEAD指针指向Git控制台当前所处分支,所以可以说commit命令是将暂存区中的内容添加到HEAD所指的分支之中。
好了,现在正式进入历史版本管理的内容。
1、版本回退
我们首先可以用git status命令查看当前的仓库状态:
On branch masterUntracked files:
(use "git add <file>..." to include in what will be committed)
py2048/.idea/
py2048/2048.ico
py2048env/
nothing added to commit but untracked files present (use "git add" to track)
提示消息告诉我们,有三个路径是没有添加到暂存区的。
由于这三个路径是我的python工程文件,暂时就不用他们做演示,而用我们之前创建好的readme2.txt文件,先来看看文件内容:
修改该文件,然后再看看仓库状态:
这次的信息就比上次多了,以下是多出来的提示:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use"git checkout -- <file>..."
to discard changes in working directory)
modified: readme2.txt
使用命令git diff readme2.txt具体看看改动了什么:
通过结果我们可以很清晰地看到改动,我们再用add和commit命令提交成为一个新版本(强烈建议读者跟随我的步骤一步步敲击,这会加深记忆)。
提交之后,使用命令git log --pretty=oneline查看提交记录:
输出内容的第一个字段,是Git自动生成的唯一提交ID,我们可以利用它来完成各种版本之间的跳跃穿梭。(HEAD->master)则是说明当前版本正处于哪里,最后的内容则是我们commit时添加的,可以理解为备注。当然,上面的显示是由于我们加了--pretty=oneline进行格式化,所以才用一行简洁呈现,如果不加也可以,只是会凌乱一些。
除了可以查看提交记录之外,我们还可以用git reflog查看历史命令:
前面我们知道了唯一提交ID,聪明的小伙伴肯定已经想到它是我们版本回退的利器!事实正是如此,我们可以用git reset --hard HEAD^来回退到上一个版本,而参数HEAD^则可以替换成HEAD~n(n=回退版本数),也可以直接干脆换成提交ID:
我的瞎改了几次之后,可以很明了地从上图看到提交历史。
2、管理修改
通过前面的内容,我们就可以很方便地在各个版本中穿梭游览了。
这一节内容,我就记录一些比较常用的管理修改的相关命令。
查看工作区和版本库的区别:git diff HEAD -- readme2.txt
让文件回到最近一次commit或者add的状态:
git checkout -- readme2.txt
另外命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。
3、删除文件
删除文件可以有三种方法:直接从文件管理器删除、rm readme2.txt和从版本库中删除。前两种方法是等价的:
git checkout -- readme.txt恢复
从版本库删除:git rm readme.txt
恢复至版本库:git checkout -- readme.txt
二、远程仓库(以github为例)
通过前面的铺垫,我想对于如何玩转本地版本库大家应该都没问题了。不过光是本地版本库可根本体现不出Git作为一个分布式版本控制系统的优越性,版本控制系统从诞生之初就是为了解决多人协作的难题的。Git虽说是分布式(即每个关联在内的机子上都可以有完整的版本库),但其实一般使用时,我们也会创建一个中央库,这样一来所有人都从中取最新版本,在自己的分支改好了再合并进去,这不就完美了?
而github,就是这么一个网络项目托管平台。
本文第二点大内容,就是实现和github的连接,能够实现远程与本地版本库的互通。
既然是要使用github,当然免不了去官网注册账号,这一步很简单,就不赘述了。我们直接从 创建SSH key 开始:
ssh-keygen -t rsa -C "1558473134@qq.com":
检查创建是否成功:在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
创建成功后,登陆GitHub,打开“settings”,“SSH and GPG Keys”页面:然后,点“new SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
创建好ssh key后,就在github创建新仓库,这一步和本地差不多。
一切准备就绪,开始关联:
git remote add origin git@github.com:MountaSouth/py2048.git
把当前分支推送到远程:git push -u origin master
从上图我们可以看到,第一次push是出错了的,但是按照截图先将本地与远程版本库进行合并,然后再push,则可以完美解决问题。执行完毕过后,你会在github上看到和本地仓库一样的文件,这就说明成功了!
好了,半小时学会使用Git(二)到这里就结束了。
如果初学的小伙伴们想要了解更多,和我一起进步,那么欢迎添加个人VX公众号南山泛娱(和头条号同名),下期文章再见!
猜你喜欢
- 2024-10-07 如何编写gitignore文件(git怎么用)
- 2024-10-07 Git 工具 - 子模块(github 子模块)
- 2024-10-07 用git管理版本,你必须知道的事情
- 2024-10-07 详解Github的.gitignore忽略文件+.gitignore不生效解决+生产配置
- 2024-10-07 Git数据迁移:迁移代码到新仓库(git版本库迁移)
- 2024-10-07 收藏就行了:最全git总结(gitjournal)
- 2024-10-07 程序员必须掌握版本控制的工具 --- git(一)
- 2024-10-07 Github怎么上传超过100M的大文件?
- 2024-10-07 Git最全总结(git ci)
- 2024-10-07 Git使用的小技巧(git的使用超详细版教程)
- 1517℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 596℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 521℃MySQL service启动脚本浅析(r12笔记第59天)
- 489℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 489℃启用MySQL查询缓存(mysql8.0查询缓存)
- 477℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 456℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 454℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)