"git commit" 和 "git push" 有什么不同?

1004
在我正在学习的 Git 教程中,git commit 用于存储您所做的更改。
那么 git push 用于什么呢?

94
你也可以查看这份“Git备忘单”,它帮助我很好地理解概念: http://ndpsoftware.com/git-cheatsheet.html - adriendenat
2
这是另一张速查表:https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet - Kellen Stuart
11
已有答案提供,无需回答。只是一个观察。在我看来,“commit”应该被称为“保存”,而“push”应该被称为“提交”。这是经典的命名场景问题。 - dublinx
@dublinx - 我会把“push”命令称为“上传”,因为你将文件上传到远程仓库,而且大家都知道“上传”这个词 :) - Gabriel
@dublinx - 我会把“push”命令称为“上传”,因为你把文件上传到远程仓库,而且大家都知道“上传”这个词 :) - undefined
15个回答

5
一个非常简单的比喻:如果我们将git commit比作保存编辑后的文件,那么git push就像是将该文件复制到另一个位置。
请不要将此比喻超出上下文范围--提交和推送并不完全像保存编辑后的文件和复制它。尽管如此,为了比较而言,这个比喻应该成立。

1

如果你想象在GitHub上维护一个日志文件,那么理解Git命令addcommit的使用就会更容易。

对我来说,一个典型项目的日志文件可能如下所示:

---------------- 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命令和速查表此处


0

Git commit 就是正式保存我们的更改。每次提交时,我们都会给出提交消息,完成提交后,我们可以将其推送到远程以全局查看我们的更改。

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

我只有在想要在远程中查看我的更改时才使用 Git push(此后,我将检查我的代码是否在 Jenkins 中工作)。


-3

git commit 是将已经暂存的文件提交到本地仓库。 git push 是将本地主分支与远程主分支进行快进式合并。但是合并并不总是成功的。如果出现拒绝,您必须执行pull以便您可以成功地git push


有些人可能想要强制推送而不是拉取。这取决于情况。实际上,如果你在一个分支上重新设置提交记录,而这个分支并没有与其他人共享(甚至是在远程仓库),那么拉取肯定不是你想做的事情。 - user456814

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