【Git】2. Git常用命令详解、版本切换原理

简介: 【Git】2. Git常用命令详解、版本切换原理

一、新增文件


1、设置用户签名


签名的作用就是为了区分不同的人,方便查看版本的时候知道操作的人是谁。首次安装好git之后必须设置一下签名,否则无法提交代码。


另外,这里设置的签名跟你登录到远程仓的账号没有关系。


git config --global user.name 用户名
git config --global user.email 邮箱


2、初始化本地库


想通过git管理文件目录,首先要让git获取到管理权,所以要初始化。


git init


1268169-20210507075633024-647831043.png


初始化成功,提示初始化了一个空的git仓库.git,这里的文件就别改动了,可以打开看看。


3、查看本地库状态


初始化本地库之后,就可以查看本地库的状态了。


git status


1268169-20210507080040516-1571210016.png


看下返回的3行分别说了啥:


  1. 本地库在master分支,master是默认生成的。
  2. 目前还没有提交过任何东西。
  3. 除了没有提交过,而且现在还没有什么东西需要你提交。


这时候新增一个文件的hello.txt,再用git status看这里就不一样了。


1268169-20210507080854215-1394799268.png


出现一个新行:Untracked files,未被追踪的文件,红色标记。说明这个文件只在工作区,但是没有被git追踪。


最后一行的描述也变了,说目前还没有提交文件,但是存在未被追踪的文件。


4、添加暂存区


git的提示做的还是很友好的,基本上都会给你操作提示。接着上面来,现在如何让文件被追踪,提示说了,用git add


git add


1268169-20210507081540556-847903114.png


出现一个warning,说的是换行符自动替换处理,因为那个文件我直接在git-bash窗口用linux命令新建的,所以自动转化了win用的CRLF,不用管它。


现在重新查看下git status


1268169-20210507081846951-345546682.png


绿了,绿了,只不过不是古天乐(这是一个传奇页游广告的梗),而是刚才的hello.txt文件。


5、删除暂存区


现在这个文件也只是在暂存区里,暂存区里的文件是可以删掉的。如果现在我不想让这个文件产生一个历史版本,那么要在提交到本地仓库之前删掉它,就在暂存区删吧。

同样git也给了提示。

git rm --cached <file>


1268169-20210507082333095-1151218246.png


成功删除,但是记住这里删的是暂存区的,你本地工作区的文件没动,用ll查看一下。


1268169-20210507082442470-445583205.png


6、提交本地库


把文件重新提交到暂存区,接下来就可以提交到本地库,形成一个历史版本了。


git commit -m "日志信息" 文件名


1268169-20210507082944663-7891289.png


提交成功,看提示信息:


  • [master (root-commit) a70616d],这里的a70616d就是版本号了,这个是简短版的。
  • 1 file changed, 19 insertions(+),1个文件被改变,插入了19行信息(文本里有19行内容)。


7、查看版本信息


刚才提交本地库产生一个版本信息,可以用这个命令查看。


git reflog


1268169-20210507083539838-1219175019.png


