10.6 使用git add-i选择性添加

刚刚创建的Hello World程序还没有添加到版本库中,在src目录下有下列文件:


$cd/path/to/my/workspace/demo

$ls src

hello main.c main.o Makefile version.h version.h.in


这些文件中hello、main.o和version.h都是在编译时生成的文件,不应该加入到版本库中。那么选择性添加文件除了针对文件逐一使用git add命令外,还有其他办法吗?通过使用-i参数调用git add就是一个办法,它提供了一个交互式的界面。

执行git add-i命令,进入一个交互式界面,首先显示的是工作区状态。显然因为版本库进行了清理,所以显得很“干净”。


$git add-i

staged unstaged path

Commands

1:status 2:update 3:revert 4:add untracked

5:patch 6:diff 7:quit 8:help

What now>


交互式界面显示了命令列表,可以使用数字或加亮显示的命令首字母,选择相应的功能。对于此例需要将新文件加入到版本库中,所以选择“4”。


What now>4

1:src/Makefile

2:src/hello

3:src/main.c

4:src/main.o

5:src/version.h

6:src/version.h.in

Add untracked>>


当选择了“4”之后,就进入了"Add untracked"的界面,显示了本地新增(尚不在版本库中)的文件列表,而且提示符也变了,由"What now>"变为"Add untracked>>"。依次输入1、3、6将源代码添加到版本库中。

输入“1”:


Add untracked>>1

*1:src/Makefile

2:src/hello

3:src/main.c

4:src/main.o

5:src/version.h

6:src/version.h.in


输入“3”:


Add untracked>>3

*1:src/Makefile

2:src/hello

*3:src/main.c

4:src/main.o

5:src/version.h

6:src/version.h.in


输入“6”:


Add untracked>>6

*1:src/Makefile

2:src/hello

*3:src/main.c

4:src/main.o

5:src/version.h

*6:src/version.h.in

Add untracked>>


每次输入文件序号,对应的文件前面都添加一个星号,代表将此文件添加到暂存区。在提示符"Add untracked>>"处按回车键,完成文件添加,返回主界面。


Add untracked>>

added 3 paths

Commands

1:status 2:update 3:revert 4:add untracked

5:patch 6:diff 7:quit 8:help

What now>


此时输入“1”查看状态,可以看到三个文件添加到暂存区中。


What now>1

staged unstaged path

1:+20/-0 nothing src/Makefile

2:+10/-0 nothing src/main.c

3:+6/-0 nothing src/version.h.in

Commands

1:status 2:update 3:revert 4:add untracked

5:patch 6:diff 7:quit 8:help


输入“7”退出交互界面。

查看文件状态,可以发现三个文件被添加到暂存区中。


$git status-s

A src/Makefile

A src/main.c

A src/version.h.in

?? src/hello

?? src/main.o

?? src/version.h


完成提交。


$git commit-m "Hello world initialized."

[master d71ce92]Hello world initialized.

3 files changed,36 insertions(+),0 deletions(-)

create mode 100644 src/Makefile

create mode 100644 src/main.c

create mode 100644 src/version.h.in