2015-09-10 3 views
3

позволяет сказать, что я статус GIT и получитьGit на измененные файлы в порядке, указанном

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: file1 
    modified: file2 
    modified: file3 

no changes added to commit (use "git add" and/or "git commit -a") 

До сих пор при выборе файлов для фиксации я напечатал (или средняя кнопка мыши нажата)

git add file2 
git add file3 

Есть ли более короткий способ добавления по заказу? Как

git add 2,3 

добавить file2 и file3? Это также относится и к git reset, git diff и т.д.

Я понимаю, в этом простом случае я мог

git add . 
git reset file1 

для достижения того же эффекта, но я вопросительно больше, чем просто несколько измененных файлов с очень длинным путем имена;

modified: very/very/long/path/to/file1 
modified: an/even/longer/path/to/file2 
modified: a/much/much/longer/path/to/file3 
modified: path/to/file4  
modified: different/path/to/file5 
+2

Попробуйте использовать 'git add -i', а затем укажите опцию 4. –

ответ

3

git add работы с рисунком, так что вы можете сделать git add file[23] добавить только те 2 файла, его до вас, после того, как определить, какие шаблоны использовать

на Mac OS, на моем репо, здесь серия шага, которые работают

[email protected]:~/project/examples/gitadd$ git status 
On branch master 

Initial commit 

nothing to commit (create/copy files and use "git add" to track) 
[email protected]:~/project/examples/gitadd$ touch file1 file2 file3 
[email protected]:~/project/examples/gitadd$ git status 
On branch master 

Initial commit 

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

    file1 
    file2 
    file3 

nothing added to commit but untracked files present (use "git add" to track) 
[email protected]:~/project/examples/gitadd$ git add file[23] 
[email protected]:~/project/examples/gitadd$ git status 
On branch master 

Initial commit 

Changes to be committed: 
    (use "git rm --cached <file>..." to unstage) 

    new file: file2 
    new file: file3 

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

    file1 

[email protected]:~/project/examples/gitadd$ ll 
total 0 
drwxr-xr-x 6 fhenri staff 204 10 sep 12:48 . 
drwxr-xr-x 10 fhenri staff 340 10 sep 12:45 .. 
drwxr-xr-x 10 fhenri staff 340 10 sep 12:48 .git 
-rw-r--r-- 1 fhenri staff 0 10 sep 12:48 file1 
-rw-r--r-- 1 fhenri staff 0 10 sep 12:48 file2 
-rw-r--r-- 1 fhenri staff 0 10 sep 12:48 file3 
[email protected]:~/project/examples/gitadd$ 

Если у вас есть каталоги и подкаталоги, он может также работать

[email protected]:~/project/examples/gitadd$ ls -R 
afolder file1 file2 file3 folder yfolder 

./afolder: 
file1 

./folder: 
file2 

./yfolder: 
subfolder 

./yfolder/subfolder: 
file3 
[email protected]:~/project/examples/gitadd$ git add \*file[23] 
[email protected]:~/project/examples/gitadd$ git status 
On branch master 

Initial commit 

Changes to be committed: 
    (use "git rm --cached <file>..." to unstage) 

    new file: file2 
    new file: file3 
    new file: folder/file2 
    new file: yfolder/subfolder/file3 

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

    afolder/ 
    file1 
+0

В запятой будет добавлен файл с именем 'file ', правильный шаблон будет' file [23] '(а также обратите внимание, что если вы не процитируете шаблон, то он расширяется оболочкой, а не Git). –

+0

гул, не уверен в bash, но на mac os file [2,3] работает –

+2

Да, это работает, но это означает «добавить файлы, соответствующие файлам file2 или' file »или' file3', что не является чем-то вы хотите, вам нужно только 'file2' или' file3'. Группа '[2,3]' не означает «2 или 3» означает «2 или запятая или 3» –

1

Попробуйте это:

git add file1 file2 file3 

Не забудьте отделить каждый файл с пробелом.

+0

Если вы используете инструмент git-cola, вам просто нужно выбрать файлы, которые вы хотите зафиксировать, введите сообщение фиксации и нажмите кнопку отправки. –

1

Что вы хотите, это возможно, например. используя скрипт (или эквивалентную функцию оболочки):

#!/bin/sh 
git status \ 
    | awk 'BEGIN { indices[0]=0; split("'"$1"'", indices, ","); } $1=="modified:" { ++count ; for (i in indices) if (indices[i] == count) print $2 }' \ 
    | xargs echo git add 

Это позволит запустить git add 1,2 добавить первый и второй измененные файлы.

Но, вероятно, лучше найти другое решение.

Когда мне нужно добавлять файлы с длинными именами, я просто запускаю git status и выбираю каждое имя файла, дважды щелкая мышью и вставляя его в команду git add с помощью средней кнопки мыши.

Другим вариантом является запуск git add -p, который будет интерактивно добавлять каждое изменение в каждом измененном файле:

$ git add -p 
diff --git a/foo, b/foo, 
index e69de29..8b13789 100644 
--- a/foo, 
+++ b/foo, 
@@ -0,0 +1 @@ 
+ 
Stage this hunk [y,n,q,a,d,/,e,?]? 

Если вы наберете a это добавит все изменения из файла и перейти к следующему файлу. Если вы наберете d, он не добавит изменений в файл и перейдет к следующему файлу. Поэтому вы можете просто использовать a или d, чтобы добавить или пропустить каждый файл.