📚
handbook
  • Introduction
  • 1.前言
    • 前言
    • 鸣谢
  • 2.环境篇
    • 工具部署和使用
      • 团队协作工具
        • Confluence
      • 开发工具
        • Docker
          • 镜像导入导出
          • 安装
        • Docker Compose
      • 持续集成工具
        • Gerrit
        • Sonarqube
          • 分析参数设定
          • Prerequisite
          • 服务端设置
        • Ubuntu Ci Deploy
          • ubuntu使用docker部署jenkins+sonarqube
        • 持续集成部署
      • 文本编辑工具
        • Gitbook相关注意事项
        • Markdown快速入门
      • 版本控制
        • Git
          • 1.基础
            • Git基础(一)
            • Git基础(二)
            • Git基础(三)
            • Git基础(四)
            • Git基础(五)
          • 2.命令详解
            • 命令速查
          • 3.进阶技巧
            • git技巧
      • 自动化测试工具
        • Appium
          • capability参数配置
          • 安装
          • 简介
      • 项目管理工具
        • Jira
    • 开发环境配置
      • 通用
        • Homebrew安装与使用
        • Git服务器添加SSH Key
        • koroFileHeader使用
        • nodejs与npm的安装
        • npm更换国内源
        • pip使用相关
        • PostgreSQL安装与使用
        • proxychain安装与使用
        • shell配置环境变量
        • snapd安装与使用
        • terminal走代理
    • 快捷键速查
      • shell常用快捷键
  • 3.语言篇
    • C
      • 代码规范
      • 语言技巧
    • Cpp
      • 代码规范
      • 基础知识
        • 理解C++中的左值和右值
      • 语言技巧
        • 并发编程
          • 简单的线程池实现
    • Golang
      • 代码规范
        • 避免使用转义字符串
        • 避免参数语义不明确
        • 嵌套式结构体
        • 函数的分组与顺序
        • 函数命名
        • 声明一致性
        • 导入别名
        • 使用字段名初始化结构体
        • 本地变量声明
        • map初始化
        • nil用法
        • 包命名
        • 命名Printf样式的函数
        • 减少嵌套
        • 缩小变量作用域
        • struct引用初始化
        • 测试表声明
        • 顶层变量声明
        • 不必要的else
      • 环境配置
        • 代码检查格式化工具
          • Go Fmt
          • Goimports
          • Golint
          • Go Vet
        • go mod详解
        • golang安装
        • Golang开发环境
        • Troubleshooting
      • 语言技巧
        • 如何分包
    • Java
      • 代码规范
      • 语言技巧
        • 注解编程
        • 动态代理
    • Js
      • 语言技巧
        • Rollup
    • Kotlin
      • 基础知识
        • 写给开发者Kotlin指引(一)
        • 写给开发者Kotlin指引(二)
    • Python
      • 语言技巧
        • Best Practice Of Python S Project Structure
  • 4.规范篇
    • Git message规范
  • 5.技术篇
    • Android技术
      • Hook
        • EdXposed例子
        • Android 10 上安装Magisk和EdXposed
      • Tinker
        • 1.Tinker及其使用
      • 准备
        • ADB连接设备步骤及注意事项
        • adb连接设备
        • aosp编译
      • 基础
        • Binder接口调用的鉴权方法
        • Make 及 Android 编译系统介绍
        • 使用Content Provider为其他应用提供数据
      • 源码阅读
        • Framework源码分析 Looper Handler
        • Framework源码分析 启动流程 ServiceManager的初始化
        • Framework源码分析 启动流程 Zygote启动SystemServer
    • JS Bridge
      • JSBridge初探
    • Kernel技术
      • kallsyms子系统
    • Test技术
      • 软件测试
        • jnekin+sonar 部署 问题总结
        • 性能测试基础
        • 软件测试的背景
        • 测试基础
        • 测试人员的核心竞争力
    • 操作系统原理
      • 处理器如何实现原子操作
Powered by GitBook
On this page
  • 一、删除不再追踪的内容
  • 二、挪动文件的位置或者为文件重命名
  • 三、总结

Was this helpful?

  1. 2.环境篇
  2. 工具部署和使用
  3. 版本控制
  4. Git
  5. 1.基础

Git基础(四)

本节将给出几个重构项目时常用的Git命令。

一、删除不再追踪的内容

当我们需要在项目中删除某个文件,你可以手动删除并将修改再添加到暂存区。 看一个例子,首先在项目中创建一个文件并提交。

➜  git_test git:(master) touch test_rm.md
➜  git_test git:(master) ✗ git add test_rm.md
➜  git_test git:(master) ✗ git commit -m "first commit"
[master (root-commit) cab6745] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test_rm.md
➜  git_test git:(master) git status
On branch master
nothing to commit, working tree clean
➜  git_test git:(master) ls
test_rm.md

然后我们使用rm命令删除,再看看当前项目的状态:

➜  git_test git:(master) rm test_rm.md
➜  git_test git:(master) ✗ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    deleted:    test_rm.md

no changes added to commit (use "git add" and/or "git commit -a")

可以看到,当rm命令执行后,修改发生在工作区,此时你还可以使用git restore <file>来将工作区的修改恢复。接下来我们使用git rm <file>,然后再来看看效果。

➜  git_test git:(master) git rm test_rm.md
rm 'test_rm.md'
➜  git_test git:(master) ✗ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    deleted:    test_rm.md

可以看到,让我们使用git rm之后,修改被直接添加到了暂存区。实际上,git rm就相当于:

rm <file>
git add <file>

二、挪动文件的位置或者为文件重命名

当需要挪动文件位置或者重命名某个文件时,你可以使用mv命令手动移动后再将修改添加到暂存区。

来看一个例子,我们将test_mv.md挪到test文件夹下。

➜  git_test git:(master) ✗ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    deleted:    test_mv.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    test/

no changes added to commit (use "git add" and/or "git commit -a")

修改被添加到了工作区,还需要手动将修改添加到暂存区,这和前面的rm类似。接下来使用git mv命令,再看看效果,先把之前的修改恢复吧。

➜  git_test git:(master) ✗ git restore test_mv.md
➜  git_test git:(master) ✗ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
    test/

nothing added to commit but untracked files present (use "git add" to track)

可以看到,尽管test_mv.md已经被恢复到了原目录下,但是这时我们仍在存在Untracked的test文件夹,看看里面的内容。

➜  git_test git:(master) ✗ ls test
test_mv.md

被mv进来的文件还在!看来git并没有为我们执行类似于un-mv的操作,这很好理解,因为前面执行mv之后,使用git status查看的结果是显示test_mv.md文件被删除了。原因是test_mv.md被重命名为test/test_mv.md,git直追踪了test_mv.md而并没有追踪test/test_mv.md,所以git经过推断,得出该文件已经被删除的结论。

如果使用git mv,效果是什么呢?

➜  git_test git:(master) git mv test_mv.md test_mv_new.md
➜  git_test git:(master) ✗ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    renamed:    test_mv.md -> test_mv_new.md

可以看到,git直接将修改添加到了暂存区,而且推断出这是一次重命名。实际上,该命令就相当于:

mv test_mv.md test_mv_new.md
git add -A

三、总结

当需要重命名或者删除一些文件时,使用git rm和git mv可以减少我们的操作次数。

PreviousGit基础(三)NextGit基础(五)

Last updated 4 years ago

Was this helpful?