我经常忘记我有一些新文件并直接做,
git commit -a -m "My commit message"
这只会提交更改的文件,我必须在新提交中添加剩余的文件。这意味着有两个单独的提交,尽管从逻辑上讲它们是同一任务的一部分。
我知道通过两个连续命令在提交中包含未跟踪文件的最简单方法:
git add -A
git commit -a -m "My commit message"
是否可以在一个命令中产生与上述相同的效果?
我经常忘记我有一些新文件并直接做,
git commit -a -m "My commit message"
这只会提交更改的文件,我必须在新提交中添加剩余的文件。这意味着有两个单独的提交,尽管从逻辑上讲它们是同一任务的一部分。
我知道通过两个连续命令在提交中包含未跟踪文件的最简单方法:
git add -A
git commit -a -m "My commit message"
是否可以在一个命令中产生与上述相同的效果?
在您的执行路径中创建一个名为(无扩展名)的文件:git-add-commit-untracked
把这个放进去:
#!/bin/bash
message=${0}
git add -A
git commit -am "$message"
然后:
git-add-commit-untracked "Commit message"
不过,您可以为文件使用较短的名称。为了说明的目的,我把它写得很长。
You can define an alias to add all before commit. Just put this lines into your ~/.gitconfig file :
[alias]
ca = !sh -c 'git add -A && git commit -m \"$1\"' -
Then use your alias like this :
$ git ca 'Your commit message'
这里有几个选项:
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 脚本将是唯一的非交互式方式。
是的,我以前也遇到过和你一样的问题。我更喜欢使用 git 命令,但我遇到了很大的麻烦,因为 rails 中的守卫在没有警报的情况下更改了许多文件 :)
所以现在,每当我提交新代码时,我都会尝试使用 UI 来执行此操作(git gui)并记住永远不要使用git commit -a
,因为您不确定哪些文件被修改了!在 rebase 新代码之后,请您gitk
查看 git 树,这样您就可以知道最后的承诺、提交者、提交文件等。