In git you can, for a commit, add only parts of a file. for that you'll need to use the –interactive option :

git add --interactive

or

git add -i

once you've typed this command, you'll get :

> git add -i staged unstaged path 1: unchanged +2/-0 README 2: unchanged +4/-0 index.html *** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp What now>

there, you'll have many options, but two really matter for you : to patch (add parts of the files for the commit) and to quit (to leave the interactive add).

So, let's patch :

What now> p staged unstaged path 1: unchanged +2/-0 [R]EADME 2: unchanged +4/-0 [i]ndex.html Patch update>>

Now we have to choose the files we need to add :

Patch update>> 2 staged unstaged path 1: unchanged +2/-0 [R]EADME * 2: unchanged +4/-0 [i]ndex.html Patch update>>

All the files with a star (*) at the left of the number will be processed.

To select the files, you have many possibilities:

#: Select the file number #</li>

-#: Unselect the file number #</li>

*: Select all files</li>

#-#: Select an interval of files</li>

#-: Select the files from the # to the last</li>

Of course, all those notations can be mixed, for example, if you have 10 files changed, you can select this :

Patch update>> 1 3-6 8-

Which will select the 1, 3, 4, 5, 6, 8, 9 and 10

When you've selected the files you want, press enter.

if you want to do pick diffs in all the files, you can do:

git add -p

which is the same as doing:

git add --interactive p (for patch) * (choose all the files)

From now, you will be asked for each diff of each file if you want to add it, with many possible answers :

diff --git a/index.html b/index.html index e574d0d..057bf2d 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,10 @@ <html> <head> + <script type="text/javascript"> + alert('Hello world'); + </script> </head> <body> + <h1>title</h1> </body> </html> Stage this hunk [y,n,q,a,d,/,s,e,?]?

The more important are :

y : yes</li>

n : no</li>

s : split, if the current diff can be splited in few smaller diffs</li>

e : edit, to edit yourself the diff</li>

q : to quit</li>

When you're done, in a git status, you will see your files, both in added files and in modified files :

> git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: index.html # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: README # modified: index.html #

And if it's ok for you, you can commit what you've added.