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


895

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

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


83
您还可以查看“ Git速查表”,它对
adriendenat 2013年


2
没有答案,因为已经提供了。只是一个观察。在我看来,一次提交实际上应称为保存,而将推送称为提交。经典命名方案问题。
dublinx

Answers:


1618

基本上,git commit将更改记录记录到存储库中 ”,而git push与关联对象一起更新远程引用 ”。因此,第一个用于与本地存储库关联,而第二个则用于与远程存储库进行交互。

这是Oliver Steele的漂亮图片,解释了git模型和命令:

Git数据传输命令

了解更多关于git pushgit pullGitReady.com(我称之为第一的文章)


20
这是原始来源:osteele.com/archives/2008/05/my-git-workflow和另一张git工作流程的图片
tanascius 2010年

9
@ben github只是托管您可以使用的公共“云”存储库的一种解决方案git push。实际上,的目标git push可以是任何 git存储库。它可以在其他目录(你自己的本地硬盘上git remote add clone ~/proj/clone.git; git push clone mastergit push ~/proj/clone.git master,例如),或者你的一个Git仓库自己的主机服务。
圣诞老人

2
所以...您需要先推还是先提交?
Kokodoko

5
@Piet它始于您的工作空间,您可以在其中修改文件。然后您将它们添加到索引中,它们提交到本地库-终于-他们推到远程仓库
tanascius

2
@海德先生,不行。Git作为分布式版本控件,需要您具有本地副本。
tanascius

215

commit:将更改添加到本地存储库

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


56

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


9
这是我第二天使用GIT。当我看上面的答案时,我仍然不清楚,但是您的答案就可以了。谢谢。
Bopha

1
是否git push上传实际的更新文件或某些特殊的“ diff”文件?
multigoodverse

27

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


26

由于git是分布式版本控制系统,因此区别在于commit会将更改提交到本地存储库,而push会将更改推到远程存储库。


19

提交快照| 变更集| 历史记录| 版本| 存储库的“另存为”。Git仓库= 提交系列(树)。

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

远程存储库:服务器上的存储库(Github)。

git commit:向本地存储库追加新的提交(最后的提交 + 分阶段的修改)。(所有提交都存储在中)/.git

git pushgit pull:同步的本地资源库及其相关的 远程存储库。push-将更改从本地应用远程pull-将更改从远程应用本地


11

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

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


20
您的答案基本上与此答案相同,它没有添加任何新内容。

7

需要注意的三件事:

1)工作目录 -----存放我们代码文件的文件夹

2)本地存储库 ------这在我们的系统内部。当我们第一次执行COMMIT命令时,将创建此本地存储库。在工作目录所在的位置,
创建Checkit(.git)文件。
之后,一旦我们提交,它将把我们在工作目录文件中所做的更改存储到本地存储库(.git)

3)远程存储库 -----它位于我们系统的外部,就像在世界任何地方的服务器上一样。像github。当我们执行PUSH命令时,本地存储库中的代码将存储到此远程存储库中


7

只想添加以下几点:

除非您提交,否则Yon不会推送,因为我们git push习惯将在本地分支上所做的提交推送到远程存储库。

git push命令带有两个参数:

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

例如:

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

4

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

请不要在这种情况下使用此类比喻-提交和推送与保存已编辑的文件并复制它完全不同。就是说,为了比较起见,应该保留它。


1

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

---------------- 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上)上。

例如,要获得该假想日志文件中的第二个条目,我将完成以下操作:

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。


0

git commit只不过是正式保存更改,对于提交的每条提交消息,一旦完成提交,我们便可以将其推送到远程以全局查看更改

这意味着我们可以在推送到远程之前进行多次提交(我们可以看到发生的提交列表和消息)。git使用提交ID(40位代码)保存每个提交

并且仅当我想查看远程更改时才使用git push(之后,我将检查我的代码是否在jenkins中有效)


-1

好吧,基本上git commit会将您的更改放入本地存储库,而git push将您的更改发送到远程位置。由于git是一个分布式版本控制系统,因此区别在于commit会将更改提交到本地存储库,而push会将更改推到远程存储库

来源Google

http://gitref.org/basic/此链接也将非常有用

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


此答案将单词的其他答案复制到一个单词中。
Jeffery Opoku-Mensah,2017年

它并没有给以前已经说过的一切带来新的东西……
hublo

-1

用外行的话来说,这git commitgit push您按照顺序成功运行文件到github 之前的步骤。


-2

git commit是提交在本地存储库中暂存的文件。git push是将本地端的master分支与远程master分支快速合并。但是合并并不会总是成功。如果出现拒绝,您必须pull这样做才能成功git push


有些人可能想用力推而不是拉。这取决于实际情况。实际上,如果您基于不与其他人共享的分支(即使是在远程仓库上)来提交提交,则绝对不是您想要执行的操作。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.