我经常忘记我有一些新文件直接做,
git commit -a -m "My commit message"
这只提交更改的文件,我必须在新提交中添加剩余的文件。这意味着有两个单独的提交,但逻辑上它们是同一任务的一部分。
我知道通过两个连续命令在提交中包含未跟踪文件的最简单方法:
git add -A
git commit -a -m "My commit message"
是否可以在一个命令中获得与上述相同的效果?
答案 0 :(得分:15)
在执行路径中创建一个名为(无扩展名)的文件:git-add-commit-untracked
把它放进去:
#!/bin/bash
message=${0}
git add -A
git commit -am "$message"
然后:
git-add-commit-untracked "Commit message"
您可以为文件使用较短的名称。为了说明的目的,我把它留了很长时间。
答案 1 :(得分:10)
您可以定义别名以在提交之前添加所有内容。只需将这些行放入〜/ .gitconfig文件中:
[alias]
ca = !sh -c 'git add -A && git commit -m \"$1\"' -
然后使用这样的别名:
$ git ca 'Your commit message'
答案 2 :(得分: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脚本是唯一的非互动方式。
答案 3 :(得分:0)
使用默认的git
界面是不可能的。但是,git
支持别名。
使用别名,可以调用不同的git命令,甚至可以运行任意shell脚本。创建一个包含这两个命令的脚本,并将其别名。
有关别名的详情,请参阅the wiki,针对此特定情况,请参阅this question。
编辑:请注意,这不是一个好主意。您可能会错误地添加不必要的文件,或者由于树中没有版本化的文件而导致无用的别名。
答案 4 :(得分:0)
是的,过去我和你一样有同样的问题。我更喜欢使用git命令,但是我遇到了很大的麻烦,因为rails中的guard没有警告地改变了很多文件:)
所以现在,每当我提交新代码时,我都会尝试使用UI来执行此操作(git gui)并记住永远不要使用git commit -a
因为您不确定哪些文件被修改了!
重新定义新代码后,请gitk
查看git树,以便了解持续的承诺,提交者,提交文件等。