我的存储库中有一个包含大量文件的文件夹。 如果我对20个文件进行了更改,并且需要提交这些文件(比如说这样的话)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: SWIFT/db/add_sub_2lh.tdf
deleted: SWIFT/db/add_sub_ape.tdf
deleted: SWIFT/db/add_sub_bmb.tdf
deleted: SWIFT/db/add_sub_kka.tdf
deleted: SWIFT/db/cmpr_e7g.tdf
deleted: SWIFT/db/mult_6ct.v
deleted: SWIFT/db/prev_cmp_swift.qmsg
deleted: SWIFT/db/swift.(0).cnf.cdb
deleted: SWIFT/db/swift.(10).cnf.cdb
deleted: SWIFT/db/swift.(10).cnf.hdb
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: SWIFT/altpll_50M.bsf
modified: SWIFT/altpll_50M.cmp
modified: SWIFT/altpll_50M.qip
modified: SWIFT/altpll_50M.v
modified: SWIFT/altpll_50M/altpll_50M_0002.v
modified: SWIFT/altpll_50M_sim/mentor/msim_setup.tcl
modified: SWIFT/altpll_50M_sim/synopsys/vcs/vcs_setup.sh
modified: SWIFT/altpll_50M_sim/synopsys/vcsmx/vcsmx_setup.sh
modified: SWIFT/greybox_tmp/cbx_args.txt
modified: SWIFT/output_files/swift.flow.rpt
我想要做的只是提交暂存用于提交的文件。我不希望提交“未提交的更改”。 但是当我跑步时
git commit .
我看到我的所有更改都包含在提交中。
如果我使用-m选项,我需要提供文件名,我不太热衷于这样做,因为文件名都不同,我的工作流程中有实例,文件可能各种各样嵌套文件夹
[编辑]
如果我只使用
git commit
它将包含我在存储库中的所有文件夹中提交的所有文件。我希望只提交我在当前文件夹中提交的文件,或者匹配我可以在命令行中指定的某些模式
答案 0 :(得分:3)
假设文件数量适合单个命令行(并且文件名中没有通配符,因为git commit
将再次考虑它们),
git diff -z --cached --name-only SWIFT/greybox_tmp '*.cdb' |\
xargs -0 git commit -m "..."
将提交目录SWIFT/greybox_tmp
中所有文件的暂存版本,或其名称以.cdb
结尾。 (--cached --name-only
是due to Ben Jackson。)
pathspec语法是quite intricate,甚至可以覆盖&#34;这个目录,但不包括子目录&#34; . :\!*/*
或(在较新版本中):^*/*
的案例。我们仍然需要做一些脚本编写,因为它不支持过滤,并且在HEAD
和索引&#34;之间有所不同。
答案 1 :(得分:1)
只需删除.
git commit
git commit -m "ABC."
git commit [args] [file]
在您的命令中,.
被解释为表示当前目录中的所有内容,因此您将在提交之前暂存所有未暂存的文件。
答案 2 :(得分:1)
我希望只提交我在现有文件夹中提交的文件,或者匹配我可以在命令行中指定的某些模式
您需要git stash push a/path
才能保存索引和工作树:pathspec can used a pattern。
一旦您想要提交的内容被隐藏起来,索引中剩余的内容将通过简单的git commit
提交。
最后,git stash pop将恢复您的工作树和索引状态。