今天是 Git 系列课程第三课, 前两课我们都是在做 Git 仓库准备工作, 今天痞子衡要讲的是 Git 本地提交前的准备工作
本地有了仓库, 我们便可以在仓库所在目录下做文件增删改操作, 这些操作默认都发生在 Git 工作区内, Git 并不会主动管理如果希望 Git 能够管理这些变动, 你需要主动通知 Git 共有 3 种通知 Git 的命令, 痞子衡为大家一一讲解
1. 查看 Git 空间文件改动状态 git status
前面讲过 Git 空间内文件改动有 4 种状态, 除了 Unmodified 状态的文件之外, 其他文件改动状态都可以通过 git status 来查看让我们开始在工作区创建 3 个文件: main.ctest.cdummy.c
dummy.c(路径:/gittest/app/dummy.c)为空白文件
test.c(路径:/gittest/app/test.c)文件内容如下:
- #include <stdio.h>
- #include <stdlib.h>
- void test(void)
- {
- printf("this is test\n");
- }
main.c(路径:/gittest/main.c)文件内容如下:
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- printf("hello world\n");
- return 0;
- }
新建了 3 个文件, 让我们来看看 git 记录的状态, 从下面结果可知, 新增的 3 个文件在 Git 空间里都属于 Untracked 文件, 存放在工作区内
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git status
- On branch master
- Your branch is up to date with 'origin/master'.
- Untracked files:
- (use "git add <file>..." to include in what will be committed)
- app/
- main.c
2. 将工作区文件改动添加到暂存区 git add
git add 是第一种通知 Git 命令, 这个命令用于告诉 Git 我们新增了文件改动, 被 git add 命令操作过的文件 (改动) 便会处于 Git 暂存区
2.1 添加单文件改动 git add [file path]
前面 3 个文件已经创建好, 让我们开始用 git add 将它们一一添加到暂存区:
- // 将 main.c,test.c, dummy.c 分别添加到暂存区
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git add main.c
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git add app/test.c
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git add app/dummy.c
- // 查看此时的文件状态, 3 个文件都已在暂存区中了
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git status
- On branch master
- Your branch is up to date with 'origin/master'.
- Changes to be committed:
- (use "git reset HEAD <file>..." to unstage)
- new file: app/dummy.c
- new file: app/test.c
- new file: main.c
1.2 添加文件夹内全部改动 git add -A [folder path]
有没有觉得 git add [filepath]一次只能添加一个文件不够高效? 别急, 你还可以按文件夹来提交这时我们再做一些改动, 将 dummy.c 文件删除, 将 test.c 文件里的内容全部删除, 再新增一个名叫 duty.c 的文件
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git status
- On branch master
- Your branch is up to date with 'origin/master'.
- Changes to be committed:
- (use "git reset HEAD <file>..." to unstage)
- new file: app/dummy.c
- new file: app/test.c
- new file: main.c
- Changes not staged for commit:
- (use "git add/rm <file>..." to update what will be committed)
- (use "git checkout -- <file>..." to discard changes in working directory)
- deleted: app/dummy.c
- modified: app/test.c
- Untracked files:
- (use "git add <file>..." to include in what will be committed)
- app/duty.c
让我们试试 git add -A [folderpath], 执行完这个命令后, 我们可以看到 app / 文件夹下的所有类型的文件改动 (新增修改删除) 被一次性地存储到了暂存区, 这下是不是效率高了很多有兴趣的朋友还可以继续研究 git add .(不包括删除操作)和 git add -u(不包括新增操作)两个命令, 实际上 git add -A 是这两个命令的并集
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git add -A app/
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git status
- On branch master
- Your branch is up to date with 'origin/master'.
- Changes to be committed:
- (use "git reset HEAD <file>..." to unstage)
- new file: app/duty.c
- new file: app/test.c
- new file: main.c
3. 将暂存区文件改动退回 git rm
git rm 是第二种通知 Git 命令, 这个命令用于告诉 Git 我们想把之前用 git add 添加的文件改动从 Git 暂存区里拿出去, 不需要 Git 记录了拿出去有两种拿法, 一种是从暂存区退回到工作区, 另一种是直接丢弃文件改动让我们试着将 test.c 退回到工作区, duty.c 直接丢弃
3.1 退回文件改动到工作区 git rm --cache [file path]
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git rm --cache app/test.c
- rm 'app/test.c'
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git status
- On branch master
- Your branch is up to date with 'origin/master'.
- Changes to be committed:
- (use "git reset HEAD <file>..." to unstage)
- new file: app/duty.c
- new file: main.c
- Untracked files:
- (use "git add <file>..." to include in what will be committed)
- app/test.c
3.2 丢弃文件改动 git rm -f [file path]
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git rm -f app/duty.c
- rm 'app/duty.c'
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git status
- On branch master
- Your branch is up to date with 'origin/master'.
- Changes to be committed:
- (use "git reset HEAD <file>..." to unstage)
- new file: main.c
- Untracked files:
- (use "git add <file>..." to include in what will be committed)
- app/
4. 将暂存区文件移动位置 / 重命名 git mv
git mv 是第三种通知 Git 命令, 这个命令用于告诉 Git 我们想把之前用 git add 添加的文件直接在暂存区里重新命名或移动到新位置让我们试着将 main.c 重命名为 app.c, 并移动到 app / 文件夹下
4.1 文件重命名 git mv [src file] [dest file]
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git mv main.c app.c
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git status
- On branch master
- Your branch is up to date with 'origin/master'.
- Changes to be committed:
- (use "git reset HEAD <file>..." to unstage)
- new file: app.c
- Untracked files:
- (use "git add <file>..." to include in what will be committed)
- app/
4.2 移动文件位置 git mv [src file] [dest dir]
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git mv app.c app/
- jay@pc MINGW64 /d/my_project/gittest (master)
- $ git status
- On branch master
- Your branch is up to date with 'origin/master'.
- Changes to be committed:
- (use "git reset HEAD <file>..." to unstage)
- new file: app/app.c
- Untracked files:
- (use "git add <file>..." to include in what will be committed)
- app/test.c
来源: http://www.bubuko.com/infodetail-2521995.html