很多时候,对于一个大的文件,可能有的同学改完之后不想一次提交,想分批提交。但这个时候由于git add的机制往往add之后就是整个一个文件被放到stage区了,这个时候肯定会想能不能对一个文件可以进行分开的快区域提交概念呢?

答案其实是有的,就是

git add -p [filename]

filename为可选操作,如果不指定,git就会对所有的unstage文件进行一次遍历。

那么如何使用呢?

比如我们一个文件a.txt的内容如下

hello
world

此时我将a.txt的内容改成了

hello

此时运行git diff可以看到如下

+
hello
-world
+

这个时候问题来了,我想先提交”把2222222增加“的提交,然后再提交”删除world,然后再”增加1111111新行“的提交怎么做呢?

首先进行命令

git add -p

它会提示你输入什么命令,有

State this hunk? [y,n,q,a,d,/,s,e,?]?

具体的命令同学可以自己去查,在这里我们输入'e'进入手动选择模式

出现了如下内容

# Manual hunk edit mode -- see bottom for a quick guide
@@ -, +, @@
+
hello
-world
+
# ---
# To remove '-' lines, make them ' ' lines (context).
# To remove '+' lines, delete them.
# Lines starting with # will be removed.
#
# If the patch applies cleanly, the edited hunk will immediately be
# marked for staging. If it does not apply cleanly, you will be given
# an opportunity to edit again. If all lines of the hunk are removed,
# then the edit is aborted and the hunk is left unchanged.

终于到了这一步,好了,英文好的同学可以看提示操作,不会的你只要知道我总结的两条原则就行

 对于增加的内容(+),如果你在这个提交中不想放进去,就把整行删除
对于减去的内容(-),如果你在这个提交中不想删除,就把前面的‘-’删除,替换为一个空格

那么,按照我们之前的逻辑就应该改成这样

@@ -, +, @@
hello
world
+

这个时候wq,此时你输入

git diff --cached

就会和stage区的文件进行diff对比,你可以看到只是简单的22222被加进去了,

这个时候你commit,就完成了仅仅针对增加22222222的补丁形式的提交。

那么接下来就很简单了,按照之前的逻辑进入到git add -p中的e手动模式,变成如下格式即可完成这次的所有需求

原来的是这样

@@ -, +, @@
+
hello
-world

改成这样

@@ -, +, @@
hello
-world

那么,这次的提交就没有包括1111111的增加,只是简单的对world进行删除,最后commit即完成了world的删除,但是此时的1111111还没有加进去。

最后一个提交“111111111111加进去”其实已经很简单了,也不需要再用到git add -p了,只需简单的add和commit,即分别完成了对一个文件所做的三次提交。

参考链接: http://stackoverflow.com/questions/10731269/git-hunk-edit-mode-how-to-remove-a-line

Git对于单个文件的分批提交方式的使用的更多相关文章

  1. 【转载】Git设置单个文件上传大小

    git单个文件默认大小是50M,超过50M,会给出warning.大于100M会无法提交: 可以通过命令,修改单个文件默认大小(以设置500M以例): git config --global http ...

  2. git 恢复单个文件的历史版本

    首先查看该文件的历史版本信息:git log Default@2x.png 记录下需要恢复的commit版本号:如 9aa51d89799716aa68cff3f30c26f8815408e926 恢 ...

  3. git 恢复单个文件

    首先查看该文件的历史版本信息:git log Default@2x.png 记录下需要恢复的commit版本号:如 9aa51d89799716aa68cff3f30c26f8815408e926 恢 ...

  4. Git 合并单个文件

    有两个分支 # git branch -a * branchA branchB remotes/origin/branchC A分支合并B分支单个文件 注意是本地分支,还是远程分支 # git che ...

  5. git回退单个文件

    git原理 Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD. gi ...

  6. git批量删除文件和批量提交

    1. 单个删除文件: ① 通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:(可选操作,可直接执行②删除) $ rm test.txt ② 确实要从版本库中删除该文件,那就用命令git rm ...

  7. GIT 恢复单个文件到历史版本

    首先查看该文件的历史版本信息:git log <file> 恢复该文件到某个历史版本:git reset 版本号 <file> 检出改文件到工作区:git checkout - ...

  8. 【Git版本控制】git将单个文件回退到某一版本

    暂定此文件为a.jsp 1.进入到a.jsp所在目录,通过 git  log a.jsp查看a.jsp的更改记录 2.找到想要回退的版本号:例如 fcd2093 通过 git reset   fcd2 ...

  9. Git查看单个文件修改历史

    1 命令 git log --pretty=oneline  文件名 ➜ admin git:(feature/v1.5.0_20181202_group) git log --pretty=onel ...

随机推荐

  1. 【转】 Android开发之EditText属性详解

    原文网址:http://blog.csdn.net/qq435757399/article/details/7947862 1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: ...

  2. 【图论】【宽搜】【染色】NCPC 2014 A Ades

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1787 题目大意: N个点M条无向边(N,M<=200000),一个节点只能有一个 ...

  3. win7使用USB转串口连接mini2440方法

    不想嚼别人吃剩的馍.我只说我自己是怎么痛苦的连上的. 环境设备: window7笔记本,没有串口,装有XP和Ubuntu2个虚拟机(不是必须的,我只是说明一下我的环境) 友善之臂mini2440(含U ...

  4. bzoj 2245 [SDOI2011]工作安排(最小费用最大流)

    2245: [SDOI2011]工作安排 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1197  Solved: 580[Submit][Statu ...

  5. [C++关键字] 内置类型

    bool, char, short, char16_t (C++11), int, char32_t (C++11), float, long, double,在64位机器上测试各种类型的大小,代码如 ...

  6. sqlserver使用户只能在某个架构下建立表和存储过程

    1.首先,建立一个用户之后,默认的架构是dbo,默认的角色是public.这种情况下,这个用户将看不到dbo以及其他架构下的对象.除非单独进行授权.   2.新建一个架构test,然后使得这个架构的所 ...

  7. android获取apk签名信息

    因为工作需要,需要获取应用的apk传递给新浪微博或者微信去申请授权 所以需要程序内获取签名上传服务器 做法如下:   public static String getAPPSecretString(A ...

  8. 微信小程序开发手册

    目录: 数据绑定 条件渲染 列表渲染 API FAQ: <block wx:for> 和 <view wx:for>的区别 wx:if 什么情况下判断为假 坑列表: 微信版本6 ...

  9. 安装 Panda3D 并使用原有的Python

    Part 1:什么是Panda3D [原始网站] [中文版本] Part 2:注意事项 Panda3D的版本必须与Python相匹配 Part 3:使用已安装的Python 将‘C:\Panda3D- ...

  10. [Unity-24] Unity的四种载入场景的方法

    Unity官方提供了4种载入场景(scene)的方法.各自是: 1. Application.LoadLevel():同步载入 2. Application.LoadLevelAsync():异步载入 ...