一、使用GIT
Git是分布式版本控制系统。本质上是一个内容寻址文件系统。
1、设置全局信息:
- 姓名:git config --global user.name "LeonLH"
- email:git config --global user.email "laohan1221@126.com"
- 查询全局信息:git config -l
2、创建仓库(版本库)
版本库=仓库
在仓库中的所有内同都会被Git管理(修改、删除、跟新);
所有管理都会被记录下来;
可以随时恢复到特定状态;
- 初始化仓库:git init
- 创建文件夹(d:mypro):d:md mypro
- 进入文件夹:cd mypro
- 初始化仓库:git init(仓库初始化好之后会产生一个.git 文件,该文件就是仓库信息,不可以修改)
3、添加文件(文件要使用UTF-8编码)
- 查看当前仓库状态:git status
(其中:
主分支:On branch master
初始化仓库提交:Initial commit
未标记的文件:Untracked files)
- 添加文件(Hello.cpp)到暂存区:git add Hello.cpp
- 提交文件信息(引号里面是注释,而且必须要有):git commit -m "New Cpp File"
- 先add后commit:git commit -a -m "注释”
- 查看日志信息(end出现按q退出):git log Hello.cpp
4、修改仓库文件
- 修改前后文件对照:git diff 文件名称;
5、
- 将仓库内代码全部加入到暂存区中:git add .
6、版本回退
- 已经精简模式查看日志:git log --pretty=oneline文件名
- 回退指针(HEAD~次数)一步:git reset --hard HEAD~1
- 找到所有已经删除的信息提交ID(commitID):git reflog
- 恢复某个ID的版本:git reset --hard fe27af74...
7、撤销修改
- 未add未commit的情况下,撤销所做出的修改操作:git checkout -- 文件名称
- 已add未commit的情况下,1.撤销暂存区修改操作(从暂存区中退出):git reset HEAD 文件名称;2.丢掉已经修改的文件内容(恢复原始状态):git checkout -- 文件名称
8、删除文件
- del 文件名.后缀名
- 之后再:git commit -a -m "注释”
二、远程仓库(github)
1、在客户端和github之间建立安全链接:
- 生成ssh key :在Windows下直接使用“git bash”工具创建;
- 需要生成rsa编码的key:ssh-keygen -t rsa -C "laohan1221@126.com";
- 在user目录下生成".ssh"目录,里面有id_rsa私钥、id_rsa.pub公钥;
- github设置页面:Add SSH key;
- 找到id_rsa.pub文件的内容复制,注意别增加无用的任何内容;
可以参考这篇文章:http://www.cnblogs.com/gao-xiong/p/5982746.html 在客户端和github之间建立安全通讯。
2、添加远程仓库:
- 在github上创建仓库:创建之后会产生两种连接方式ssh链接地址和HTTPS链接地址(创建的仓库不含README);
- 把github与本地仓库相关联:git remote add origin http://github.com/yootk/......(最好选择ssh连接,ssh通信利用刚才建立的ssh key更为安全,为git@git...链接);
- 将内容推送到github上(初次推送master分支使用“-u”参数将远程master和本地master相关联):git push -u origin master;
将github关联的仓库切换为另一个仓库:git remote set-url origin http://github.com/- 一个远程仓库只可以与一个本地仓库关联,如果关联 已经被关联过得仓库就会提示:fetch first 或者 non-fast-forward
3、克隆仓库
- 先从别人的远程仓库克隆到本地;
- 在自己的github 上新建一个仓库,不选README选项;
- 将自己克隆到本地的仓库连接到github上的空仓库上,然后同步一下(push);
在实际开发中最好是所有开发者直接克隆远程仓库进行操作。
4、克隆其他开源项目
- 克隆mybaits的项目:git clone 项目地址;
三、分支管理
1、创建与合并分支
- 创建一个分支:git branch brh;
- 查看分支:git branch,其中*号所指为当前所在分支;
- 切换到brh分支:git checkout brh;
- 删除分支:git branch -d brh,注意在删除被brh是不能再要删除的分支上,可以在其他分支上;
- 创建并切换到子分支:git checkout -b brh;
- 将brh分支合并到master分支上:git merge brh,合并方式有一种是"Fast-forward"表示快速合并,它不会产生commit id,他只是利用了子分支的commit ID继续操作;
- 删除远程分支:git push origin --delete brh;
子分支上面的内容与中分支上面的内容没有任何关系,子分支只相当于主分支的一个copy文件,只有合并分支了之后master分支上才会有子分支的内容。
master分支是发布版,它是最稳定的。
2、分支的管理操作
- 为分支brh重命名为LH:git brach -m brh LH;
- 推送分支:git push origin LH;
- 查看所有分支:git branch -a;查看远程分支:git branch -r;查看本地分支:git branch -l;
- 删除本地分支LH:git branch -d LH;
- 如果分支还未进行合并,想要强制删除:git branch -D LH;
删除远程分支方法一:git push origin --delete brh;
删除远程分支方法二,推送一个同名的空分支过去(注意前面有分号):git branch LH,git push origin :LH;
3、冲突自动解决
- 在实现多人开发的时候,当不同分支上的同一文件被修改了之后,在提交合并的时候,就会出现冲突。代码:git merge brh;
- 有时同一文件的不同部分代码被修改之后,GIT会自动合并代码的不同片段,这个就是冲突的自动解决。
4、冲突的手动解决
- git merge brh之后会有提示说:出现CONFLICT;
- 查看冲突的内容:git status;
- 查看合并的情况:git log --graph --pretty=oneline;
5、分支管理策略
- 使用--no-ff进行合并,合并后创建一个新的commit id:git merge --no-ff "no ff commit" brh;
- 查看简短日志:git log --graph --pretty=oneline --abbrev-commit;
6、分支暂存
如果现在有紧急事件需要先切换到其他分支上去,而此分支上的代码还没有完成,这是就需要分支暂存。
- 先将此文件保存在暂存区之中:git add .;
- 将工作暂存:git stash,此时查看git status的状态是没有任何修改;
- 在其他分支上工作直到其他分支上的分支工作完成,再回归到之前的工作状态,查看暂存区列表:git stash list;
- 从暂存区恢复:方法一,先恢复,后手工删除暂存:git stash spply,git stash drop;方法二,恢复的同时删除stash内容:git stash pop;
git pull :此操作取出最新分支数据,并且发生merge合并操作;
git fetch:此操作只是取出最新的分值数据,但是不会发生merge合并操作;
四、git基本操作总结:
五、 git基本原理:
http://lib.csdn.net/article/git/19232
六、git命令参考手册
参考资料:
1、Git详解之一 Git起步http://www.open-open.com/lib/view/open1328069609436.html
七、Git关键字
- origin master 代表远程主分支,其中origin代表远程的意思。
- fetch 和pull都是拿回到本地仓库的中,而fetch之后还要加上merge才会在工作目录中看到“拿来”的东西。pull 等于fetch + merge。pull的操作可能存在隐患,因为他拿来之后自动合并的时候回自动处理代码。
- 本地仓库中的记录是以commit为时间节点的。
- checkout 主要是切换分支。
- branch主要操作有创建、删除、List(列出)。
八、其他命令
- 查看远程仓库:git remote -v
九、具体功能
- 更新远程代码到本地仓库:
- 方式一:
- 查看远程仓库:git remote -v
- 从远程仓库获取最新版本带本地:git fetch origin master
- 比较本地仓库和远程仓库区别:git log -p master.. origin master
- 把下载下来的代码合并到本地仓库:git merge origin master
-
- 方式二:
- 查看远程仓库:git remote -v
- 从远程获取最新版本到本地:git fetch origin master:tmps
- 意思是:从远程的origin仓库的master分支下载到本地新建的分支tmp上
- 比较本地仓库和远程仓库的区别:git diff temp;
- 合并master和temp分支:git merge temp
- 删除该temp分支:git branch -d temp;