提交并自动添加所有未跟踪的文件

时间:2013-04-21 04:36:15

标签: git

我经常忘记我有一些新文件直接做,

git commit -a -m "My commit message"

这只提交更改的文件,我必须在新提交中添加剩余的文件。这意味着有两个单独的提交,但逻辑上它们是同一任务的一部分。

我知道通过两个连续命令在提交中包含未跟踪文件的最简单方法:

git add -A
git commit -a -m "My commit message"

是否可以在一个命令中获得与上述相同的效果?

5 个答案:

答案 0 :(得分:15)

在执行路径中创建一个名为(无扩展名)的文件:git-add-commit-untracked

把它放进去:

#!/bin/bash
message=${0}
git add -A
git commit -am "$message"

然后: git-add-commit-untracked "Commit message"

您可以为文件使用较短的名称。为了说明的目的,我把它留了很长时间。

答案 1 :(得分:10)

您可以定义别名以在提交之前添加所有内容。只需将这些行放入〜/ .gitconfig文件中:

[alias]
        ca = !sh -c 'git add -A && git commit -m \"$1\"' -

然后使用这样的别名:

$ git ca 'Your commit message'

答案 2 :(得分:8)

以下是一些选项:

  • 使用git commit --amend,这样在添加未跟踪文件后最终只能进行一次提交(但如果您已经推送了之前的提交,则不会这样做);
  • 使用git commit --interactive;
  • 创建自动添加新文件的别名或脚本(其他答案中的示例)。以下是我用于此目的的两个别名:

    [alias]
        untracked = ls-files --other --exclude-standard
        add-untracked = !git add $(git untracked)
    
  • 使用git rebase -igit reset <commit prior to first commit>git commitgit merge --squash将您的两次提交压缩到另一个分支上。

但是,您不能使用别名覆盖内置命令(例如commit),因此您仍然需要记住在提交之前将所需的文件添加到索引中

不幸的是,您也无法指定路径git commit -a;我刚试过git commit -a $(git untracked)并告诉我fatal: Paths with -a does not make sense.所以要回答你的基本问题,我认为git脚本是唯一的非互动方式。

答案 3 :(得分:0)

使用默认的git界面是不可能的。但是,git支持别名

使用别名,可以调用不同的git命令,甚至可以运行任意shell脚本。创建一个包含这两个命令的脚本,并将其别名。

有关别名的详情,请参阅the wiki,针对此特定情况,请参阅this question

编辑:请注意,这不是一个好主意。您可能会错误地添加不必要的文件,或者由于树中没有版本化的文件而导致无用的别名。

答案 4 :(得分:0)

是的,过去我和你一样有同样的问题。我更喜欢使用git命令,但是我遇到了很大的麻烦,因为rails中的guard没有警告地改变了很多文件:)

所以现在,每当我提交新代码时,我都会尝试使用UI来执行此操作(git gui)并记住永远不要使用git commit -a因为您不确定哪些文件被修改了! 重新定义新代码后,请gitk查看git树,以便了解持续的承诺,提交者,提交文件等。