现在,假定你已经完全掌握了暂存区的概念。下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。
你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。
为什么说Git管理的是修改,而不是文件呢?我们还是做实验。第一步,对readme.txt做一个修改,比如加一行内容:
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes.
然后,添加:
$ git add readme.txt
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: readme.txt
#
然后,再修改readme.txt:
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
提交:
$ git commit -m "git tracks changes"
[master d4f25b6] git tracks changes
1 file changed, 1 insertion(+)
提交后,再看看状态:
$ git status
# On branch master
# 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: readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
咦,怎么第二次的修改没有被提交?
别激动,我们回顾一下操作过程:
第一次修改 -> git add
-> 第二次修改 -> git commit
你看,我们前面讲了,Git管理的是修改,当你用git add
命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit
只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
提交后,用git diff HEAD -- readme.txt
命令可以查看工作区和版本库里面最新版本的区别:
$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.
可见,第二次修改确实没有被提交。
那怎么提交第二次修改呢?你可以继续git add
再git commit
,也可以别着急提交第一次修改,先git add
第二次修改,再git commit
,就相当于把两次修改合并后一块提交了:
第一次修改 -> git add
-> 第二次修改 -> git add
-> git commit
好,现在,把第二次修改提交了,然后开始小结。
小结
现在,你又理解了Git是如何跟踪修改的,每次修改,如果不add
到暂存区,那就不会加入到commit
中。
相关推荐
当多人同时修改同一文件时可能出现冲突,通过手动编辑冲突部分并使用`git add`和`git commit`来解决。 8. **标签管理(Tag Management)**: 创建标签用`git tag -a tag_name -m "tag描述"`,列出所有标签用`git ...
在“git学习笔记”中,我们通常会涵盖以下几个核心知识点: 1. **Git安装与配置**:首先,我们需要了解如何在不同的操作系统(如Windows、MacOS或Linux)上安装Git,并设置用户信息,包括用户名和邮箱,这些信息会...
Atom-Writing是一个基于GitHub的项目,它利用了Atom文本编辑器的强大功能,为开发者提供了一个高效、便捷的创作环境。Atom是由GitHub开发的一款开源文本编辑器,它采用Web技术,如HTML、CSS和JavaScript,使其具有...
这份"Git的学习笔记/记录"涵盖了Git的基础知识以及高级用法,旨在帮助读者深入理解Git的工作原理和实践技巧。 一、Git的基本概念 1. 版本控制:Git的主要目标是管理项目在开发过程中的不同版本,以便于回溯、比较和...
**我的SVN学习笔记(原创)** 在信息技术领域,版本控制系统是不可或缺的工具之一,它帮助开发者跟踪和管理代码的变化,使得多人协作变得有序而高效。Subversion(简称SVN)就是这样的一个开源版本控制系统,它允许...
GitHub则是基于Git的一个在线平台,提供了代码托管、协作编辑、问题跟踪、版本控制等一系列功能,是全球开发者交流与合作的重要场所。 Git的核心概念包括仓库(Repository)、提交(Commit)、分支(Branch)、合并...
将学习笔记存放在GitHub上,意味着这些笔记可以被版本控制,随时查看历史更改,同时也便于与他人共享和协作。 "Notebook-main"很可能是这个学习笔记项目的主目录或者主文件,这可能是一个包含所有笔记文件的文件夹...
通常,开发团队会有一个共享的远程仓库,如GitHub或GitLab,团队成员可以推送(`git push`)自己的更改到远程仓库,也可以拉取(`git pull`)其他人的更新到本地。使用`git clone`命令可以从远程仓库克隆一个完整的...
6. **版本控制**: 由于使用了GitHub,所有的更改都有版本记录,这使得作者可以追溯历史版本,查看修改历史,甚至回滚到之前的版本,确保内容的准确性。 7. **开源精神**: 将笔记集开源意味着任何人都可以查看、学习...
通过GitHub Desktop,开发者可以在线编辑代码,实时查看更改,并与其他开发者协作。 4. **CodePen** CodePen 是一个针对前端开发者的在线代码编辑器,专注于HTML、CSS和JavaScript的编写。它提供了一个实时预览...
Git学习笔记主要涵盖以下几个核心知识点: 1. Git安装与配置: 在Windows、Mac或Linux上安装Git,通常可以从Git官方网站下载安装包。安装完成后,需要进行基本的用户配置,包括设置用户名和邮箱,这是Git用来标识...
`diff`命令用来比较文件差异,`vi/vim`编辑器提供强大的文本编辑功能,其环境参数和常用指令能极大地提高工作效率。文件搜索命令`find`是日常操作中不可或缺的工具,例如查找特定名称、大小、所有权或修改时间的文件...
5. **发起Pull Request**:在GitHub上发起一个Pull Request,请求将你的更改合并回原始仓库。 6. **等待审查**:项目维护者会审阅你的贡献,并可能提出反馈或直接合并。 通过以上步骤,你可以参与到AVSblog的内容...
总的来说,"notemanager.github.io"项目提供了一个基于JavaScript的在线笔记解决方案,通过GitHub Pages部署,用户可以查看源代码,学习其架构和实现,甚至根据自己的需求进行修改和扩展。对于想要提升JavaScript ...
修改了笔记列表的显示时间方式 修复了小米2s 5.0上CardView的显示问题 1.0.2 Material Design风格,采用抽屉式菜单,悬浮滑动按钮,点击控件时的水波纹效果,状态栏透明使得与应用融为一体,用户即使在Android ...
### ExtJS 学习笔记概览 #### 一、ExtJS 入门 **1.1 ExtJS 构成及如何引用** ExtJS 是一款基于 JavaScript 的开源框架,专为 Web 应用程序的前端界面设计。其核心优势在于提供了一套丰富的 UI 组件和强大的数据...
5. **推送至GitHub**:完成本地修改后,使用`git push`将更改推送到GitHub仓库。首次推送可能需要提供用户名和密码,或者配置SSH密钥以实现无密码推送。 6. **查看状态**:`git status`用于查看当前工作目录和暂存...
【bangbangde.github.io:笔记本】是一个个人博客项目,它主要基于HTML技术构建,用于分享作者的笔记和学习心得。这个项目的源代码存放在名为"bangbangde.github.io-master"的压缩包中,通常这样的命名方式表明这是一...