今天是Git系列课程第四课,上一课我们在Git空间里做了一些文件改动并且知道了如何利用Git查看这些变动,今天痞子衡要讲的是将这些变动提交到Git本地仓库前的准备工作。

  Git仓库目录下的文件改动操作默认都发生在Git工作区内,Git并不会主动管理。如果希望Git能够管理这些变动,你需要主动通知Git。共有3种通知Git的命令(git add/rm/mv),痞子衡为大家一一讲解。

1.将工作区文件改动添加到暂存区git add

  git add是第一种通知Git命令,这个命令用于告诉Git我们新增了文件改动,被git add命令操作过的文件(改动)便会处于Git暂存区。

1.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文件里的内容全部删除,再新增一个名叫trash.c的文件。

// 查看dummy.c,test.c, track.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/trash.c

  让我们试试git add -A [folderpath],执行完这个命令后,我们可以看到app/文件夹下的所有类型的文件改动(新增、修改、删除)被一次性地存储到了暂存区,这下是不是效率高了很多。有兴趣的朋友还可以继续研究git add .(不包括删除操作)和git add -u(不包括新增操作)两个命令,实际上git add -A是这两个命令的并集。

// 将app/文件夹下的所有类型的文件改动全部添加到暂存区

jay@pc MINGW64 /d/my_project/gittest (master)

$ git add -A app/

// 查看此时Git状态,尤其是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/trash.c
new file: app/test.c
new file: main.c

2.将暂存区文件改动退回git rm

  git rm是第二种通知Git命令,这个命令用于告诉Git我们想把之前用git add添加的文件改动从Git暂存区里拿出去,不需要Git记录了。拿出去有两种拿法,一种是从暂存区退回到工作区,另一种是直接丢弃文件改动。让我们试着将test.c退回到工作区,trash.c直接丢弃。

2.1退回文件改动到工作区git rm --cache [file path]

// 将test.c的改动从暂存区移回工作区

jay@pc MINGW64 /d/my_project/gittest (master)

$ git rm --cache app/test.c

rm 'app/test.c'

// 查看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/trash.c
new file: main.c Untracked files:
(use "git add <file>..." to include in what will be committed) app/test.c

2.2直接删除文件git rm -f [file path]

// 将track.c文件直接从Git空间里删除,不留痕迹

jay@pc MINGW64 /d/my_project/gittest (master)

$ git rm -f app/trash.c

rm 'app/trash.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/

### 3.将暂存区文件移动位置/重命名git mv
  git mv是第三种通知Git命令,这个命令用于告诉Git我们想把之前用git add添加的文件直接在暂存区里重新命名或移动到新位置。让我们试着将main.c重命名为app.c,并移动到app/文件夹下。 #### 3.1文件重命名git mv [src file] [dest file]
> // 将main.c在暂存区里直接改名为app.c(app.c也记录在暂存区)
> jay@pc MINGW64 /d/my_project/gittest (master)
> <font style="font-weight:bold;" color="Blue">$ git mv main.c app.c</font>
>
> jay@pc MINGW64 /d/my_project/gittest (master)
> <font style="font-weight:bold;">$ git status</font>
> ```nohighlight
> 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/
> ``` #### 3.2移动文件位置git mv [src file] [dest dir]
> // 将app.c从gittest主目录移动到app/目录下(移动操作记录在暂存区)
> jay@pc MINGW64 /d/my_project/gittest (master)
> <font style="font-weight:bold;" color="Blue">$ git mv app.c app/</font>
>
> jay@pc MINGW64 /d/my_project/gittest (master)
> <font style="font-weight:bold;">$ git status</font>
> ```nohighlight
> 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
> ``` ### 欢迎订阅 文章会同时发布到我的 [博客园主页](https://www.cnblogs.com/henjay724/)、[CSDN主页](https://blog.csdn.net/Henjay724)、[微信公众号](http://weixin.sogou.com/weixin?type=1&query=痞子衡嵌入式) 平台上。 微信搜索"__痞子衡嵌入式__"或者扫描下面二维码,就可以在手机上第一时间看了哦。 ![](http://henjay724.com/image/github/pzhMcu_qrcode_258x258.jpg)

