Git学习地址-廖雪峰的官方网站 git
1 本地Git仓库的建立 web
在使用Git前想到的就是怎样显示是本身提交的名字 app
$ git config --global user.name "你的名字" # 设置提交名字 ssh
$ git config --global user.email "你的email" # 设置email学习
git init 建立一个空的git仓库 网站
建立好后能够经过git add <file> 命令添加文件,如:git add readme.md spa
最后经过git commit 提交 .net
$ mkdir GitSutdy 日志
$ cd GitStudy orm
$ git init # 此时建立了一个Empty Git仓库啊
$ touch readme.md #新增长一个readme.md文件
$ git add readme.md # 将readme.md文件添加到仓库
$ git commit -m "add readme.md" # 提交所加文件到仓库
2 远程仓库
远程仓库建立:在git.oschian.net上建立一个远程仓库 GitStudy
1)将远程仓库从git上clone下来:
$ git clone git@git.oschina.net:wangcccong/GitStudy.git
此时可会出现Permission denied,须要添加一个ssh public key:
$ cd ~/.ssh
$ ssh-keygen -t rsa -C "wangcccong@outlook.com" #(生成一个rsa,名字自定义:加上叫id_rsa) 此时你的.ssh会多出两个文件 id_rsa id_rsa.pub
$ cat id_rsa.pub # 将公匙取出,填入网站便可(公匙标题随意取,而后将cat 出来的公匙拷贝粘贴到网站)
$ ssh -T git@git.oschina.net # 出现Welcome git@osc xxx)及配置公匙成功
再次调用git clone git@git.oschina.net:wangcccong/GitStudy.git便可
注意:
git clone 默认会把整个远程仓库克隆下来,可是只会建立master 分支,若是还存在其余分支
$ git branch -r # 或者 git branch -a 查看全部分支
origin/HEAD -> origin/master
origin/dev
origin/master
$ git checkout origin/dev # 将远程分支checkout
$ git checkout -t dev # 在本地建立一个和远程同样名字的分支
2)将远程仓库与本地仓库合并:
$ git remote add origin git@git.oschina.net:wangcccong/GitStudy.git (将远程仓库与本地仓库合并)
$ git push -u origin master # 推送仓库
3 Git时光穿梭机
1) git版本回退
当前若是新增了文件,或者修改了文件等其余操做而且已经git commit,发现问题须要回退到以前版本
$ git reset --hard HEAD^ # (HEAD^ 回到上一个版本 HEAD^^ 回到上一个的上一个版本,HEAD~100 回到以前的第100个版本)
还能够经过(git log 查看提交日志,git reflog 查看命令日志)
$ git log --pretty=oneline # 查询到改变版本的id
$ git reset --hard idxxx
2) 管理修改
$ git status # 查看当前状态
$ git add <file> # 添加文件或者文件夹
$ git diff # 查看冲突
$ git commit # 提交
3) 撤销修改
$ git checkout -- readme.txt # "--" 很重要,若是木有"--" 则命令就变为了切换分支
$ git reset HEAD readme.txt # 将暂存区的文件撤销
4) 删除文件
$ git rm <file> #(删除文件) 若是删除错误能够经过上述 git checkout -- <file>恢复
4 Git分支管理
1)建立与合并分支
$ git checkout -b dev #(建立+切换分支dev)与下面两句同样的功能
$ git branch dev
$ git checkout dev
$ git branch -d dev #删除分支
$ git branch #查看当前分支及版本库存在哪些分支#
*dev
master
$ git checkout dev # 将分支切换到dev
Switched branch to 'dev'
若是修改了某个分支,但愿里面的内容与其余分支合并则经过
$ git merge dev # 则将当前所在分支与dev合并
2)分支管理状况
$ git merge dev 默认采用的是Fast Forward方式合并分支,在这种模式下合并分支后会丢掉分支信息,若是须要在后续可以看出来合并的历史信息,能够加上--no-ff
$ git merge --no-ff -m "merge with no-ff" dev
3) Bug分支
在开发中遇到bug须要修改,这个时候就须要从新建立一个bug分支如:issue-101,可是当前在分支dev 上进行了修改,可是又不想将当前修改当即提交并,可使用
$ git stash 将分支暂时“储藏”起来,等之后恢复后继续工做
// 以下:假设将README.md文件中的“Git is free software...”改成“Git is a free software...”,而后提交
$ git checkout dev # 切换到dev分支下,若是当前有修改,可是不想合并提交
$ git stash
$ git checkout master # 进入master分支下修改README.md
$ git checkout -b issue-101
$ git add README.md
$ git commit -m "fix bug 101"
修复完成后回到master分支
$ git checkout master
$ git merge --no-ff -m "merged bug fix 101" issue-101
修复完bug后回到dev继续工做
$ git checkout dev
$ git status # 查看更状态
# On branch dev
nothing to commit (working directory clean) # 工做区是干净的无任何修改
$ git stash list # 查看刚才“储藏”的工做到哪儿去了
stash@{0}: WIP on dev: 6224937 add merge
$ git stash apply # 恢复工做
$ git stash drop # 删除stash内容 或者使用 git stash pop 完成上两个动做
4) Feature分支
$ git checkout -b feature
Feature分支用于在接到新功能的状况下新建分支,Feature分支与bug分支相似,新建-处理-合并-删除;可是当你在合并前有可能如今你接到一个命令说,当前功能不须要作了,须要删除新功能:
$ git branch -d feature
此时会出现销毁失败,可使用
$ git branch -D feature # 强行删除分支
在此感谢 - 在此感谢廖雪峰的:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951758572072ce1dc172b4178b910d31bc7521ee4000