显示了刚才提交的版本信息。


  • a70616d是版本号。
  • (HEAD -> master代表指针指向这个第一个版本。



还可以用这个命令查看更相信的版本信息:


git log


1268169-20210507083824330-1549529038.png


可以看到这里的版本号很长a70616d3fc1c69f948a7b0d4ed2b640bedb1e747,这个就是完整版的版本号了。


二、文件被修改后


上面是新增一个文件,但是最多的场景还是同一个文件被反复修改,现在我去修改hello.txt文件,增加写内容,然后git status


1268169-20210507084526404-664860095.png


提示有一个文件被修改了,红色表示还没有被追踪,那么重复上面的动作,提交到暂存区即可,用git add。提交成功了再次查看。


1268169-20210507084700916-225053989.png


最后再提交本地库。


1268169-20210507084847972-619003977.png


这里看到最后的提示,有一行新增,一行删除,可是我只是在第一行后面继续增加了内容。


因为git里面是按照行来维护文件的,我修改了第一行内容,实际上对于git来说,要先删除掉之前的第一行内容,然后再增加修改后的第一行内容。


现在查看版本信息git reflog


1268169-20210507085324996-1479580478.png


可以看到:


  • 有2个版本信息。
  • 此时的指针是指向第二个版本。


三、版本穿梭


比如现在我想回退到之前某一个历史版本。


先查看历史版本,git reflog,目前我有3个版本。


1268169-20210507125557500-1949221883.png


我现在要回到第二次提交的版本,复制出版本号,使用如下命令:


git reset --hard 94ca3de


1268169-20210507125754797-662573530.png


此时我再查看版本,发现指针已经移到了第二次提交的版本上了。


1268169-20210507125923337-1162806219.png


至于,第一行是告诉你做了一个reset的操作,目标版本号是什么。


git切换版本的原理


底层其实是移动HEAD指针。


可以先打开本地的.git下的HEAD,可以看到里面指针指向master,说明当前是在master分支上。


1268169-20210507210753631-1900297533.png


接着,可以打开.git/refs/heads/下面的master,可以看到里面的内容就是当前所在版本的版本号。


1268169-20210507211217738-392645001.png


当继续切换版本到a70616d的时候,master文件里的版本号也会变更为对应的。


1268169-20210507211456537-965576581.png


用示意图来描述的话,其实在我们刚提交完第三个版本的时候,应该是这样的:


1268169-20210507212156679-1403337396.png


当我们切换版本的时候,其实就是指针变了,比如现在切换到第二版本:


1268169-20210507212301256-616275254.png


接下来,到了分支相关了。

相关文章
|
2月前
|
开发工具 git
git 常用命令
这些只是 Git 命令的一部分,Git 还有许多其他命令和选项,可根据具体需求进行深入学习和使用。熟练掌握这些命令能够帮助你更高效地管理代码版本和协作开发。
|
1月前
|
机器学习/深度学习 Shell 网络安全
【Git】Git 命令参考手册
Git 命令参考手册的扩展部分,包含了从基础操作到高级功能的全面讲解。
54 3
|
2月前
|
缓存 Java Shell
[Git]入门及其常用命令
本文介绍了 Git 的基本概念和常用命令,包括配置、分支管理、日志查看、版本回退等。特别讲解了如何部分拉取代码、暂存代码、删除日志等特殊需求的操作。通过实例和图解,帮助读者更好地理解和使用 Git。文章强调了 Git 的细节和注意事项,适合初学者和有一定基础的开发者参考。
64 1
[Git]入门及其常用命令
|
3月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
159 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
2月前
|
开发工具 git 开发者
|
2月前
|
开发工具 git 开发者
提升Git效率:掌握这5个高级命令
【10月更文挑战第17天】
76 0
|
4月前
|
存储 Linux 开发工具
掌握 Git 命令:每个开发者的必备技能
无论团队项目还是个人开发,掌握 Git 命令都是必备技能。本文介绍 Git 的基本概念与命令,如初始化仓库 (`git init`)、添加文件 (`git add`)、提交更改 (`git commit`)、检出分支 (`git checkout`)、合并分支 (`git merge`) 等,还分享了高级技巧如查看差异 (`git diff`)、撤销提交 (`git revert`)、修复合并冲突 (`git mergetool`) 和使用别名简化命令 (`git config --global alias.ci commit`)。
|
8月前
|
Linux 开发工具 数据安全/隐私保护
分布式版本控制git
分布式版本控制git
|
5月前
|
敏捷开发 存储 开发工具
版本控制系统的选择:Git与SVN的比较
【8月更文挑战第14天】Git和SVN都是优秀的版本控制系统,它们各自具有独特的优势和适用场景。在选择版本控制系统时,需要根据具体的项目需求、团队特点和开发模式来综合考量。对于需要分布式团队协作、高效处理大型项目或采用敏捷开发模式的团队来说,Git是一个更好的选择。而对于传统团队、集中式开发或简单项目来说,SVN可能更加合适。无论选择哪种版本控制系统,都应该充分利用其提供的工具和功能来提高代码质量和开发效率。
|
4月前
|
存储 Linux 开发工具
掌握版本控制的艺术:Git 技巧深度解析
在软件开发中,版本控制对于代码管理和团队协作至关重要。Git 作为最流行的分布式版本控制系统,凭借其强大的功能和灵活性成为开发者必备工具。本文深入探讨 Git 的高级技巧和最佳实践,包括交互式暂存、撤销提交、合并冲突处理等,帮助你更高效地使用 Git。通过遵循清晰的提交信息、保持提交原子性、利用分支开发等最佳实践,开发者可以更好地管理代码库,提升协作效率。

相关实验场景

更多