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

Lou*_*hys 49 git

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

git commit -a -m "My commit message"
Run Code Online (Sandbox Code Playgroud)

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

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

git add -A
git commit -a -m "My commit message"
Run Code Online (Sandbox Code Playgroud)

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

d_e*_*ier 16

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

把它放进去:

#!/bin/bash
message=${0}
git add -A
git commit -am "$message"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这可以作为git别名更简单.请参阅我的回答:http://stackoverflow.com/questions/16068968/is-it-possible-to-skip-the-staging-area-and-also-commit-untracked-new-files-t/16069173#16069173 (7认同)

小智 12

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

[alias]
        ca = !sh -c 'git add -A && git commit -m \"$1\"' -
Run Code Online (Sandbox Code Playgroud)

然后使用这样的别名:

$ git ca 'Your commit message'
Run Code Online (Sandbox Code Playgroud)


Ric*_*ard 8

以下是一些选项:

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

    [alias]
        untracked = ls-files --other --exclude-standard
        add-untracked = !git add $(git untracked)
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用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脚本将是唯一的非交互方式.

  • 无论这是有用的,它*确实回答了不同的问题*然后auhor已经问过. (4认同)

sle*_*ica 0

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

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

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

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