是否可以跳过暂存区并将未被追踪的新文件提交到Git?

13

是否有可能在单个内置命令行命令中跳过暂存区并提交未跟踪的新文件到git?如果没有,有哪些替代方法?

http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository

提供 -a 选项给 git commit 命令会让 Git 自动将所有已被追踪的文件暂存,然后再进行提交,从而省略了 git add 步骤:
$ git commit -a -m 'added new benchmarks'。谢谢。

您也可以在commit之后的命令行中指定文件名。 - Richard
@Richard 这不会提交未被跟踪的文件。你将会收到错误信息 did not match any file(s) known to git - Klas Mellbourn
4个回答

20

使用单个内置的命令行命令来完成吗?不可以。

使用两个命令:

git add -A
git commit

使用自定义别名:

将以下内容添加到.gitconfig文件中:

[alias]
   commituntracked = "!git add -A; git commit"

那么你可以这样做

git commituntracked

我可以友好地问一下如何扩展自定义别名以包括(“变量”)提交消息吗?谢谢! - nutty about natty
取决于您正在运行的操作系统。这个问题有一些很好的例子https://dev59.com/4HA75IYBdhLWcg3wYYBQ - Klas Mellbourn
Linux。抱歉,但我(至少乍一看)似乎无法将该链接上的示例串在一起并应用于此处,以便包括git提交消息。我能否只添加“-m”以给出“git commituntracked -m“some message””? - nutty about natty
1
是的,像您的示例git commituntracked -m"some message"那样在别名之后添加参数会与我建议的别名一起运行。 - Klas Mellbourn
请注意,从技术上讲,我建议的命令并没有真正地跳过暂存区。这些未跟踪的文件将成为已跟踪状态并通过正常的暂存区。我理解你的问题是想尽可能少的使用命令,最好只用一个命令提交一个未跟踪的文件。 - Klas Mellbourn
2
我更喜欢使用 && 而不是 ;,这样如果 (不知何故) add 失败了,你就不会继续执行 commit - Richard

3

对于高手来说这似乎是微不足道的,但对我来说却是一个小启示(我承认)-至少我现在第一次使用它,并且它可以正常工作(没有自定义别名):只需使用分号;,它就可以作为单行运行:

git add --all; git commit -m“一些有用的提交信息”


2
是的。至少有两种主要方法可以实现这一点。首先,您不必使用“暂存区”,您可以拥有任意数量的暂存区 - 设置并随心所欲地进行操作;其次,您可以直接构建提交。这甚至不难。
Git的仓库核心处理blob、tree和commit对象(此处也不太相关,注释和带注释的标签)。转储对象的git命令是git cat-file -p
blob只是一个无序的位袋。使用git hash-object -wfilename将其添加到存储库中,它将在该文件中打印blob的真实名称,并将blob添加到存储库中。树将对象与文件系统名称绑定。使用git mktree将其添加到存储库中;要查看要输入的内容,请使用例如git cat-file -p HEAD^{tree}打印树。使用git commit-tree将提交添加到存储库中,基本上,您说git commit-tree -pmom-pdad sometree,设置一些环境变量,并在stdin上提供提交消息。
那就是所有必需的了;如果您想深入研究树和暂存的切片和切块,read-treewrite-tree可能非常有用,如果您对此有兴趣,则git核心教程是一个很好的概述。

0
使用下面的命令可以跳过暂存区,直接从工作目录提交。
git commit -a

请注意,您仍然需要添加新的未跟踪文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接