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

Posted

技术标签:

【中文标题】提交并自动添加所有未跟踪的文件【英文标题】:Commit and automatically add all untracked files 【发布时间】:2013-04-14 05:28:20 【问题描述】:

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

git commit -a -m "My commit message"

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

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

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

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

【问题讨论】:

添加未跟踪文件后,为什么不 git commit --amend 上一次提交? git add -A 在手册页中有此消息:If no <pathspec> is given, the current version of Git defaults to "."; in other words, update all files in the current directory and its subdirectories. This default will change in a future version of Git, hence the form without <pathspec> should not be used. 你可以随时使用git add -A && git commit -a -m "my message" 【参考方案1】:

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

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

有关别名的详细信息,请参阅the wiki,有关此特定场景的信息,请参阅this question。

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

【讨论】:

【参考方案2】:

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

把这个放进去:

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

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

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

【讨论】:

这可以作为 git 别名更简单地完成。在这里查看我的答案:***.com/questions/16068968/… git add -A 本身很有用【参考方案3】:

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

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

【讨论】:

【参考方案4】:

这里有几个选项:

使用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 脚本将是唯一的非交互方式。

【讨论】:

不管这有多有用,它确实回答了不同的问题然后作者问了。 @gorn 我不确定你认为被问到了什么问题,但这个答案提供了几个选项,并且还参考了其他答案。 问题很明确“是否有可能在一个命令中达到与上面一样的效果?”,所以基本上“如何在一个命令中完成整个动作,避免不添加一些错误文件”,这个答案解决了“错误发生后如何修复后果”。我认为这会让新手感到困惑,这就是我在这里发表评论的原因。 @gorn 有时,答案是“不”,或者“尝试不同的方法”。【参考方案5】:

您可以定义一个别名以在提交前添加所有内容。只需将此行放入您的 ~/.gitconfig 文件中:

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

然后像这样使用你的别名:

$ git ca 'Your commit message'

【讨论】:

这个。绝对完美。

以上是关于提交并自动添加所有未跟踪的文件的主要内容,如果未能解决你的问题,请参考以下文章

Git添加所有修改,删除和未跟踪的文件?

git 仅添加修改过的更改并忽略未跟踪的文件

git 仅添加修改过的更改并忽略未跟踪的文件

用于一次性添加(不提交)所有新文件的 Git 命令 [重复]

Git:没有添加到提交但存在未跟踪的文件

如何在 Git 上添加未跟踪的文件?