VS Code 中 Commit、Commit Staged 和 Commit All 的区别

Posted

技术标签:

【中文标题】VS Code 中 Commit、Commit Staged 和 Commit All 的区别【英文标题】:Differences between Commit, Commit Staged, and Commit All in VS Code 【发布时间】:2021-11-01 11:48:47 【问题描述】:

在 Visual Studio Code 中有三个 Git 提交命令:

提交 提交分阶段 全部提交

它们之间有什么区别?

我希望 Commit Staged 可以作为常规的git commit 命令使用。

我也发现了Commit All commits unstaged and untracked files。 (类似于Commit All in the “classic” Visual Studio。)

但是,Commit 做了什么,它与上面的两个命令有何不同?

很遗憾,我没有找到任何关于此的文档或网页。 (我对 git pullgit fetchcommit – amendcommit – signed off 之间的区别不感兴趣,正如大多数搜索所暗示的那样——所有这些都记录得很好. Commit 命令在德文文章Visual Studio Code (7): Git als Quellcodeverwaltung einsetzen 的综合列表中也缺少,例如)

【问题讨论】:

我猜这是不同插件提供的相同的东西。卸载插件,看看会发生什么,然后一一重新安装。 @fredrik 在没有安装扩展的情况下会发生这种情况(你的意思是扩展,不是吗?)。 【参考方案1】:

我通过 git 日志窗口 观察了 VS Code 的行为,发现commitcommit all 选项都记录了git add -A -- .,所以结果是一样的。

> git add -A -- .
> git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file -
> git status -z -u
> git symbolic-ref --short HEAD
> git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track) refs/heads/master refs/remotes/master
> git for-each-ref --sort -committerdate --format %(refname) %(objectname) %(*objectname)
> git remote --verbose
> git config --get commit.template
> git ls-tree -l HEAD -- /home/antonio/tmp/vscode/f9
> git show --textconv HEAD:f9
> git status -z -u
> git symbolic-ref --short HEAD
> git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track) refs/heads/master refs/remotes/master
> git for-each-ref --sort -committerdate --format %(refname) %(objectname) %(*objectname)
> git remote --verbose
> git config --get commit.template

在我看来这可能是一个错误!

【讨论】:

【参考方案2】:

我尝试从我的 VS Code 实例运行“提交”,它提示我一条消息:

没有要提交的分阶段更改。 您想暂存所有更改并直接提交吗?

[从不] [取消] [总是] [是]

所以我的猜测是:它只是一个检查您的本地配置或以交互方式询问您要做什么的命令。 最后,它应用“提交暂存”或“全部提交”。

【讨论】:

如果你发出 Commit StagedCommit All 没有任何阶段(以及选项 Git: Suggest Smart Commit i> 启用)… 嗯,注意到了。无论如何,我不是 VSCode 的 git GUI 方面的专家。

以上是关于VS Code 中 Commit、Commit Staged 和 Commit All 的区别的主要内容,如果未能解决你的问题,请参考以下文章

Git:添加vs push vs commit

Python mysql executemany() and commit vs many execute() and commit

Entitymanager.flush() VS EntityManager.getTransaction().commit - 我应该更喜欢啥?

SVN提交时报错:Commit blocked by pre-commit hook (exit code 1) with no output.

VS Code - 节点断点未绑定

VS Code:文件末尾新行不持久