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. VS联调多个解决方案的项目

    一.项目中经常出现一个解决方案里面有多个程序,如果想按F5启动多个实例进行操作调试那该怎么操作? 以前自己都使用附加进程的方法调试,这样的调试不需要按F5,自己只要运行多个程序后,使用vs的附加进程到 ...

  2. android颜色代码

    <?xml version="1.0" encoding="utf-8" ?> <resources> <color name=& ...

  3. Bzoj2683 简单题

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...

  4. 加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Midterm

    Stat2.2x Probability(概率)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...

  5. Request 对象

    Request 对象用于检索从浏览器向服务器发送的请求中的信息. 1.使用Request对象的Browser属性,可以访问HttpBrowserCapabilities属性获得当前正在使用哪种类型的浏 ...

  6. CF 702B Powers of Two(暴力)

    题目链接: 传送门 Devu and Partitioning of the Array time limit per test:3 second     memory limit per test: ...

  7. ubuntu 设置hostname

    永久修改hostname: # sudo vim /etc/hostname # sudo vim /etc/hosts

  8. SQLite的WAL机制

    标注:本文部分有黏贴这里的资料,另外还加了一些自己的笔记 使用CoreData或者SQLite3的时候,我们创建的数据库, 在存储的文件夹中有三个文件:分别为:**.sqlite  **.sqlite ...

  9. MooseFs-分布式文件系统系列(二)之安装总结

    preface 上篇博客写了如何安装MFS,那么现在就说说经验总结把 安装方式有源码和yum安装,在官网地址:https://moosefs.com/download/centosfedorarhel ...

  10. 图解HTTPS协议加密解密全过程

    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL ...