我经常忘记我有一些新文件直接做,
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"
您可以使用文件的较短名称.为了说明的目的,我把它留了很长时间.
小智 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)
以下是一些选项:
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脚本将是唯一的非交互方式.
使用默认界面是不可能的git
。但是,git
支持别名。
使用别名,可以调用不同的 git 命令,甚至运行任意 shell 脚本。创建一个包含这两个命令的脚本,并为其指定别名。
有关别名的更多信息,请参阅wiki ,以及针对此特定场景的此问题。
编辑:请注意,这不是一个好主意。您最终可能会错误地添加不必要的文件,或者由于树中的非版本化文件而产生无用的别名。