有效地将项添加到git索引

时间:2010-12-28 14:19:02

标签: git bash

我发现在将更改的文件添加到索引时编写完整路径非常繁琐。例如,我已经更改了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

4 个答案:

答案 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"