“git commit”和“git push”有什么区别?

What are the differences between “git commit” and “git push”?

在我正在学习的Git教程中,git commit用于存储您所做的更改。

那么,git push是用来干什么的?


基本上,git commit是"记录对存储库的更改",而git push是"更新远程引用和相关对象"。因此,第一个用于连接本地存储库,而第二个用于与远程存储库交互。

下面是奥利弗·斯蒂尔的一张很好的图片,它解释了Git模型和命令:

Git data transport commands

在gitready.com上阅读更多关于git pushgit pull的内容(我首先提到的文章)


提交:向本地存储库添加更改

push:将最后一次提交传输到远程服务器


好吧,基本上git commit将您的更改放入本地repo,而git push将您的更改发送到远程位置。


由于Git是一个分布式版本控制系统,不同之处在于commit将把更改提交到本地存储库,而push将更改推送到远程repo。


git push用于将您在本地存储库上所做的承诺添加到远程存储库中-与git pull一起,它允许人们协作。


提交:存储库的快照变更集历史记录版本"另存为"。git repository=提交的序列(树)。

本地存储库:计算机上的存储库。

远程存储库:服务器上的存储库(如github.com)。

git commit:向本地存储库添加新的提交(最后提交+阶段性更改)。

git pushgit pull:将本地存储库与其关联的远程存储库同步。push应用从本地到远程的更改,pull应用从远程到本地的更改。


git commit记录您对本地存储库的更改。

git push使用本地更改更新远程存储库。


需要注意的三点:

1)工作目录-----我们的代码文件所在的文件夹

2)本地存储库------这在我们的系统中。当我们第一次提交命令,然后创建本地存储库。在我们的工作目录所在的地方,创建checkit(.git)文件。之后,当我们承诺的时候,这将存储我们在工作目录文件中所做的更改本地存储库(.git)

3)远程存储库-----它位于系统外部,就像服务器上一样。位于世界上任何地方。就像Github。当我们发出推送命令时,从本地编码存储库存储到此远程存储库


只想增加以下几点:

在您提交之前,您不能推送,因为我们使用git push将您本地分支上的提交推送到远程存储库。

git push命令有两个参数:

远程名称,例如,origin。分支名称,例如,master

例如:

1
2
git push  <REMOTENAME> <BRANCHNAME>
git push  origin       master

一个非常粗糙的类比:如果我们将git commit与保存编辑过的文件进行比较,那么git push将把该文件复制到另一个位置。

请不要将这个类比从上下文中去掉——提交和推送与保存编辑过的文件并复制文件没有什么不同。也就是说,它应该只用于比较。


如果您设想在Github上的存储库中维护一个日志文件,那么更容易理解git命令addcommit的使用。我的典型项目日志文件可能如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---------------- Day 1 --------------------
Message: Completed Task A
Index of files changed: File1, File2

Message: Completed Task B
Index of files changed: File2, File3
-------------------------------------------

---------------- Day 2 --------------------
Message: Corrected typos
Index of files changed: File3, File1
-------------------------------------------
...
...
...and so on

我通常从一个git pull请求开始一天,然后以一个git push请求结束一天。所以一天记录中的每一件事都对应于它们之间发生的事情。每天,我都要完成一个或多个逻辑任务,这些任务需要更改一些文件。在该任务期间编辑的文件列在索引中。

每个子任务(这里的任务A和任务B)都是单独的提交。git add命令将文件添加到"文件索引已更改"列表中。这一过程也被称为阶段化,在现实中记录更改的文件和执行的更改。git commit命令记录/完成更改和相应的索引列表,以及一条可供以后参考的自定义消息。

记住,您仍然只更改存储库的本地副本,而不是GitHub上的副本。在此之后,只有在执行git push操作时,才能将所有记录的更改连同每个提交的索引文件一起登录到主存储库(GitHub上)。

例如,要获得该虚拟日志文件中的第二个条目,我会这样做:

1
2
3
4
5
6
git pull
# Make changes to File3 and File4
git add File3 File4
# Verify changes, run tests etc..
git commit -m 'Corrected typos'
git push

简而言之,git addgit commit允许您将对主存储库的更改分解为系统的逻辑子更改。正如其他答案和评论所指出的,它们当然还有更多的用途。然而,这是最常见的用法之一,也是Git背后的驱动原理,它是一个多阶段修订控制系统,与其他流行的系统(如SVN)不同。


git commit只是正式保存我们的更改,对于我们提供commit消息的每个commit,一旦我们完成了承诺,我们就可以把它推到远程,在全球范围内看到我们的变化。

这意味着我们可以在推送到远程之前完成许多提交(我们可以看到提交的列表以及消息)。Git使用提交ID(40位代码)保存每个提交

只有当我想在遥控器中看到我的更改时,我才使用git push(在这里,我将检查我的代码是否在Jenkins中有效)


在外行术语中,git commit是在git push运行它们之前的步骤,以便成功地将文件GitHub。


好吧,基本上git commit将您的更改放入本地repo,而git push将您的更改发送到远程位置。由于Git是一个分布式版本控制系统,不同之处在于commit将把更改提交到本地存储库,而push将更改推送到远程repo。

来源:谷歌

http://gitref.org/basic/这个链接也很有用

https://git-scm.com/docs/git-commit


git commit将提交在本地回购中暂存的文件。git push是将本地主分支与远程主分支快速合并。但合并并不总是成功的。如果出现拒绝,您必须执行pull,以便成功执行git push