新增变更
"git add"新增工作目录的变更到暂存区,新增到暂存区的变更在接下来执行"git commit"时会被提交到版本仓库。在未执行实际的提交前,"git add"不会对仓库历史有任何影响。
git add <file>
添加所有在<file>文件中的变更到暂存区,等待提交
git add <directory>
添加所有在<directory>目录中的变更到暂存区,等待提交
git add -p
交互式地新增变更到暂存区,这会一个接一个的让用户选择文件的变更的新增到暂存区
-
y 暂存变更
-
n 取消暂存
-
s 划分当前变更为更小的变更
-
e 手动介入编辑变更
-
q 退出
"git add"命令比较抽象,其操作的对象是变更,而不仅仅是对新增文件进行版本跟踪,所以即使是已经处于版本跟踪的文件,每次文件发生了变更,也需要执行此命令。
暂存区(stage)
暂存区是git与其他版本控制系统,比如svn和mecurial比较不同的地方。git中,数据可能存在于三个地方:工作目录,暂存区,版本历史仓库,工作目录就是进行各种修改的区域,暂存区是工作目录和版本历史库之间一个缓存区,版本历史仓库就是被存入历史的各个项目版本。
暂存区的存在使得分批提交变更变得很容易,而不是把上一次提交以来发生的所有变更都一次性提交到版本库,这可以把提交控制得更加有针对性,原子性,每次提交都只提交具有相关性的变更。单次提交的原子性,提交内容的相关性有助于在对既有项目影响较小的情况下进行bug追朔,变更撤销等操作。
由于stage区域的存在, change/stage/commit成为了git中循环进行的一项工作,三个操作分别对应于三个git数据存在的三个区域。工作空间发生变更,暂存到暂存区,提交到仓库历史。