很多时候,对于一个大的文件,可能有的同学改完之后不想一次提交,想分批提交。但这个时候由于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. Javascript 面向对象编程(一):封装 by 阮一峰

    <Javascript高级程序设计(第二版)>(Professional JavaScript for Web Developers, 2nd Edition) 它们都是非常优秀的Java ...

  2. HDU 1495 非常可乐 BFS 搜索

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...

  3. 【动态规划】Vijos P1121 马拦过河卒

    题目链接: https://vijos.org/p/1616 题目大意: 卒从(0,0)走到(n,m),只能向下或向右,不能被马一步碰到或走到马,有几种走法. 题目思路: [动态规划] 把马控制的地方 ...

  4. [已解决问题] An error occurred while automatically activating bundle com.android.ide.eclipse.adt

    可以参见stackoverflow的解决方案:http://stackoverflow.com/questions/16974349/an-error-occurred-while-automatic ...

  5. zoj 2836 容斥原理

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2836 #include <cstdio> #incl ...

  6. Java 单元测试Junit

    @Test @Before @After 测试方法运行前执行Before动作(比如创建资源),运行后执行After动作(比如销毁资源) @BeforeClass @AfterClass 测试类运行前执 ...

  7. 【转】AngularJs $location获取url参数

    // 带#号的url,看?号的url,见下面 url = http://qiaole.sinaapp.com?#name=cccccc $location.absUrl(); // http://qi ...

  8. 你应该知道的8个Java牛人

    简单介绍一下8个Java牛人,他们为Java社区,创建了框架(framework),产品或者是写书,影响甚至改变了Java开发的方法 8.Tomcat创始人 James Duncan Davidson ...

  9. linux 防火墙 iptables实例讲解

    端口为例): 显示现有规则: iptables –L -n 清空现有规则表: iptables -F 黑名单:先允许所有数据包通过,后逐条添加黑名单规则. iptables –A INPUT–p tc ...

  10. 计数dp-hdu-4054-Number String

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4055 题目大意: 给一个只含‘I','D','?'三种字符的字符串,I表示当前数字大于前面的数字,D ...