Git参考

 Git参考简介

本站是Git帮助网站。主要提供最重要,最常用的Git命令,便于学习记忆。命令按照操作类型分类,你可能会尝试做,将目前常用的选项和需要完成这些常见任务的命令。

每一节都有下一节的连接,可以看作一个完整教程。每一页有深入链接,比如官方手册页,以及Pro Git book一书的有关章节,这样你就可以从少数的关键命令深入到其他所有命令。首先,让我们开始像Git一样思考源代码管理。
 

像Git一样思考

头一件重要的事,是要明白,Git的版本控制,不同于之前用的Subversion,Perforce,或其他SCM。如果你能忘掉自己对版本控制的臆想猜测,并以Git的方式思考Git,学起来应该更容易。

让我们从头开始。假定你在设计新的源代码管理系统。如果没有版本控制工具,如何控制版本?只用复制项目文件夹,保存,像这样:

$ cp -R project project.bak
这样,一旦代码搞砸,就可以轻松地恢复文件,还是看你有什么项目看起来比较像现在看上去是什么样子,当您复制的改变。

如果你真的很偏执,可以在backup前加上日期:
$ cp -R project project.2010-06-01.bak 

这样一来,就会有一堆项目副本,用来检查对比。你甚至可以使用这种模式相当有效地与他人共享更改。如果你把项目打包成zip,并放在自己的网站,其他开发人员就很容易下载,修改,并发回给你补丁。
 $ 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)

现在,原始开发者可以把修改应用到项目副本。很多开源项目已经合作了好几年。

实际运行起来相当不错,我们写个工具,使操作更简单快捷。和Subversion每个版本都要复制所有文件不同,我们觉得备份不用复制整个目录。

这就是Git的核心。通过git commit命令告诉Git,要保存的项目快照,它记录了项目清单的所有文件。大部分命令与这些舱单看到它们之间的区别或拉的内容,其中,等等。
 
如果你认为有关的Git存储,比较和合并您的项目的快照工具,它可能会更容易明白是怎么回事,以及如何正确地做事情。
 

获取并创建项目

要想使用Git,首先得有Git仓库,用来存储备份数据。
有两种方式获得Git仓库。一是从现有目录初始化新项目或新源代码控制。二是从公共Git仓库克隆,如果你想和他人做同一项目的话。下面分别介绍。
 
 
要从现有目录创建仓库,只用在该目录运行git init。例如,假定目录有这几个文件:
$ cd konichiwa
$ ls
README   hello.rb

该项目用各种语言写Hello World”。当前只有Ruby,但只是开始。要启动版本控制,运行git init.。
$ git init
Initialized empty Git repository in /opt/konichiwa/.git/

现在可以看到有个.git子目录在项目中。这就是你的Git仓库,以后项目备份的所有数据都放到这。
$ ls -a
.        ..       .git     README   hello.rb
恭喜你,现在有Git仓库的骨架,可以开始项目备份了。
简而言之,用git  init,使之成为一个新的Git仓库现有目录的内容。你可以在任何时候的任何目录中,完全在本地。 

 git clone复制一个Git仓库,再添加新文件

如果多人合作同一项目,或者,要获得项目副本,查看和使用代码,你会克隆它。只用运行git clone[URL]要复制的项目的URL命令。
$ 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的子目录 - 这是所有项目的数据。
$ ls -a
.        ..       .git     README   Rakefile lib
$ cd .git
$ ls
HEAD        description info        packed-refs
branches    hooks       logs        refs
config      index       objects
默认情况下,Git会创建一个目录,那是因为你给它的网址的项目的名称相同 - 基本上无论是最后的斜线后的URL。如果你想要不同的东西,你可以只是把它在命令的末尾,在URL后。

基础备份

Git是压缩和保存项目备份,然后比较这些备份。本节讲压缩和提交项目的快照所需的命令。

一个重要的概念是,Git有“索引”,作为备份的临时区域排序。让你建立工作目录下一系列修改过的文件,而不是一次提交所有文件的变化备份。

简言之,先用 git add 启动跟踪。接着用 git state 和git diff 看修改了哪些东西,最后用 git commit 记录历史。这就是基本工作流程。

git add 把文件放到暂存区

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 statue查看您的文件的状态,在工作目录和临时区域

正如你看到git add,才能看到什么暂存区域的地位相比,在您的工作目录的代码,你可以运行git status命令的。我演示了使用- s选项,它给你短输出。没有标志的git status命令会给你更多的背景和提示。这里是- S与不相同的状态输出。简短的输出看起来像这样。
 

git diff 显示哪些保存了,哪些修改了,但没有保存

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。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值