Git中commit命令的确切含义是什么?

3

提交(commit)是指对文件(或一组文件)所做的个别更改。这就像保存文件一样,但是使用Git时,每次保存都会创建一个唯一的ID(也称为“SHA”或“哈希”),使您可以记录何时、由谁进行了哪些更改。提交通常包含提交消息,这是对所做更改的简要描述。

在Git和GitHub中,“commit”具体意义是什么,我不理解。

注意:这不是任何问题的重复,我已经清楚了git push


2
“Commit(提交)”就像是你整个项目的保存或快照。 - Arya McCarthy
2
可能是“git commit”和“git push”的区别是什么?的重复问题。 - Arya McCarthy
1
如果我在编辑器中按 ctrl + s,那么提交的必要性是什么? - Pratik pound
1
使用git,a)它将所有文件作为一个组进行跟踪,b)它是分布式的。您和多个人可以在多台计算机上处理相同的文件集。 - Arya McCarthy
5个回答

10

在您修改代码后,您需要进行“commit”操作。

Commit操作会记录您所做的更改。此外,它还保存了代码的修订版本,您可以随时一键将代码还原到任何版本。

这个过程的完美例子就像一棵树。源树是更为精确的例子。这将是解释源树上git branch的最佳方式:

Git Sourcetree

每次提交都是“主分支”上的一个点,主分支就像树干一样。您可以在树上添加一个分支,并仅在此分支上添加更多提交。更改后,您可以将更改合并到主分支中。因此,总之,git用作代码版本管理器。它知道如何处理冲突并将几个不同的版本组合成一个版本。这是比较两个不同代码版本(提交)的屏幕截图。

comparing two different commits on PhpStorm IDE

希望我帮到了你 :)

2

提交(commit)是git中的一种“对象”,用于标识和指定提交时分支的“快照(snapshot)”。

一个对象(object)是存储在.git/objects下的文件。

例如:对象e6f53bc19b182fed6cd580329747f93393504389是存储在.git/objects/e6/f53bc19b182fed6cd580329747f93393504389下的文件。

如果该对象是一个提交(commit),它记录了其他对象,这些对象共同指定了提交的“快照”。

通常,在提交中记录的“其他对象”只有两个 - 当前提交的父提交和指定实际文件的“树(tree)”对象。

您可以这样检查一个对象:

$ git cat-file -p e6f53bc19b182fed6cd580329747f93393504389
tree 7cb95c95270b3f28a3cb6e2107f89dc7e950d93e
parent 507dbda38d769e8c69b3701cbd21a40b3a39206e
author xx <xx@xx.com> 1578053251 +0000
committer xx <xx@xx.com> 1578053251 +0000

my big commit message here!

就是这样。提交是一个存储在.git/objects中指定快照的文件。它包含对父提交和树对象的一个或多个引用。

有3种类型的'git对象'

提交对象:包含对提交对象和树对象的引用

树对象:包含对'blob'对象和树对象的引用

blob对象:包含文件内容,一个blob对象通常代表一个完整的文件。


2
提交是对软件开发者而言,就像关卡对游戏玩家一样重要。
在视频游戏中,你可以有许多关卡(或保存文件)。当某些事情出了大问题时,你可以加载以前的一个关卡并从那里继续。
假设你正在试图修复一个错误并更改了一些代码行。如果你意识到你的更改没有起作用并破坏了代码的某些其他部分,你可以恢复到之前已知工作正确的提交,并尝试另一种解决方案。一旦你有了一个可行的解决方案,你可以创建一个新的提交,这给你一个新的回退点,而不必担心失去你的进度。
过一段时间,你将拥有代码中所有更改的历史记录,由一系列提交表示,告诉你:
- 更改是关于什么的 - 谁做出了更改 - 更改是何时进行的 - 唯一的提交标识符
一个提交历史的例子:

example of a commit history

一个提交的示例:

example of a commit


0

(是的,这是一个老问题。但为了帮助网络搜索者...)

可能会引起混淆的一个可能点是,在git术语中,“commit”既是名词又是动词。从它的词汇表中可以看出:

作为名词:Git历史记录中的单个点;整个项目的历史记录表示为一组相互关联的提交。单词“commit”在Git中经常用于其他版本控制系统使用“revision”或“version”的地方。也用作提交对象的简写。

作为动词:将项目状态的新快照存储到Git历史记录中,通过创建代表索引当前状态的新提交并将HEAD推进到指向新提交来完成。

(请参见https://git-scm.com/docs/gitglossary


0

git commit 命令会捕获项目当前暂存的更改快照。提交的快照可以被视为项目的“安全”版本——除非你明确要求,否则 Git 永远不会更改它们。在执行 git commit 命令之前,需要使用 git add 命令将更改推广或“暂存”到将存储在提交中的项目中。这两个命令 git commit 和 git add 是最常用的两个命令之一。


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