痞子衡嵌入式:第一本Git命令教程(4)- 转移(add/rm/mv)的更多相关文章

  1. 痞子衡嵌入式:第一本Git命令教程(0)- 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家讲的是Git命令汇编,共12篇文章,循序渐进地介绍Git操作的完整过程. 在开始Git课程之前,需要先跟大家普及2个重要概念(四度空间.四种状 ...

  2. 痞子衡嵌入式:第一本Git命令教程(7.1)- 清理之缓存(stash)

    今天是Git系列课程第七课,上一课我们学会了查看Git本地历史提交,今天痞子衡要讲的是Git仓库的清理操作,一共4个命令,都是日常开发中非常实用的命令,掌握这4个命令,会让你有一种玩弄Git仓库于股掌 ...

  3. 痞子衡嵌入式:第一本Git命令教程(1)- 准备(init/config/.gitignore)

    今天是Git系列课程第一课,痞子衡给大家要讲的是创建仓库的准备工作. 1.建仓库git init 第一步是创建一个空仓库,这是一切操作的前提. // 打开git bash命令行,切换到指定目录下 ja ...

  4. 痞子衡嵌入式:第一本Git命令教程(3)- 变动(status/diff)

    今天是Git系列课程第三课,前两课我们都是在做Git仓库准备工作,今天痞子衡要讲的是如何查看Git空间内发生的改动. 本地有了仓库,我们便可以在仓库所在目录下做文件增删改操作,为了确定改动操作的正确性 ...

  5. 痞子衡嵌入式:第一本Git命令教程(5)- 提交(commit/format-patch/am)

    今天是Git系列课程第五课,上一课我们做了Git本地提交前的准备工作,今天痞子衡要讲的是Git本地提交操作. 当我们在仓库工作区下完成了文件增删改操作之后,并且使用git add将文件改动记录在暂存区 ...

  6. 痞子衡嵌入式:第一本Git命令教程(6)- 日志(log/reflog/gitk)

    今天是Git系列课程第六课,上一课我们学会了Git本地提交,今天痞子衡要讲的是如何查看Git本地历史提交. 当我们在仓库里做了很多次提交之后,免不了需要回看提交记录,看看自己之前的改动.有三种Git命 ...

  7. 痞子衡嵌入式:第一本Git命令教程(2)- 连接(remote/clone)

    今天是Git系列课程第二课,上一课我们已经学会在本地创建一个空仓库,痞子衡今天要讲的是如何将本地仓库与远程建立联系. 1.将本地仓库挂上远程git remote 本地建好了仓库,我们希望能够挂到远程服 ...

  8. 痞子衡嵌入式:超级下载算法RT-UFL v1.0发布,附J-Link下安装教程

    痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> 历时 8 个月终于迎来了 v1.0 版发布,因为是第一个正式版,为了保证质 ...

  9. 痞子衡嵌入式:超级好用的可视化PyQt GUI构建工具(Qt Designer)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是PyQt GUI构建工具Qt Designer. 痞子衡开博客至今已有好几年,一直以嵌入式开发相关主题的文章为主线,偶尔穿插一些其他技术 ...

随机推荐

  1. go-mod 入门

    Q群有人问go mod 问题,自己也忘了些.顺便再整理下. GO111MODULE可以设置为三个字符串值之一:off,on或auto(默认值). off 则go命令从不使用新模块支持.它查找vendo ...

  2. 用gulp-imageisux智图api压缩图片

    ➣ 智图平台是什么? 智图是腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台,其功能包括针对png,jpeg,gif等各类格式图片的压缩,以及为上传图片自动选择最优的图片格式.同时, ...

  3. Ubuntu16.04安装之后连不上无线网?有可能是Realtek rtl8822be的原因

    原以为昨天已基本写完在接触到Ubuntu以来遇到的所有问题了... 没想到今天去看有关ROS的资料时,居然无意间又看到了之前遇到的一个巨坑:安装完Ubuntu16.04之后,无线网用不了,根本无法连接 ...

  4. BUAA-OO-第二单元总结

    OO第二单元总结 一.第五次作业 1.1 设计策略与架构 第五次作业要求的是完成设计支持一架傻瓜电梯的电梯系统.考虑到需要数据结构存放所有的请求,因此构建了FloorRequests类用来存放所有的请 ...

  5. eclipse中生成的html存在中文乱码问题的解决方法

    最近在做测试报告生成时遇到了个中文乱码的问题,虽然在html创建过程中设置了编码格式htmlReporter.config().setEncoding("UTF-8");但是生成的 ...

  6. Android Studio 全局内替换字符串

    Ctrl+Shift+R

  7. Windows获取进程完整路径

    #include <stdio.h> #include <locale.h> #include <windows.h> #include <tlhelp32. ...

  8. High Availability手册(2): 架构

    最底层是通信层corosync/openais 负责cluster中node之间的通信 上一层是Resource Allocation Layer,包含下面的组件: CRM Cluster Resou ...

  9. numpy.random 常用函数详解之排列乱序篇(Permutations)

    1.numpy.random.shuffle(x) 参数:填入数组或列表. 返回值:无. 函数功能描述:对填入的数组或列表进行乱序处理,shape保持不变. 2.numpy.random.permut ...

  10. [Swift]LeetCode88. 合并两个有序数组 | Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...