很多时候,对于一个大的文件,可能有的同学改完之后不想一次提交,想分批提交。但这个时候由于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. python对拍程序

    import sys; import random; import os; gen=open("data.in","w"); #///生成测试数据 gen.cl ...

  2. Linux Shell编程(2)——第一个shell程序

    在最简单的情况下,脚本程序不过是存储在一个文件里的系统命令列表.这至少让你执行它 时不必重新按顺序键入相同功能的命令序列.一个清空/var/log目录下的日志文件的脚本 # Cleanup # 必须以 ...

  3. (转载)用PHP正则表达式清除字符串的空白

    (转载)http://www.chinaz.com/program/2009/0220/67569.shtml 我们经常会处理来自用户输入或从数据库中读取的数据,可能在你的字符串中有多余的空白或制表符 ...

  4. 贪心 BZOJ 3671:[Noi2014]随机数生成器

    Description   Input 第 1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 ...

  5. Subsets —— LeetCode

    Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must ...

  6. HDOJ 1214 圆桌会议

    Problem Description HDU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问题时,他们就会围坐在一张圆形的桌子旁进行交流,经过大家的讨论后一 ...

  7. [Locked] Longest Substring with At Most Two Distinct Characters

    Longest Substring with At Most Two Distinct Characters Given a string, find the length of the longes ...

  8. JUnit basic annotation

    一个标准的Junit 4的运行流程,大致如下:测试类实例化 -> @BeforeClass -> @Before -> @Test -> @After -> @After ...

  9. Spring MVC返回对象JSON

    @RestController 用于返回对象,会自动格式化为JSON     @RequestMapping("/user2")     public User2 user2(Mo ...

  10. Collections之sort、reverse

    在使用List集合时,通常情况下希望从集合中得到的对象是按照一定顺序排列的,但是List集合的默认排序方式为按照对象的插入顺序,可以通过java.util.Collections类的静态方法sort( ...