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

    题意:   为了追求ACM比赛的公平性,所有用作ACM比赛的电脑性能是一样的,而ACM董事会专门有一条生产线来生产这样的电脑,随着比赛规模的越来越大,生产线的生产能力不能满足需要,所以说ACM董事会想 ...

  2. HDU 5410 CRB and His Birthday

    题目大意: 一个人要去买礼物,有M元.有N种礼物,每件礼物的价值是Wi, 你第i件礼物买k个 是可以得到 Ai * k + Bi 个糖果的. 问怎么才能使得你得到的糖果数目最多.   其实就是完全背包 ...

  3. 数据结构(块状链表):COGS 1689. [HNOI2010]Bounce 弹飞绵羊

    时间限制:1 s   内存限制:259 MB [题目描述] 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地 ...

  4. 转载:c++ sort用法

    sort函数使用模板: sort包含在头文件algorithm中 sort(start,end,排序方法) 1.在没有排序方法时是默认从小到大的排列,例 #include<iostream> ...

  5. Linux下动态库的使用

    1.生成动态库: gcc -fPIC -shared -o libdemo.so demo.c 考虑程式库major的升级会破坏兼容性:而minior的升级则可能不会,一般建议用以下方式来生成动态库. ...

  6. HDOJ(HDU) 2178 猜数字(题意有点难理解、、、)

    Problem Description A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" . 问B猜n次可以猜到的最大数. ...

  7. SRM 399(1-250pt)

    DIV1 250pt 题意:给出一个size不超过50的数组a和整数n,求x,y,z使得|n - x*y*z|最小,且x,y,z均不再数组a中.若有多组xyz使得|n-x*y*z|最小,输出字典序最小 ...

  8. getting start with storm 翻译 第八章 part-1

    转载请注明出处:http://blog.csdn.net/lonelytrooper/article/details/12434915 第八章 事务性Topologies 在Storm中,正如本书前边 ...

  9. 使用JAVA与SmartFoxServer来实现游戏服务器概述

    SmartFoxServer 是专门为Adobe Flash设计的跨平台socket服务器,让开发者高效地开发多人应用及游戏. 该服务器主要用来创建多玩家游戏.并提供强大的制作工具,各种回合制游戏和实 ...

  10. Angular过滤器 自定义及使用方法

    首先设置自定义过滤器. 定义模块名:angular .module('myApp') .filter('filterName',function(){ return function(要过滤的对象,参 ...