提交并自动添加所有未跟踪的文件
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 -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 脚本将是唯一的非交互方式。
【讨论】:
不管这有多有用,它确实回答了不同的问题然后作者问了。 @gorn 我不确定你认为被问到了什么问题,但这个答案提供了几个选项,并且还参考了其他答案。 问题很明确“是否有可能在一个命令中达到与上面一样的效果?”,所以基本上“如何在一个命令中完成整个动作,避免不添加一些错误文件”,这个答案解决了“错误发生后如何修复后果”。我认为这会让新手感到困惑,这就是我在这里发表评论的原因。 @gorn 有时,答案是“不”,或者“尝试不同的方法”。【参考方案5】:您可以定义一个别名以在提交前添加所有内容。只需将此行放入您的 ~/.gitconfig 文件中:
[alias]
ca = !sh -c 'git add -A && git commit -m \"$1\"' -
然后像这样使用你的别名:
$ git ca 'Your commit message'
【讨论】:
这个。绝对完美。以上是关于提交并自动添加所有未跟踪的文件的主要内容,如果未能解决你的问题,请参考以下文章