防止git提交未进行提交的文件

时间:2018-01-24 04:31:08

标签: git

我的存储库中有一个包含大量文件的文件夹。 如果我对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

它将包含我在存储库中的所有文件夹中提交的所有文件。我希望只提交我在当前文件夹中提交的文件,或者匹配我可以在命令行中指定的某些模式

3 个答案:

答案 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-onlydue to Ben Jackson。)

pathspec语法是quite intricate,甚至可以覆盖&#34;这个目录,但不包括子目录&#34; . :\!*/*或(在较新版本中):^*/*的案例。我们仍然需要做一些脚本编写,因为它不支持过滤,并且在HEAD和索引&#34;之间有所不同。

答案 1 :(得分:1)

只需删除.

即可
git commit
git commit -m "ABC."

From the docs

git commit [args] [file]

在您的命令中,.被解释为表示当前目录中的所有内容,因此您将在提交之前暂存所有未暂存的文件。

答案 2 :(得分:1)

  

我希望只提交我在现有文件夹中提交的文件,或者匹配我可以在命令行中指定的某些模式

您需要git stash push a/path才能保存索引和工作树:pathspec can used a pattern

一旦您想要提交的内容被隐藏起来,索引中剩余的内容将通过简单的git commit提交。

最后,git stash pop将恢复您的工作树和索引状态。