git commit

git commit命令提交stage区的快照到项目历史中去(HEAD). 被提交的快照被认为是一个项目的安全版本. Git不会修改他们, 除非你显示的要求了. 和git add一样git commit是Git最重要的命令之一.

尽管名字相同git commit和svn commit完全不一样. 快照被提交到本地仓储,  不会和其他git仓储有任何的交互影响.

用法

git commit

提交stage区的快照. 上面的命令运行后会自动打开一个文本编辑器让你写一些关于这次commit的描述. 填写后, 保存文件关闭文本编辑器才会真正的commit.

git commit -m "<message>"

这样就不会弹出一个文本编辑器了, 可以直接在commit命令中直接包含对这次commit的描述.

git commit -a

提交工作目录下面的所有修改过的文件. 注意了这些文件只包括已经被tracked过而且有修改的文件.

讨论

快照被提交到本地仓储. 这和SVN完全不同, 在SVN中working copy被提交到了中心仓储. 相反, Git不会强迫你和中心仓储交互, 知道你自己想这样做. 就如stage区是本地工作目录和项目历史(HEAD)之间的一个缓冲区, 每个开发者的本地仓储是他们的贡献和中心仓储的一个缓冲区.

SVN是直接commit修改到中心仓储. Git不同, git开发者有机会在他们本地的仓储中积累一些commit. 这样做比起SVN来说有许多好处:这样可以把相关的commits组织起来, 在push到中央仓储前清除本地的历史. 让开发者在一个完全独立的隔离的环境下工作, 推迟集成直到在一个恰当的时候.

快照, not differences

SVN跟踪的是文件的不同之处, Git版本控制模型是基于快照的. 例如, SVN commit由diff组成(与被添加到仓储中的原始文件相比). Git纪录每次commit的每个文件的整个内容.

这种方式使得Git操作起来比SVN要快, 因为一个特定版本的文件不需要通过组装diff来产生--可以马上从Git的内部数据库中获得每个文件的完整的版本.Git的快照模型广泛影响于git的方方面面.

例子

下面的例子假设你已经有了一个文件hello.py, 他即将被commit到项目历史中去. 首先你需要使用git add把他添加的stage区, 然后commit这个stage区的快照.

git add hello.py
git commit

运行后会打开一个文本编辑器要求你输入关于这次commit的一些描述, 同时还会列出哪些文件要被commit:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#modified: hello.py

Git不要求这个commit描述有特殊的格式, 但是一个好的经典的格式是在第一行用少于50个字符的文字概括这次commit, 然后空一行, 接下来详细的描述发生了什么修改. 例如:

hange the message displayed by hello.py

- Update the sayHello() function to output the user's name
- Change the sayGoodbye() function to a friendlier message

  

[译]git commit的更多相关文章

  1. [译]git commit --amend

    git commit --amend命令用来修复最近一次commit. 可以让你合并你缓存区的修改和上一次commit, 而不是提交一个新的快照. 还可以用来编辑上一次的commit描述. 记住ame ...

  2. [译]How to Write a Git Commit Message

    原文: http://chris.beams.io/posts/git-commit/ 介绍:为什么好的commit message很重要 你浏览项目commit message的时候或多或少会有些困 ...

  3. xcode svn commit is not under version control (1) & git commit

    使用Xcode提交一个第三方库时,由于包含资源文件,总是提交不了,提示报错:XXX commit is not under version control (1) 网上查了下,得知 xcode对于sv ...

  4. linux显示git commit id,同时解决insmod模块时版本不一致导致无法加载问题

    linux内核默认会包含git的commit ID. 而linux的内核在insmod模块时,会对模块和内核本身的版本做严格的校验.在开发产品时,改动内核后,由于commit ID变更,会导致linu ...

  5. [译]git的那些flag

    git add -p console有一个交互式的界面(如下图),让你一个一个文件的选择是add还是不add.注意这些文件必须是tracked过的, 也就是说如果你的新的文件从来没有add过,那么他不 ...

  6. git commit 代码时提示: Warning: Your console font probably doesn‘t support Unicode.

    git 提交代码是会遇到以下问题, git commit 代码时提示: Warning: Your console font probably doesn‘t support Unicode. If ...

  7. [译]git rebase -i

    使用rebase -i会在终端出现一个交互页面. 在这个交互页面中我们可以对要rebase的commit做一定的修改. 用法 git rebase -i <master> 把当前的分支的c ...

  8. [译]git reset

    git reset 如果说git revert是一个安全的撤销方式, 那么git reset就是一个非常危险的方法了. 当你使用git reset撤销的时候, 你没有可能在回到最初了-他是一个永久的不 ...

  9. [译]git revert

    git revert git revert用来撤销一个已经提交了的快照. 但不是从项目历史中移除这个commit, 而是生成一个新的commit, 老的commit还是保留在历史项目里面的. 这样做的 ...

随机推荐

  1. 关于AWR报告命中率指标的解释(转)

    文章转自:http://blog.itpub.net/24558279/viewspace-762371/ 从Oracle 10g开始,Oracle给广大DBA提供了一个性能优化的利器,那便是Auto ...

  2. Fckeditor PHP/ASP File Upload Vul

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScrip ...

  3. 通过Minimal版的iso安装CentOS7之后升级Desktop

    重新安装了CentOS7,但是使用的是Minimal的iso镜像安装的,所以安装之后只有文本界面,这里记录一下重新安装图形界面的过程. 连接网络 通过文本界面登陆后是没有连接网络的,所以需要修改配置连 ...

  4. XmlReader读取XML

    StringBuilder output = new StringBuilder(); String xmlString = @"<bookstore> <book gen ...

  5. Axure7.0中文汉化语言包下载 axure汉化包

    Axure RP Pro 7.0 正式版 (兼容 6 版) 简体中文语言包 支持 Axure RP Pro 正式版 当前最新版本 7.0.0.3142 废话不多说,直接给下载地址: Axure7.0中 ...

  6. 【Alpha版本】 第九天 11.17

    一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 昨天完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 完成我要应聘的详情显示,解决头像不能显示的问题,完成了报名及取消操 ...

  7. IOS - CORE DATA的目录(xcode6)

       当使用coredata作为app的后台数据存储介质后,我们很想知道数据是否成功插入.为此,我想找到coredata.sqlite的文件 代码中指定的存储目录为: - (NSURL *)appli ...

  8. JS性能方面--内存管理及ECMAScript5 Object的新属性方法

    Delete一个Object的属性会让此对象变慢(多耗费15倍的内存) var o = { x: 'y' }; delete o.x; //此时o会成一个慢对象 o.x; // var o = { x ...

  9. 再探jQuery

    再探jQuery 前言:在使用jQuery的时候发现一些知识点记得并不牢固,因此希望通过总结知识点加深对jQuery的应用,也希望和各位博友共同分享. jQuery是一个JavaScript库,它极大 ...

  10. EasyUi 方法传递多个参数值得方法

    1.项目中需要传递多个参数值 function actionFtt(value, row, index) { //传递查询需要的参数 var customerId = row.customerId;/ ...