今天是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. 读取 ini 配置文件

    ini 配置文件格式:db_config.ini '''[section]option=value''' [DATABASE1] host=192.168.30.80 port= user=testa ...

  2. Eclipse自动补全调教

    方法来自http://www.cnblogs.com/sunjie21/archive/2012/06/28/2567463.html 调教后可以做到: 1. sout + Tab 输出System. ...

  3. mint17上建立lamp环境

    使用apt-get方式是最简单的也是最快捷稳定的在桌面linux环境下.   分别执行如下命令:   (1)安装MYSQL   sudo apt-get install mysql-server   ...

  4. iptables安装

    1.安装iptable iptable-service #先检查是否安装了iptables service iptables status #安装iptables yum install -y ipt ...

  5. Linux 结构化命令

    if -then 语句 if -then 语句有如下格式 if command then commands f i bash shell 的if语句会先运行if后面的那个命令,如果改命令的退出状态码是 ...

  6. Centos7 通配符HTTPS证书申请 实测 笔记

    环境: 免费通配符HTTPS证书网址: https://letsencrypt.org/ 1.下载证书申请工具 [root@centos ~]# mkdir /opt/letsencrypt -p [ ...

  7. selenium python 设置窗口打开大小

    1. 窗口最大化 1 driver.maximize_window() 2. 设置窗口大小 1 driver.set_window_size(1920,1080) #分辨率1920 x 1080

  8. 【二代示波器教程】第14章 uCOS-III操作系统版本二代示波器实现

    第14章      uCOS-III操作系统版本二代示波器实现 本章教程为大家讲解uCOS-III操作系统版本的二代示波器实现.主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任 ...

  9. 微服务架构-选择Spring Cloud,放弃Dubbo

    Spring Cloud 在国内中小型公司能用起来吗?从 2016 年初一直到现在,我们在这条路上已经走了一年多. 在使用 Spring Cloud 之前,我们对微服务实践是没有太多的体会和经验的.从 ...

  10. 【从零开始搭建自己的.NET Core Api框架】(四)实战!带你半个小时实现接口的JWT授权验证

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...