No git você pode, para um commit, adicionar apenas partes de um arquivo. para isso, você precisará usar a opção –interactive:
git add --interactive
ou
git add -i
depois de digitar este comando, você obterá:
> 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>
lá, você terá muitas opções, mas duas realmente importam para você: corrigir (adicionar partes dos arquivos para o commit) e sair (para sair do add interativo).
Então, vamos corrigir:
What now> p
staged unstaged path
1: unchanged +2/-0 [R]EADME
2: unchanged +4/-0 [i]ndex.html
Patch update>>
Agora temos que escolher os arquivos que precisamos adicionar:
Patch update>> 2
staged unstaged path
1: unchanged +2/-0 [R]EADME
* 2: unchanged +4/-0 [i]ndex.html
Patch update>>
Todos os arquivos com uma estrela (*) à esquerda do número serão processados.
Para selecionar os arquivos, você tem muitas possibilidades:
- #: Selecione o número do arquivo # </li>
- – #: desmarque o número do arquivo # </li>
- *: Selecione todos os arquivos </li>
- # – #: Selecione um intervalo de arquivos </li>
- # -: Selecione os arquivos do # ao último </li>
Claro, todas essas notações podem ser misturadas, por exemplo, se você tiver 10 arquivos alterados, você pode selecionar isto:
Patch update>> 1 3-6 8-
Que irá selecionar o 1, 3, 4, 5, 6, 8, 9 e 10
Depois de selecionar os arquivos desejados, pressione Enter.
se você quiser escolher diffs em todos os arquivos, você pode fazer: git add -p
que é o mesmo que fazer:
git add --interactive
p (for patch)
* (choose all the files)
A partir de agora, você será questionado sobre cada diff de cada arquivo se quiser adicioná-lo, com muitas respostas possíveis:
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,?]?
Os mais importantes são:
- s: sim </li>
- n: não </li>
- s: split, se o diff atual pode ser dividido em alguns diffs menores </li>
- e: editar, para editar você mesmo o diff </li>
- q: para sair </li>
Quando terminar, em um status git, você verá seus arquivos, tanto em arquivos adicionados quanto em arquivos modificados:
> 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
#
E se estiver tudo bem para você, você pode enviar o que adicionou.