Git Basic
1.git config 工具
简介:git config 是一个用来配置和读取相应工作环境变量的工具,正是由于配置的环境变量决定了GIt在各个环节的工作方式和行为。
- /etc/.gitconfig 系统配置,使用 git config —system选项配置.
- ~/.gitconfig 用户配置,配置文件位于用户主目录下,使用 git config —global选项来配置.
- .git/.gitconfig 项目配置,针对某个项目的配置
优先级:项目配置 > 用户配置 > 系统配置
设置信息:
$ git config —global user.name “John Doe”
$ git config —global user.email “johndoe@example.com”
以上会修改~/.gitconfig 文件的内容.
设置文本编辑器:
$ git config —global core.editor mvim
设置文本编辑器之后,git commit之后可能会出现Aborting commit due to empty commit message.错误,
解决方法:git config —global core.editor mvim -f
代表mvim在前台运行.
设置差异分析工具:
$ git config —global merge.tool vimdiff
查看配置信息:
$ git config —list or git config user.name
注意:如果看到重复的参数,说明它们来自不同的.gitconfig 文件(/etc/.gitconfig or ~/.gitconfig).
2.获取帮助
$ git help
$ git help config
$ man git
3.git基础
取得项目的仓库
$ git init - 初始化仓库
$ git add file - 将文件纳入版本控制
$ git commit -m “add file.” - 提交修改
从现有仓库克隆
$ git clone git://github.com/schacon/grit.git
以上代码会在当前目录创建一个文件夹grit,其中包含一个.git文件夹,用于记录下载下来的所有文件的版本记录.
$ git clone git://github.com/schacon/grit.git grit
和上一条有所不同的是它指定了所要克隆到的文件夹名字.
当然git 支持很多种传输协议,不过你也可以用 http(s):// 或者 user@server:/path.git 表示的 SSH 传输协议.
记录每次的更新到版本库
文件所处的状态如下图所示:
$ git status - 检查文件所处的状态
$ touch README
$ git status
Untracked files:
README
$ git add README - 使用add命令将文件纳入版本控制
$ git status
Changes to be committed:
new file: README
Changes to be committed:说明文件还没有追踪
$ git vim .gitignore
$ git status
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .gitignore
Changes to be committed:说明文件已经追踪但是还没有被提交
Changes not staged for commit:说明文件已经被修改还没有被提交
$ git add .gitignore
$ git status
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: .gitignore
new file: README
忽略某些文件
$ cat .gitignore
#ignore文件
*.cpp
*~
第一行告诉我们git会忽略所有以.cpp为后缀的文件
第二行告诉我们git会忽略所有以~结尾的文件
#之后的内容会被忽略掉,命名匹配支持正则表达式
查看文件的更改
$ git diff
diff --git a/benchmarks.rb b/benchmarks.rb
index 3cb747f..da65585 100644
--- a/benchmarks.rb
+++ b/benchmarks.rb
@@ -36,6 +36,10 @@ def main
@commit.parents[0].parents[0].parents[0]
end
+ run_code(x, 'commits 1') do
+ git.commits.size
+ end
+
run_code(x, 'commits 2') do
log = git.commits('master', 15)
log.size
以上命令比较的是为暂存的文件的更改
$ git diff —cached (命令同git diff —staged)
以上命令查看已暂存的文件和上次提交的文件的diff
提交更新
$ git commit
以上命令会打开磨人的编辑器编辑commit message,可以使用 - git config —global core.editor youreditor 来更改默认的编辑器
$ git commit -m “commit message” - 直接指定commit message,无需打开编辑器
$ git commit -v - 将更改的内容作为commit message提交
$ git commit -a -m 'added new benchmarks' -a add未暂存文件,并提交
移除文件
$ rm README - 简单删除文件
$ git rm README - 记录此次移除文件的操作
$ git rm --cached readme.txt - 移除对该文件的暂存和追踪,并不会删除文件
移动文件
$ git mv README.txt README - 对文件名进行修改
以上命令相当于:
$ mv README.txt README
$ git rm README.txt
$ git add README
4.查看提交的历史
$ git log
如果不加任何参数,默认会按照时间列出所有的更新,最近时间的在最上面,包括 SHA-1 校验和、作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明
关于git log的选项
$ git log -p -3
使用以上命令用来展示每次提交的内容差异,-3则是仅仅显示最近的3次更新。
$ git log —stat - 显示简要的增改行数
$ git log --pretty=oneline - 每次提交以一行显示,此外还有short、full、fuller
$ git log --pretty=format:"%h - %an, %ar : %s”
$ git log --pretty=format:"%h %s" —graph - 图形化显示
选项 说明
-p 按补丁格式显示每个更新之间的差异。
--word-diff 按 word diff 格式显示差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
--oneline `--pretty=oneline --abbrev-commit` 的简化用法。
$ git log --since=2.weeks - 限制输出长度 --since 和 —until
5.撤销操作
重新提交
$ git commit —amend - 重新提交
如果你在一次提交之后发现遗漏掉某些修改,这时你可以修改之后,然后执行以上命令,重新编辑提交的comment,这次提交会覆盖掉上一次的提交。
for example:
$ git commit -m “add some files”
$ mvim README //some changes
$ git add README
$ git commit —amend -m “add some files and edit README”
取消暂存文件
某些临时文件不小心add到暂存库中了,此时如何将其从暂存库中取消?请看下面:
$ git reset HEAD your_file - 取消暂存区中纪录的文件的修改
取消对文件的修改
$ git checkout — you_file - 取消对文件的修改
6.远程仓库的使用
$ git remote -v - git remote会列出原称分支的简称,添加v参数来显示对应的克隆地址
$ git remote add [shortname] [url] - 添加远程仓库,指定一个简单的名字
$ git fetch [remote name] - 拉取远程的代码
$ git push [remote-name] [branch-name] - 提交代码到远程分支上
$ git remote show origin - 查看远程分支的详细信息
$ git remote rename pb paul - 修改远程分支在本地的简称
$ git remote rm paul - 移除对应的远端仓库