在我正在学习的Git教程中,git commit用于存储您所做的更改。
那么,git push是用来干什么的?
- 您也可以查看"Git作弊表",它帮助我了解了很多概念:ndpsoftware.com/git-craitsheet.html
- 那个骗子太棒了!谢谢分享。
- 在我点击它之前以为它是坏的,很好。
- 这是另一个备忘表:atlassian.com/git/tutorials/atlassian-git-crashsheet
基本上,git commit是"记录对存储库的更改",而git push是"更新远程引用和相关对象"。因此,第一个用于连接本地存储库,而第二个用于与远程存储库交互。
下面是奥利弗·斯蒂尔的一张很好的图片,它解释了Git模型和命令:
。
在gitready.com上阅读更多关于git push和git pull的内容(我首先提到的文章)
- 这是一个很好的图形,很容易理解。
- 以下是原始来源:ostele.com/archives/2008/05/my-git-workflow,以及git工作流的另一张图片
- 啊,这很有道理,非常感谢!如果我可以的话,在我正在做的短训中,作者让我觉得设置Github完全是可选的,但随后开始使用GitPush。是否使用推送发送到GitHub,如果这是您设置的?
- @本:是的,当GitHub是您的远程存储库时,一个push将发送到GitHub—有关使GitHub成为远程存储库的信息,请参阅:github.com/guides/…
- @BenGithub不过是一个解决方案,可以在云上托管您的公众,供git push使用。实际上,git push的目的地可以是任何git存储库。它可以位于您自己的本地硬盘驱动器上的另一个目录(例如git remote add clone ~/proj/clone.git; git push clone master或git push ~/proj/clone.git master中),也可以位于您自己的主机服务的Git存储库中。
- 一个很好的图形,便于理解。
- 我想你会称之为永恒的答案。谢谢。
- 所以…你需要先推还是先承诺?
- @piet它从您的工作区开始,在这里您可以修改文件。然后将它们添加到索引中,提交到本地存储库,最后将它们推送到远程存储库中。
- 为什么推送和提交是分离的?当我承诺某件事时,我总是同时推动它。所以,为什么我需要两个分开?注意:我知道commit在本地工作,push在远程工作。还有其他原因或用法吗?
- 所以,当我在文本编辑器中编辑文件时,我不会更改本地存储库中的文件,对吗?那么本地存储库文件存储在哪里?
- @当你没有远程存储库时,推送是没有用的。所以分离是有意义的。但也可能有不止一个远程收回-所以你必须多次推。
- @VLA可以查看stackoverflow.com/questions/3082445/Git在哪里存储fil‌&8203;es…基本上,它们存储在一个名为.git的隐藏子文件夹中。
- @一个命令仍然足够。如果存在远程回购,此命令将推送它。如果没有远程提交。第二个是没用的。对于多个repo,一个命令仍然足够。例如:git push repo1 repo2….我可以用一个命令把他们都推过来。
- 那么,我应该是Commit, Pull, Push, Sync还是Pull, Sync, Commit, Push?
- @当我在本地更改文件时,它是我的本地存储库,对吗?当我进入.git时,你的意思是在.git中,我们有一些我正在编辑的文件的其他副本吗?当我说提交时,这些文件.git会被工作区文件重写?请告诉我。
- @Tanascius是否可以从场景中删除本地存储库,并直接将更改提交到远程存储库?
- @海德先生不,那是不可能的。作为分布式版本控制的Git需要有一个本地副本。
- @Tanascius在这个问题上做些什么:stackoverflow.com/questions/38291364/…
- push是否意味着该库的新版本发布?
- @greenmatt链接不再可用。你可以换一个吗?谢谢
- @Mehrdadscocomputer:嗯?不知道你指的是哪个链接,但我在这里的唯一评论没有包含任何链接。你是想把这个告诉别人吗?
- @绿马特行动。我真的很抱歉。我本应该指示那个职位的老板(坦纳修斯)
- @格林马特:我更正了链接-现在又开始工作了
- git push是否自动将代码推送到我当前的功能分支,或者我是否必须手动输入git push origin branch?
- @tanascius的原始源链接已断开,以下是当前的源链接:blog.ostele.com/2008/05/my-git-workflow
- 谢谢你的回答。它帮助我得到更好的理解。这篇文章还帮助我更好地理解了其他git命令的工作方式。
- 什么是工作区,什么是本地存储库????我以为这是一样的,我在Github上的回购是我的远程回购……!
- 要完全理解Git观看这个高级对话youtube.com/watch?V=1FBJ4SVUB4
提交:向本地存储库添加更改
push:将最后一次提交传输到远程服务器
- 又矮又甜。有时候得到一个简短的答案比得到一个详细的答案要好。
好吧,基本上git commit将您的更改放入本地repo,而git push将您的更改发送到远程位置。
- 这是我使用Git的第二天。当我看上面的答案时,我仍然没有得到一个清晰的图片,但你的答案只是把它钉住了。谢谢。
- git push是否上传实际更新的文件或某些特殊的"diff"文件?
由于Git是一个分布式版本控制系统,不同之处在于commit将把更改提交到本地存储库,而push将更改推送到远程repo。
git push用于将您在本地存储库上所做的承诺添加到远程存储库中-与git pull一起,它允许人们协作。
提交:存储库的快照变更集历史记录版本"另存为"。git repository=提交的序列(树)。
本地存储库:计算机上的存储库。
远程存储库:服务器上的存储库(如github.com)。
git commit:向本地存储库添加新的提交(最后提交+阶段性更改)。
git push、git 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命令add和commit的使用。我的典型项目日志文件可能如下所示:
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 add和git 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。
- 有些人可能想用力推而不是拉。这取决于情况。事实上,如果你在一个分支上重新进行了承诺,而你没有与其他人共享(甚至在远程回购上),那么拉肯定不是你想要做的。