【问题标题】:Git command to commit all changes including files removed or createdGit 命令提交所有更改,包括删除或创建的文件
【发布时间】:2013-12-15 17:39:18
【问题描述】:

git 已跟踪的文件进行更改后,我通常会这样做:

git commit -a -m "a message describing what you did"

紧随其后

git push origin master

提交然后将所有更改推送到我的 Github 帐户。但是,第一个命令不适用于提交添加或删除的文件。为此,我必须先输入:

git add -A

这里提到:How to commit and push all changes, including deletes?

在另一个问题Git commit all files using single command 中,接受的答案表明应用 full 提交的唯一方法(即:包括添加或删除的文件,而不仅仅是编辑)然后推送是通过组合像这样使用&& 命令:

git add -A && git commit

在我的情况下看起来像:

git add -A && git commit -a -m "a message describing what you did" && git push origin master

现在的问题是:这个大命令是否正确?有没有办法创建一个新的git 命令来同时应用这三个命令?此外:是推荐还是不鼓励这种命令合并?如果有,请说明原因。


编辑

我立即后悔这个决定:Edit last pushed commit's message

【问题讨论】:

  • 如果您总是添加所有文件,请确保 .gitignore 保持最新。
  • 我发现这个线程的正确答案非常有用,所以我很高兴你问了错误的问题,得到了那个问题的正确答案,想出了如何做你想做的事真的打算这样做,那么其他人会不断地从原始问题的答案中受益。我喜欢堆栈溢出
  • 重复How can I stage and commit all files, including newly added files, using a single command?,说明在你已经完成git add -A之后就不需要提交-a选项了。

标签: git github


【解决方案1】:

在我看来是正确的。

您可以通过执行为命令创建别名

git config --global alias.commitall '!func(){ git add -A && git commit -am "$1" && git push origin HEAD; }; func'

然后您可以通过输入提交所有更改

git commitall "a message describing what you did"

【讨论】:

  • 我也遇到了这个命令的问题。它失败了:Expansion of alias 'commitall' failed; '!func(){' is not a git command。我做错了什么?
  • @Gabriel @Stoic 的版本似乎缺少引号。这条线对我有用:acp = "!f(){ git add -A && git commit -am \"$1\" && git push origin master; };f"(还不能评论他的回答)
  • 感谢 Jacob,修改后的版本现在可以使用了。也感谢您指出 Stoic 版本中的错误。
  • 自我注意:此命令适用于所有分支(不仅仅是主分支):git config --global alias.commitall '!func(){ git add -A && git commit -am "$1" && git push origin; }; func'。注意origin 后面缺少master。否则你会得到“一切都是最新的”问题,(见:stackoverflow.com/a/2936751/1391441
  • @joeybaruch 不错。我已经更新了我的答案以推送到当前分支。
【解决方案2】:

是的。那个大命令实际上是正确的。它将允许您在 repo 的给定目录中提交所有内容,包括新创建的/未跟踪的文件。

是的,你可以像这样创建一个新的git 命令(实际上是一个别名):

[alias]
acp = "!f(){ git add -A && git commit -am "$1" && git push origin master; };f"

上面的别名必须在你的全局 git 配置中(~/.gitconfig)标记为[alias] 的部分下。现在,您可以编写如下内容:git acp <message> 来运行上述命令。

绝对推荐合并命令,这是 *nix 提供的强大功能。但是,在当前情况下,请确保您确实希望在一个步骤中执行所有这些操作。 Git 假定您希望有选择地添加更改。

【讨论】:

  • 我将上面的命令复制/粘贴到我的~/gitconfig 文件中,但运行它会返回错误:f(){ git add -A && git commit -am $1 && git push origin master: 1: f(){ git add -A && git commit -am $1 && git push origin master: Syntax error: end of file unexpected (expecting "}")
  • 看来我的回答错过了引号。已更新答案。
【解决方案3】:

最近我写了一个git-powercommit 脚本,它在 Git 存储库中提交所有更改。当前它会忽略已删除/创建的文件,但添加此功能应该不难。另一方面,它确实支持涉及 stash/pull/push 的丰富工作流程,并且还处理子模块。

【讨论】:

    【解决方案4】:

    如果您对一次又一次地输入三行感到不舒服,您也可以使用 GUI 工具。 http://www.git-scm.com/downloads/guis 顺便说一句,正如“Stonic”所说,你总是可以创建一个新的 git 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多