本站是Git帮助网站。主要提供最重要,最常用的Git命令,便于学习记忆。命令按照操作类型分类,你可能会尝试做,将目前常用的选项和需要完成这些常见任务的命令。
每一节都有下一节的连接,可以看作一个完整教程。每一页有深入链接,比如官方手册页,以及Pro Git book一书的有关章节,这样你就可以从少数的关键命令深入到其他所有命令。首先,让我们开始像Git一样思考源代码管理。
头一件重要的事,是要明白,Git的版本控制,不同于之前用的Subversion,Perforce,或其他SCM。如果你能忘掉自己对版本控制的臆想猜测,并以Git的方式思考Git,学起来应该更容易。
让我们从头开始。假定你在设计新的源代码管理系统。如果没有版本控制工具,如何控制版本?只用复制项目文件夹,保存,像这样:
$ cp -R project project.bak这样,一旦代码搞砸,就可以轻松地恢复文件,还是看你有什么项目看起来比较像现在看上去是什么样子,当您复制的改变。
$ cp -R project project.2010-06-01.bak
$ wget http://sample.com/project.2010-06-01.zip $ unzip project.2010-06-01.zip $ cp -R project.2010-06-01 project-my-copy $ cd project-my-copy $ (change something) $ diff project-my-copy project.2010-06-01 > change.patch $ (email change.patch)
$ cd konichiwa $ ls README hello.rb
$ git init Initialized empty Git repository in /opt/konichiwa/.git/
$ ls -a . .. .git README hello.rb恭喜你,现在有Git仓库的骨架,可以开始项目备份了。
$ git clone git://github.com/schacon/simplegit.git Initialized empty Git repository in /private/tmp/simplegit/.git/ remote: Counting objects: 100, done. remote: Compressing objects: 100% (86/86), done. remote: Total 100 (delta 35), reused 0 (delta 0) Receiving objects: 100% (100/100), 9.51 KiB, done. Resolving deltas: 100% (35/35), done. $ cd simplegit/ $ ls README Rakefile lib
Git中,必须先把文件放到暂存区,然后才能提交。如果文件是新的,运行git add 把文件放到暂存区,如果文件已经“跟踪”——就是说,你最近已经提交了这个文件 - 还是要调用git add,把修改放到暂存区。让我们来看看这几个例子。
让我们回到Hello World的例子,一旦启动项目,现在用 git add 添加文件。用 git status 看看项目状态。
$ git status -s ?? README ?? hello.rb
所以 git add 现在我们有两个未跟踪文件。现在,我们可以添加它们。
这也是常见的递归添加一个新的项目中的所有文件,像这样通过指定当前的工作目录:git的添加..由于Git会递归添加你给它一个目录下的所有文件,如果你给它的当前工作目录,它会简单地开始追踪每一个文件有。在这种情况下,添加一个git。会做同样的事情,作为一个git添加自述hello.rb,或为此事GIT添加*,但这只是因为我们没有有*不会递归到子目录。
好了,现在如果编辑这些文件,并再次运行git status,会看到一些奇怪的东西。
$ vim README $ git status -s AM README A hello.rb
'AM'状态,是指上次添加后文件已被修改。如果现在就提交快照,将记录上次git add 时的文件版本,而不是我们磁盘上的版本。Git不会把磁盘上的文件当成你想要的快照 -你要告诉 git add 命令。
简而言之,在文件上运行git add ,当你想包括任何变化,你在下次提交快照。将不包括任何你改变,是不添加 - 这意味着你可以多一点比大多数其他的SCM系统的精度与工艺快照。
如果你感兴趣,想保持灵活,一次只保存部分修改的文件,参见《ProGit book》一书的 GIT add 的“- P”选项。
正如你看到git add,才能看到什么暂存区域的地位相比,在您的工作目录的代码,你可以运行git status命令的。我演示了使用- s选项,它给你短输出。没有标志的git status命令会给你更多的背景和提示。这里是- S与不相同的状态输出。简短的输出看起来像这样。
git diff 命令有两个主要用途,一个这里讲,另一个在“检验和比较”一节讲。这里用它的方式来描述保存的变化,上演或磁盘上的修改,但没有保存。
git diff 显示没有保存的不同
$ vim hello.rb $ git status -s M hello.rb $ git diff diff --git a/hello.rb b/hello.rb index d62ac43..8d15d50 100644 --- a/hello.rb +++ b/hello.rb @@ -1,7 +1,7 @@ class HelloWorld def self.hello - puts "hello world" + puts "hola mundo" end end
git diff 显示没有保存的不同
因此,git diff --cached 命令告诉你哪些文件已经保存,上演自您上次提交,所以,如果你已经保存了hello.rb的修改。git diff 会显示实际上还没有保存的修改。它通常是一个良好的后续命令git的状态。
$ git status -s M hello.rb $ git add hello.rb $ git status -s M hello.rb $ git diff $
如果你想看到保存修改了哪些部分,运行git diff -- cached。