我发现在将更改的文件添加到索引时编写完整路径非常繁琐。例如,我已经更改了3个文件,但只想提交2个文件:
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: apps/frontend/config/modules/file1
# modified: apps/frontend/config/modules/file2
# modified: apps/frontend/config/modules/file3
所以我必须打字:
git add app/frontend/modules/file1 app/frontend/modules/file3
我正在寻找一种通过git状态列表中的索引添加项目的方法?像
这样的东西git add %1 %3
答案 0 :(得分:4)
使用interactive
添加:
git add -i
如果你想将它添加到提交中,它会询问你每个文件。
您甚至可以根据补丁进行选择,这总是很有用:
git add -p
答案 1 :(得分:2)
cd apps/frontend/config/modules
git add file1 file3
cd - #go back
答案 2 :(得分:2)
您也可以使用shell扩展:
git add app/frontend/modules/file{1,3}
答案 3 :(得分:1)
我一直在使用我写的类似脚本来添加1个文件,例如git nadd N
添加第N个修改过的文件。它不应该很难修改它以允许多个文件。
#!/bin/bash
if [[ $# != 1 ]] ; then
echo "usage: git nadd <index>"
exit 0
fi
num=$1
# get unstaged modified files
modified_files=$(git status --porcelain | grep " M " | cut -c 4-)
if [[ $modified_files == "" ]] ; then
echo "error: there are no modified files"
exit 1
fi
# count how many we have
num_modified_files=$(echo "$modified_files" | wc -l)
if [[ $num -gt $num_modified_files ]] ; then
echo "error: index larger than number of modified files"
exit 2
fi
# pick n'th modified file
file=$(echo "$modified_files" | sed -n "$num p")
# fix $file to full path in case we're not in root
root=$(git rev-parse --show-cdup)
file=$root$file
git add -- "$file"