Git:添加 vs 推送 vs 提交

158
git add, pushcommit 的区别是什么?
对于从 SVN 转过来的人,可能会有点困惑,因为在 SVN 中,“update” 会“add”一些东西,而“commit”则会推送并添加东西。
git 中有许多不同的功能。希望能从您的经验中得到一些解释。

2
很棒的关于Git的书 - iruediger
9个回答

206
  1. git add 将被修改的文件添加到队列中,以便稍后提交。文件未被提交。

  2. git commit 提交已添加的文件,并创建一个带有日志的新版本...如果您没有添加任何文件,git 将不会提交任何内容。您可以使用 git commit -a 组合这两个操作。

  3. git push 将更改推送到远程存储库。

这张来自Git Cheat Sheet 的图片很好地说明了工作流程

enter image description here

git add 没有在图���中显示,因为建议的提交方式是组合的 git commit -a,但您可以在更改块中心理上添加一个 git add 以理解流程。

最后,push 是一个单独的命令,因为 Git 的哲学。Git 是一种分布式版本控制系统,您的本地工作目录就是您的存储库!您提交的所有更改都会立即反映和记录。只有在您完成所有工作并想要更新远程存储库(可能与他人共享)时,才使用 push。这是一种优雅的方式,在本地保存更改(无需网络开销),仅在需要时更新它,而不是在每次提交时都更新它。这间接导致更轻松的提交/分支等操作(为什么不呢?对您有什么成本吗?),从而导致更多的保存点,而不会干扰存储库。


是先在本地推送提交,然后再推送到远程服务器,还是必须先提交再推送才能将工作推送到远程存储库? - Andrew S
3
首先,您需要提交("git commit"),这将更新您的本地存储库(即在您的本地计算机上)。接下来,您需要将更改推送到服务器("git push"),这将更新远程存储库(例如,在GitHub服务器上)。 - Romain
我希望在Git中有一个“心算”功能! - Junchen Liu
1
建议不仅要经常提交,还要经常推送。这样可以在硬盘崩溃时保护您的工作。 - CCC

116

git add 选择变更内容

git commit 在本地记录变更

git push 分享变更


33
  • git add 命令将文件添加到 Git 索引中,该索引是用于准备提交的对象的暂存区域。
  • git commit 命令将索引中的文件提交到代码仓库中,git commit -a 是一个快捷方式,可先将所有已修改的跟踪文件添加到索引中。
  • git push 命令将所有待处理更改推送到与你分支映射的远程代码仓库(例如在 GitHub 上)。

要理解 Git,您需要投入更多的精力,而不只是浏览文档,但这绝对值得。只是请勿尝试直接将 Git 命令与 Subversion 映射,因为它们大部分没有直接的对应命令。


有人应该解释一下本地和远程Github之间的区别。你在本地和远程拥有什么不同。这是你需要找到的关键。 - Mahdi Amrollahi

30

15

我对'add'命令的作用感到困惑。我刚刚从《Git Pro》一书中读到了一段非常启发性的段落,我想在这里添加一下,因为它可以澄清事情。

原来,当你运行git add命令时,Git会将文件完全暂存。如果你现在提交,benchmarks.rb的版本就是你上次运行git add命令时的版本,而不是在你运行git commit时工作目录中文件的样子。如果你在运行git add之后修改了文件,则必须再次运行git add以暂存文件的最新版本。

摘自:Chacon, Scott. “Pro Git.” Springer, 2009-08-19T00:00:00+00:00. iBooks. 此材料可能受版权保护。


8

add命令告诉Git开始跟踪一个文件。

commit命令将您当前的更改提交到本地存储库中。

push命令将您的本地存储库推送到上游。


5

这是一份关于GIT秘籍的pdf,非常好。

添加与svn的添加相同(但有时用于标记文件已解决)。

提交也与svn的提交相同,但它将更改提交到您的本地存储库中。


2
现在我必须查找svn add和commit。我最担心的是:他们的文档会让我参考git add和commit。而lord_t是这些文档的作者。 - eric
问题的作者已经了解SVN,所以我假设他知道svn的命令。 - pmaruszczyk

0

add -in git 用于告诉 git 我们要提交哪些文件,它将文件放入暂存区

commit- in git 用于将文件保存到本地机器上,这样如果我们进行任何更改甚至删除文件,我们仍然可以恢复我们已提交的文件

push - 如果我们在本地机器上提交文件,它们仍然容易丢失,如果我们的本地机器丢失、损坏等,为了保护我们的文件或共享我们的文件,通常我们希望将我们的文件保存在远程仓库(如 Github)中。为了在远程仓库上保存,我们使用 push

示例 暂存名为 index.html 的文件 git add index.html

提交已暂存的文件 git commit -m '你的提交名称'

将文件推送到 Github git push origin master


0

addcommit 是相互关联的。

add 允许我们继续对本地仓库进行更改,而当我们想要将这些更改共享到远程仓库时,commit 允许我们记录这些更改。

push 命令可以被视为一种工具,它将提交从本地仓库传输到远程仓库。


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