Git的学习笔记(一)

文章摘自: http://git-scm.com/book/zh
   第一章  Git的安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

yum install git

现在已经可以用 git 命令了,用 git 把 Git 项目仓库克隆到本地,以便日后随时更新:
$ git clone git://git.kernel.org/pub/scm/git/git.git

$ yum install git-core

用户信息
$ git config --global user.name "John Doe"$ git config --global user.email [email protected]

查看配置信息
要检查已有的配置信息,可以使用 git config --list 命令:
第二章  Git仓库常用命令

在工作目录中初始化新仓库
$ git init

如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:
$ git add *.c$ git add README$ git commit -m 'initial project version'

从现有仓库克隆
比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:
$ git clone git://github.com/schacon/grit.git

如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:
$ git clone git://github.com/schacon/grit.git mygrit

检查当前文件状态
要确定哪些文件当前处于什么状态,可以用 git status 命令。如果在克隆仓库之后立即执行此命令,会看到类似这样的输出:
$ git statusOn branch masternothing to commit, working directory clean

跟踪新文件
使用命令 git add 开始跟踪一个新文件。所以,要跟踪 README 文件,运行:
$ git add README
此时再运行 git status 命令,会看到 README 文件已被跟踪,并处于暂存状态:
$ git statusOn branch masterChanges to be committed:  (use "git reset HEAD <file>..." to unstage)        new file:   README

忽略某些文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。来看一个实际的例子:
$ cat .gitignore*.[oa]*~

我们再看一个 .gitignore 文件的例子:
# 此为注释 �C 将被 Git 忽略# 忽略所有 .a 结尾的文件*.a# 但 lib.a 除外!lib.a# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO/TODO# 忽略 build/ 目录下的所有文件build/# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txtdoc/*.txt# ignore all .txt files in the doc/ directorydoc/**/*.txt

提交更新

用 -m 参数后跟提交说明的方式,在一行命令中提交更新:
$ git commit -m "Story 182: Fix benchmarks for speed"

移除文件
$ rm grit.gemspec$ git status On branch masterChanges not staged for commit:  (use "git add/rm <file>..." to update what will be committed)  (use "git checkout -- <file>..." to discard changes in working directory)        deleted:    grit.gemspecno changes added to commit (use "git add" and/or "git commit -a")

然后再运行 git rm 记录此次移除文件的操作:
$ git rm grit.gemspec rm 'grit.gemspec' $ git status On branch masterChanges to be committed:  (use "git reset HEAD <file>..." to unstage)        deleted:    grit.gemspec

另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆 .a 编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用 --cached 选项即可:
$ git rm --cached readme.txt

$ git rm log/\*.log

$ git rm \*~

移动文件
$ git mv README.txt README$ git status On branch masterChanges to be committed:  (use "git reset HEAD <file>..." to unstage)        renamed:    README.txt -> README


查看提交历史
下面的命令列出所有最近两周内的提交:
$ git log --since=2.weeks

表 2-3 还列出了其他常用的类似选项。

选项 说明
-(n)                      仅显示最近的 n 条提交
--since,--after                      仅显示指定时间之后的提交。
--until, --before                      仅显示指定时间之前的提交。
--author                      仅显示指定作者相关的提交。
--committer                      仅显示指定提交者相关的提交。

来看一个实际的例子,如果要查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试脚本(位于项目的 t/ 目录下的文件),可以用下面的查询命令:
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" --before="2008-11-01" --no-merges -- t/5610e3b - Fix testcase failure when extended attributeacd3b9e - Enhance hold_lock_file_for_{update,append}()f563754 - demonstrate breakage of detached checkout wid1a43f2 - reset --hard/read-tree --reset -u: remove un51a94af - Fix "checkout --track -b newbranch" on detacb0ad11e - pull: allow "git pull origin $something:$cur


修改最后一次提交
如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交:
$ git commit -m 'initial commit'$ git add forgotten_file$ git commit --amend
上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容。

取消已经暂存文件

可以使用 git reset HEAD <file>... 的方式取消暂存。好吧,我们来试试取消暂存 benchmarks.rb 文件:
$ git reset HEAD benchmarks.rb


取消对文件的修改
可以使用 "git checkout -- <file>..."的方式取消对文件的修改
$ git checkout -- benchmarks.rb

远程仓库的使用――查看当前的远程仓库
要查看当前配置有哪些远程仓库,可以用 git remote 命令,它会列出每个远程库的简短名字。
$ git remote

添加远程仓库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add
$ git remoteorigin$ git remote add pb git://github.com/paulboone/ticgit.git$ git remote -vorigin  git://github.com/schacon/ticgit.gitpb  git://github.com/paulboone/ticgit.git
现在可以用字符串pb指代对应的仓库地址了。比如说,要抓取所有 Paul 有的,但本地仓库没有的信息,可以运行 git fetch pb:
$ git fetch pb
remote: Counting objects: 58, done.remote: Compressing objects: 100% (41/41), done.remote: Total 44 (delta 24), reused 1 (delta 0)Unpacking objects: 100% (44/44), done.From git://github.com/paulboone/ticgit * [new branch]      master     -> pb/master * [new branch]      ticgit     -> pb/ticgit

现在,Paul 的主干分支(master)已经完全可以在本地访问了,对应的名字是 pb/master ,你可以将它合并到自己的某个分支,或者切换到这个分支,看看有些什么有趣的更新。
从远程仓库抓取数据
$ git fetch [remote-name]

推送数据到远程仓库
$ git push origin master

查看远程仓库信息
我们可以通过命令 git remote show [remote-name] 查看某个远程仓库的详细信息,比如要看所克隆的 origin 仓库,可以运行:
$ git remote show origin* remote origin  URL: git://github.com/schacon/ticgit.git  Remote branch merged with 'git pull' while on branch master    master  Tracked remote branches    master    ticgit
远程仓库的删除和重命名
在新版 Git 中可以用 git remote rename 命令修改某个远程仓库在本地的简称,比如想把 pb 改成 paul ,可以这么运行:
$ git remote rename pb paul$ git remoteoriginpaul
注意,对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master 分支现在成了 paul/master

碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行 git remote rm 命令:
$ git remote rm paul$ git remoteorigin

新建标签
$ git tag -a v1.4 -m 'my version 1.4'

显示已有的标签
$ git tag

可以使用 git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。
$ git show v1.4


你可能感兴趣的:(Git的学习笔记(一))