首页 > 代码库 > [git] git 的基础功能

[git] git 的基础功能

 

获得一个 git 版本库

初始化

git init

克隆已存在的库

git clone git@github.com:garrisonz/gitStudy.git

和其他版本管理系统不同, Git 的命令是 clone, 而不是 checkout。Git 拷贝的不仅仅是当前最新版本的文件,而是服务器上面的全部数据,包括所有历史记录。

 

在库中记录变更历史

工作目录下的文件,可以分为已被跟踪的 (tracked) 和尚未被跟踪的 (untracked).

tracked 的文件,又分三种状态 Unmodified, Modified, Staged。Unmodified 也就是 commited.

技术分享

 

检查项目的状况的命令,这是一个很有用的命令,在不同状态下提示不同的信息,指引你如何做下一步。

git status

 

追踪文件使用 add 命令。

$ echo tony > 1.txt$ git add 1.txt

add 是一个多功能命令,有下面几种

a. 开始追踪文件

b. 给文件放到 stage area

c. 把合并冲突的文件表示为已解决状态

可以把 add 理解为 "把这些内容加入到下一次 commit "。

把一个修改过的文件放到 tage area 后,再做一次修改,这时该文件会有两个版本的的:modified 和 staged。如果此时做 commit ,只会提交 staged 的版本。

 

忽略文件

.gitignore 用于配置需要忽略的文件。配置规则如下

  • 忽略空行或者 # 开头的行
  • 接收标准 glob 模式匹配
  • 前斜杠 / 开始,避免全部目录遍历
  • 前斜杠 / 结尾,表明是一个目录
  • 感叹号 ! 开始,表示取反

glob 模式匹配,像是一个简化的正则匹配。* 匹配零个或多个字符;? 匹配一个字符; [abc] 匹配中括号中的任何一个字符(此处为 a 或 b 或 c );[0-9] 匹配范围内的值(此处为 0 至 9 任何一个字符)。

 

差异

git diff 显示已变动但没放到 stage area 的变动,git diff --staged 显示已放到 staged area 但没有 commit 的变动。

$ git diff$ git diff --staged

需要注意的是, git diff 并不是显示所有没有 commit 的变动,而是仅仅显示没有放到 stage area 的变动。

 

提交变动到库

把 stage area 里面的变更提交库中,使用下面命令

$ git commit -m fix iss54

下面的命令,会省去 stage area (git add) 步骤,把所有已追踪的文件提交到库中。

$ git commit -m fix iss54 .
$ git commit -a -m fix iss54 

 

删除文件,并从 staging ara 中删除历史记录和追踪

$ git rm <fileName>

希望 git 不用再追踪该文件,但在目录中保留该文件

$ git rm --cached <fileName>

 

查看历史记录

git log 用于查看历史记录,-[n] 表示查看最近的前 n 条记录。--stat 会显示历史声明,包括修改了哪些文件。

$ git log -3 --stat

推荐使用 Eclipse 上的 egit 插件查看历史记录。

 

撤销操作

在不同状态需要撤销不同的操作,可以参考 git status 的提示进行,包括需要撤销 modified 的文件, staged 的文件。

撤销操作,会删除变更,需要谨慎使用。

 

远程库

git remote 会显示远程服务器名,-v 选项会显示远程服务器名和 URL 的读、写匹配关系。

$ git remote$ git remote -v

添加一个远程服务器

$ git remote add myfork git@github.com:garrisonz/bootstrap.git

 

获取远程服务器的数据

$ git fetch myfork

fetch 命令只会从远程服务器中下载数据,但是不会把变更合并到当前的工作目录,需要手动进行合并 (merge)。 pull 相当于 fetch + merge。当项目有多个分支时,推荐经常需要先 fetch 后 merge.

 

推送代码到远程服务器

git push [remote-server] [remote-branch]

删除远程服务

例如在 git 仓库中删除一个名为 myfork 的远程服务器

git remote rm myfork

 

打标签 (Tag)

和大多数版本管理系统一样,git 可以给指定的历史顺序打上标签。一般给需要发布的版本打上标签,如 v1.0。打标签有两种类类型: 轻量型和声明型。

轻量型标签,是一个指针指向特定的 commit 记录

$ git tag v0.5

声明性标签,会存储更多额外信息。推荐使用。

$ git tag -a v1.0 -m the stable v1.0 version

需要签出指定的标签版本

$ git checkout -b version1 v1.0

 

命令别名

定义别名是为了减少敲打键盘的次数,为了方便记忆,保持打字节奏,我把别名都设置为三个字符。

$ git config --global alias.cot checkout$ git config --global alias.brh branch$ git config --global alias.cmt commit$ git config --global alias.sts status

 

参考资料

Chapter 2, Git Basics, git-scm

 

[git] git 的基础功能