上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。
- git add files把当前文件放入暂存区域。
- git commit给暂存区域生成快照并提交。
- git reset – files用来撤销最后一次git add files,你也可以用git reset撤销所有暂存区域文件。
- git checkout – files把文件从暂存区域复制到工作目录,用来丢弃本地修改。
你可以用git reset -p,git checkout -p,or git add -p进入交互模式。
也可以跳过暂存区域直接从仓库取出文件或者直接提交代码。
- git commit -a相当于运行git add把所有当前目录下的文件加入暂存区域再运行。
- git commit files进行一次包含最后一次提交加上工作目录中文件快照的提交。并且文件被添加到暂存区域。
- git checkout HEAD – files回滚到复制最后一次提交。
约定
后文中以下面的形式使用图片。
绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。这张图片里显示最后5次提交,ed489是最新提交。master分支指向此次提交,另一个maint分支指向祖父提交节点。
命令详解
Diff
有许多种方法查看两次提交之间的变动,下面是一些示例。
提交时,Git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。然后把当前分支指向新的提交节点。下图中,当前分支是master。在运行命令之前,master指向ed489,提交后,master指向新的节点f0cec并以ed489作为父节点。
即便当前分支是某次提交的祖父节点,git会同样操作。下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。这样,maint分支就不再是master分支的祖父节点。此时,合并[1](或者衍合[2])是必须的。