Skip to content
This repository has been archived by the owner on Sep 10, 2019. It is now read-only.

2.3.1 Git add

Zhongyi Tong edited this page Dec 25, 2018 · 3 revisions

Saving changes

git add / git commit / git diff / git stash / .gitignore

✍️ 童仲毅 | ⏳ 2018 年 12 月 1 日

©️ 本文演绎自 Atlassian 编写的 Saving Changes。页面上所有内容采用知识共享-署名(CC BY 2.5 AU)许可协议。

git add

git add 命令将工作目录中的变化添加到缓存区。它告诉 Git 你希望下一个提交中包含这个文件的更新。不过,git add 不会实际上并不会改变你的仓库。直到你运行 git commit ,更改都没有真正被记录。

使用这些命令的同时,你还需要 git status 来查看工作目录和缓存区的状态。

工作原理

git addgit commit 这两个命令组成了最基本的 Git 工作流。它们的作用是将项目的诸多版本记录到仓库历史中。不管使用哪种团队协作模型,每个 Git 用户都必须理解这两个命令。

一个项目的编写离不开这个基本模式:编辑、缓存和提交。首先,你在工作目录下编辑你的文件。当你想要备份当前的项目状态时,你使用 git add 缓存更改。当你觉得这个被缓存的副本已经就绪,你使用 git commit 将它提交到项目历史。git reset 命令用于撤销提交或被缓存的快照。

除了 git addgit commit 之外,git push 也是完整的 Git 协作流程中的重要一环。git push 用于将提交的更改发送到远端仓库。随后,其它团队成员也可以看到这些更改。

Git Tutorial: git add Snapshot

git add 命令和 svn add 不同。后者直接将文件添加到仓库中,而 git add 作用于更抽象的更改(更低一层)。也就是说,哪怕对于同一个文件,每次修改时你都需要使用 git add ,而 svn add 只需要使用一次。这听上去多此一举,但却使项目更易于管理。

缓存区

git add 命令最主要的作用是将工作目录中的更改添加到 Git 的缓存区。缓存区是 Git 特有的功能之一,如果你之前使用的是 SVN(甚至是更古老的 Mercurial),那你可得花点时间理解了。你可以把它理解成工作目录和项目历史中间的缓冲区。缓存区是 Git 三个树状文件结构之一,另外两个是工作目录和提交历史。

缓存允许你把紧密相关的几份更改合并成一份快照,而不是直接提交所有新的更改。也就是说你可以同时进行多个无关的更改,最后分成几次将相关更改添加到缓存区并提交。对于任何版本控制系统来说,保持提交的原子性非常重要,这有利于追踪 bug 以及用最小的代价撤销更改。

用法

git add <文件>

缓存 <文件> 中的更改,准备下次提交。

git add <目录>

缓存 <目录> 下的所有更改,准备下次提交。

git add -p

开始交互式的缓存。你可以将某个文件的其中一处更改加入到下次提交缓存。Git 会显示一系列更改,并等待用户命令。使用 y 缓存某一处更改,使用 n 忽略某一处更改,使用 s 将某一处分割成更小的几份,使用 e 手动编辑某一处更改,使用 q 退出编辑。

栗子

对于新项目来说,git addsvn import 的作用类似。使用下面两个命令为当前目录创建首个提交:

git add .
git commit

项目设置好之后,新的文件可以通过路径传递给 git add 来添加到缓存区:

git add hello.py
git commit

上面的命令同样可以用于记录已有文件的更改。如前所述,Git 不会区分被缓存的更改来自新文件,还是仓库中已有的文件。

这篇文章是「git-recipes」的一部分,点击 目录 查看所有章节。

如果你觉得文章对你有帮助,欢迎点击右上角的 Star 🌟 或 Fork 🍴。

如果你发现了错误,或是想要加入协作,请参阅 Wiki 协作说明