[# git 学习笔记][1]
标签(空格分隔): githup git 版本控制
---
##一、初始配置
配置用户信息
```
$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]
```
查看所有配置信息命令
```
git config --list
```
获取帮助信息
```
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
```
##二、githup基础命令
1、git初始化命令
```
//切换到所在目录,使用init
$ git init
```
2、clone命令
```
$ git clone git://github.com/schacon/grit.git 项目名称
```
3、检查当前文件状态
```
$ git status
```
4、跟踪新文件(add命令),添加之前状态为“**Untracked files**”,添加后状态为“**Changes to be committed:*”(译注:其实 git add 的潜台词就是把目标文件快照放入暂存区域,也就是 add file into staged area,同时未曾跟踪过的文件标记为需要跟踪。)
```
$ git add . //使用‘.’表示全部文件
$ git add README //表示指定某一个文件
```
5、跟踪已经修改的文件:
在使用git status命令后,发现“**Changes not staged for commit:**”,更改了,但是还没有暂存,可以使用**git add** 命令,之后状态会变为“**Changes to be committed:**”
6、忽略某些文件
创建一个名称为.gitignore 的文件,格式规范如下:
> * 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
> * 可以使用标准的 glob 模式匹配。
> * 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
> * 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
7、查看已暂存和未暂存的更新
查看尚**未暂存**的修改文件**已经暂存**的文件:
```
$ git diff
```
若要看**已经暂存**起来的文件和**上次提交**时的快照之间的差异
```
git diff --staged
```
8、提交更新
```
$ git commit //这种方式会启动文本编辑器以便输入本次提交的说明
$ git commit -m "Story 182: Fix benchmarks for speed"// 使用-m参数,直接提交更新说明
$ git log // 使用此命令查看提交的信息
```
9、跳过使用暂存区域,不需要git add命令,直接提交
```
$ git commit -a -m ‘added new benchmarks‘
```
10、移除文件
**删除工作目录中的文件和暂存文件:**
```
$ git rm
```
如果手工删除了,则使用**git status**命令后,会提示会出现**Changes not staged for commit**,最后还需要使用**git rm**命令删除文件
**只删除暂存区域,不删除工作目录**
```
$ git rm --cached readme.txt //后面可以列出文件或者目录的名字,也可以使用 glob 模式
```
删除之后的恢复:
git checkout HEAD -- index.html
git checkout HEAD^ -- index.html
11、重命名文件
```
//如果是重命名文件,则只需要提供文件名即可
//如果是移动文件,file_to 则为目标目录
$ git mv file_from file_to
```
12、查看提交历史
```
$ git log -p -2 //-p:显示每次提交的内容差异,2-:则仅显示最近的两次更新
$ git log --oneline //使用一行显示查看提交的信息
$ git log --oneline --decorate --all
$ git log --oneline --decorate --all -10 --graph //显示最近10次提交,使用图形
//恢复操作
$ git revert 版本号
```
13、撤消操作
```
$ git commit --amend //提交撤销
$ git reset HEAD <file>...//暂存撤销
$ git checkout -- <file>...//取消对文件的修改
```
##**三、git分支操作**
**标签:分支:就是一个指针**
1、创建新分支**(实际上就是创建分支指正)**
$ git branch testing // 创建testing分支
2、切换分支
$ git checkout testing //切换到testing分支
3、[分支的新建与合并][2]
新建并切换分支:
$ git checkout -b iss53 // 相当于执行$ git branch iss53 和 $ git checkout iss53 命令
合并分支:
//第一步:切换到主分支,
$ git checkout master
//第二步:执行合并命令
$ git merge hotfix
//合并完成后删除分支
$ git branch -d hotfix
**合并冲突解决**
1、在合并时出现冲突
Automatic merge failed; fix conflicts and then commit the result.
查看哪些文件有冲突:
git status
解决冲突后,需要删除<<<<<<<,======= 和 >>>>>>>,这些行。解决所有冲突后,使用git add 命令,标记已经解决,暂存。
可以使用命令行工具解决冲突:
git mergetool
解决冲突完成后,再次使用
git status
4、[分支管理](http://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E7%AE%A1%E7%90%86)
```
//查看所有分支,带*表明当前所在的分支
$ git branch
//查看分支的最后一个提交对象的信息
git branch -v
//查看已经合并的分支,没有*的可以删除
$ git branch --merged
$ git branch -d 来删除,因为已经合并了,删除不会有影响
//查看还未合并的分支,尚未合并的分支不能直接删除
$ git branch --no-merged
```
**补充:**
比较分支:
git diff master..otherBranch //比较两个分支:
git diff master..otherBranch index.html//表示比较两个分支的index.html文件
git branch list //查看分支列表
git branch -m oldBranchName newBranchName //重命名分支
git branch -d branchName //删除分支
5、[利用分支进行开发的工作流程][3]
6、[远程分支][4]
**表示远程分支:**
(远程仓库名)/(分支名),如:origin/master
**获取远程分支的数据到本地:**
git fetch origin
注意:在fetch操作下载远程分支后,仍无法编辑,不会自动创建新的分支。
如果需要合并远程分支到当前分支,可以运行:
git merge origin/serverfix
如果需要获取一份来开发,则可以在远程分支的基础上创建新分支(详细参考跟踪远程分支):
git checkout -b serverfix origin/serverfix
**推送本地分支**
git push (远程仓库名) (分支名) 如:git push origin serverfix
**跟踪远程分支**
跟踪分支 (tracking branch):远程分支checkout出来的分支。
git checkout -b [分支名] [远程名]/[分支名] 如:
git checkout -b serverfix origin/serverfix
在1.6.2 版本以上,可以使用:--track简化如:
$ git checkout --track origin/serverfix
在跟踪分支中,输入git push,git会自动判断应该向那个分支推送数据。
在跟踪分支中,输入git pull,会获取所有分支索引,并把数据合并到本地分支来。
**删除远程分支**
无厘头的语法:
git push [远程名] :[分支名]
例如:git push origin :serverfix
7、[分支的衍合(rebase)][5]
---
修改暂存:需要把当天的工作进度暂存。
```
//使用此命令,进行暂存
git stash
git stash save ‘暂存工作进度‘;
//查看暂存列表
$ git stash list
//恢复暂存,如果此命令不指定名字,则默认为打开最近一次
git stash apply
git stash apply [email protected]{2}
//删除
git stash pop 名称
```
---
[1]: http://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5
[2]: http://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6
[3]: http://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%A9%E7%94%A8%E5%88%86%E6%94%AF%E8%BF%9B%E8%A1%8C%E5%BC%80%E5%8F%91%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B
[4]: http://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF
[5]: http://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E8%A1%8D%E5%90%88