http://git-scm.com/
git是什么?
版本控制工具,Linux的作者写出来的
与SVN的集中式相比,分布式(可以本地提交)
集中式:所有开发者都连一个服务器进行协同工作
分布式:本地就可以提交、可以通过网络的git服务器多人协作
git的安装和配置:
下载Xcode,安装CommandLineTool就可以使用git了
初始化时的需要配置一下用户名和邮箱地址,使用终端输入:
不配置的话,使用会报错:
设置全局配置:
$git config --global user.name"Your Name"
$git config --global user.email"[email protected]"
列出全局配置:
$git config --global --list
git的使用:
初始化:
cd工程路径
git init
添加修改到暂存区:
git add文件名
提交暂存区中的修改作为一个新版本:
git commit -m “提交代码的注释”
部分提交和全部提交:
git commit -a
git commit -m “提交代码的注释” -i
查看当前版本控制状态:
git status
对比上一次修改、对比工作区和当前版本库中最新的版本的修改:
git diff需要查看修改的文件名
git diff HEAD —需要查看修改的文件名
日志查看:
git log
git log —pretty=oneline
git log —graph
重置到指定版本(暂存区也会被回退到工作区unstage):上一个、往前数4个、往前数100个
git reset —hard HEAD^
git reset —hard HEAD^^^^
git reset —hard HEAD~100
查看可以重做的版本日志:
git reflog
撤销工作区文件的修改(之前add过撤销到add的状态,没有add撤销到版本库的状态):
git checkout —需要撤销的文件
删除文件:
git rm需要从版本库中删除的文件
分支创建:
$git branch dev
查看分支:
$git branch
切换分支:
$git checkout master
创建并切换分支:
$git checkout -b dev
合并分支master和dev (假如当前在master):
$git merge dev
删除分支:
$git branch -d dev
创建标签(Tag某个版本的指针):
$git tag v1.0
查看标签:
$git tag
对之前的某个版本打标签:
$git tag v1.1verid
对之前某个版本打标签并加注释:
$git tag -a v1.1-m"v1.1 released"verid
查看标签信息:
$ gitshowv1.0
=============================
远程仓库:
需要用ssh的key,注意要用默认的rsa的文件地址,不要新建
默认的私钥:~/.ssh/id_rsa默认的公钥:~/.ssh/id_rsa.pub
$ssh-keygen -t rsa -C"[email protected]"
把本地的git仓库与远程服务器仓库关联:
$git remote add origin [email protected]:changbiao/gitproject.git
把本地代码推送到远程git库上面(-u为了让本地的master分支和远程的关联):
$ git push -u origin master
$ git push -u origin master -f
推送其他分支到git远程服务器:
$git push origin dev
解除与远程服务器的关联:
$ git remote rm origin
克隆远程服务器的代码到本地:
$ git clone https://github.com/changbiao/QuestionAnser.git
$ git clone https://github.com/changbiao/QuestionAnser.git LocalWorkCopyQA
从远程服务器下载到本地工作区,不进行合并:
$ git fetch
$ git fetch origin master:tmp
拉取最新服务器代码到本地,并且合并到本地:
$ git pull
工作区:work copy
暂存区:stage
版本库:repo
工作区add =>暂存区commit=>版本库
Q/A:
git的版本号是一串字符,svn的版本号是递增的数字
HEAD表示当前版本库中最新版本
unstage把暂存区的修改回退到工作区
origin一般是远程库的名字
.gitignore文件,描述哪些文件忽略掉,不用git管理
github.com
git.oschina.net
为什么需要ssh key?
为了确认是你在推送代码,不是别人、可以添加多台电脑的ssh key
第一次连接git服务器时的警告:输入yes即可
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
➜GitProjectgit:(master)✗gitcommitGitProject/ViewController.m-m"修改冲突"
fatal: cannot do a partial commit during a merge.
➜GitProjectgit:(master)✗gitmerge dev1
fatal: You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you merge.
在提交单个文件的时候出现这个错误.
意思是不能部分提交代码.
原因是git认为你有部分代码没有做好提交的准备,比如没有添加
解决方法是:
1.提交全部
git commit -a
2.如果不想提交全部,那么可以通过添加-i选项
git commit file/to/path -i -m "merge"