?
git:一个分布式的版本控制工具,类似于SVN等,但是比SVN功能更强大
github:首先是一个网站,其次是提供了git服务,所以很多开源者将自己的代码上传到github上,供更多的开源者一起开发。
?
?
1.git init #进入某个目录,执行这个命令,这就创建了一个仓库
?
#注意:提交新文件和修改的文件都是两步,git add 、 git commit
#如果是修改之后的提交,在git add之后,最好执行下git status查看下状态,再进行commit
2.git add xxx.txt #添加一个文件
#git add -all
?
3.git commit -m "注释" ?#提交
?
4.git status#查看仓库的版本状态,看是否有文件被修改
?
5.git diff#如果出现状态不一致,可以使用这个命令进行查看修改了什么内容
?
6.git log#git log --pretty=oneline ?将只显示最有用的信息
?
#在git中,HEAD代表是当前版本,HEAD^代表上一个版本,HEAD^^代表上上一个版本,HEAD~100 代表上100个版本
?
7.git reset --hard HEAD^ ?#回到上一个版本
?
#其实git的版本控制,是通过head指针来控制的,类似于数组下标这个概念
8.git reset --hard 3628164 ?#后面的数字代表的是某个版本号,指定回退到哪个版本,数字可以不用写完整
?
9.git reflog#记录你之前的每一条命令
?
?
#工作区和暂存区,
10.每次修改,如果不add到暂存区,那就不会加入到commit中
?
#git checkout -- readme.txt文件在工作区的修改全部撤销,这里有两种情况:
#一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
#一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
#总之,就是让这个文件回到最近一次git commit或git add时的状态
#git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
11.git checkout -- file#
?
?
#git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
12.git reset HEAD file#可以把暂存区的修改撤销掉(unstage),重新放回工作区。即:执行了add操作之后,把add到暂存区的恢复到之前的工作区状态
?
?
#提交到版本库,自己没有提交的是是工作区的。
#操作系统执行删除文件命令之后,git会检测到状态不一致,可以使用git status查看,有两种情况
#1.确实要删除该文件,那么执行git rm XX.txt ,然后执行 git commit -m "注释",就可以删除
#2.另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
13.git checkout -- xx.txt#其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
?
?
#将本地的库和远程的github库进行关联,以便push等操作
14.git remote add origin git@github.com:henuzyy/zyy.git
?
#把本地库的所有内容推送到远程库上
#由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,
#还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
#要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
#关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
#此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
15. git push -u origin master
?
?
#要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
#Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
16.git clone git@github.com:henuzyy/zyy.git #从远端库里面克隆一个一模一样的版本到本地
?
?
17.git checkout -b dev#创建dev分支,加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev
git checkout dev;
?
18.git branch#命令会列出所有分支,当前分支前面会标一个*号。
?
#合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
19.git merge dev#用于合并指定分支到当前分支。(Fast-forward:快进模式,直接把当前分支指向dev分支)
? ?#因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
? ?git merge --no-ff -m "merge with no-ff" dev#准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:
? ?
? ?
20.git branch -d dev#删除dev分支
?
21.git log --graph命令可以看到分支合并图。
?
22.当分支合并出现冲突时,就无法自动合并,只能通过命令,修改内容,解决冲突,才能再次提交进行合并。
?
?
23.分支使用策略
1.master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
2.干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
3.你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
24.git stash#把当前工作现场“储藏”起来,等以后恢复现场后继续工作
? ?git stash list #这个查看某个分支下,stash之后的记录
? ?#如果上面那条命令生成的有stash记录,那么可以使用如下两种方式进行恢复
? ?1.git stash pop#恢复的同时把stash内容也删了
? ?2.git stash apply#恢复后,stash内容并不删除,你需要用git stash drop来删除
?
25.修复bug分支
在你dev分支进行开发时,突然线上出现了一个bug,那么需要基于master分支,创建一个bug分支,但是此时你的dev分支还不能提交,因为你的任务还没有完成,
那么可以使用上面的24进行bug恢复
?
26.feature分支
当创建一个feature分支之后,代码写好之后,然后add、commit之后,就在准备合并的时候,如果不需要此分支(分支上的代码不需要了),就可以删除该分支,命令如下:
git branch -d feature#如果没有合并,则会提示
git branch -D feature#即使没有合并,也不会提示,强行删除
?
27.git remote -v#查看远程库的信息,可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址
?
28.git push origin dev #把本地的dev分支推送到远端
?
29.git checkout -b dev origin/dev#创建一个dev分支,并远端的orgin/dev分支拉下来,赋给它
?
?
汇总:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
?
?
30.远端推送冲突
#过程:先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
git pull
?
?
多人协作的工作模式:
1.首先,可以试图用git push origin branch-name推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
5.如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
?
?
多人协作小结:
1.查看远程库信息,使用git remote -v;
2.本地新建的分支如果不推送到远程,对其他人就是不可见的;
3.从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
4.在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
5.建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
6.从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
?
?
?
?
#将本地git仓库上传到github
1.本地,add,commit?
2.在gihub创建一个仓库,复制该地址,如https://github.com/henuzyy/cy.git
3.在git bash中执行 git push -u https://github.com/henuzyy/cy.git(初次会提示输入github的登录账户和密码)
4.
?
?
?
#需要搞明白的-------------------------------------
1.给一个仓库地址,如何拉到本地,设置账号是局域网的,还是全部都能用的,(个人和公司混用的账户)
?
2.查看修改的内容,查看历史版本,版本比较
?
3.提交
?
4.版本冲突解决
?
?
5.删除文件,提交
?
回退到某个版本
?
分支问题,时间线等
?
6.eclpse中使用教程
?
原文:http://ihenu.iteye.com/blog/2303385