63

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

git commit -a -m "My commit message"

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

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

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

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

4

5 回答 5

22

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

把这个放进去:

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

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

不过,您可以为文件使用较短的名称。为了说明的目的,我把它写得很长。

于 2013-04-21T04:47:37.363 回答
18

You can define an alias to add all before commit. Just put this lines into your ~/.gitconfig file :

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

Then use your alias like this :

$ git ca 'Your commit message'
于 2014-03-24T22:21:20.280 回答
8

这里有几个选项:

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

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

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

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

于 2013-04-21T05:22:51.213 回答
0

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

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

有关别名的更多信息,请参阅wiki ,以及针对此特定场景的这个问题。

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

于 2013-04-21T04:43:29.017 回答
0

是的,我以前也遇到过和你一样的问题。我更喜欢使用 git 命令,但我遇到了很大的麻烦,因为 rails 中的守卫在没有警报的情况下更改了许多文件 :)

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

于 2013-04-21T05:11:55.543 回答