----------------------------------------------安装git不简述了,直接yum -y install git
教程:http://www.runoob.com/git/git-branch.html
Git可以直接部署在一台服务器上,可以先创建一个git仓库,然后创建项目git,若是在公司使用git版本库,可使用gitlab,gitlab可以提供web的管理界面。
1. 初始化Git仓库:git init --bare aa.git
2. 将一个文件添加到git仓库:(两步)
第一步:git add file1 file2 可反复多次使用,添加多个文件;(添加文件时需在git目录下)
第二步:git commit (可以添加参数-m,后面输入的是本次提交的说明)
如:git commit -m "write a new file"
3. 配置自己的用户信息:
gitconfig --global user.name "runoob"
git config --global user.email test@runoob.com
设定文本编辑器:
git config –global core.editor emacs (git默认一般是vi 或者vim,这里是设置为emacs)
4. git版本修改的历史记录:git log
会显示由最近到最远的提交日志,如果嫌输出信息太多,可加上git log--pretty=oneline参数。
如:[root@bogon banbenku]# gitlog --pretty=oneline
0b30e57430973c37a16dab4d79449916c341353bxiugaihou
7d51d87cf8cec6334bc4068fd6d5e281c6fcc656write a readme file
提示:你看到的一大串类似0b30e574....7d51d87c....的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示.
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交0b30e574....7d51d87c(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
5. 回退上一个版本:git reset --hard HEAD^
6. 在把新版本回退到旧版本的之后,若想再次到新版本方法,只要上面shell的命令行窗口没关掉,就可以往上翻,找个新版本的那个版本名或者commit id,
执行:git reset --hardcommit id。
若机器已经关机重启之后,可执行gitreflog查看git以前执行的记录,
然后在git reset --hard commit id回到想要的版本。
若用代码库中的文件完全覆盖本地工作版本:gitreset --hard git pull
二、git的工作区与暂存区概念
工作区有一个隐藏目录.git。这个不算是工作区,还是git的版本库。
Git版本库里面存了很多东西,最重要的就是称为stage的暂存区,还有Git为我们创建的第一个分支master,以及指向master的一个指针叫HEAD。
(上图的注释:在工作区编写一个文件,通过git add filename之后即把所修改的文件暂放在stage区,再通过git commit 就可以一次性把暂存区所以修改提交到分区。)
7. 用git status -s 查看版本库当前状态。
8. 用 git diff HEAD -- filename 可查看工作区和版本库里面最新版本的区别。
9. 用 git checkout -- filename 如果在文件在修改了内容而没有提交到暂存区时,可以使git撤销掉在工作区所修改的内容。
10. 如果在文件中添加了新的内容,已经使用git add filename从工作区提交到暂存区,可以使用git reset HEAD filename进行撤销暂存区的修改,重新返回工作区。
11. 对于已提交版本库(git commit)文件的删除,若确实需要从版本库删除该文件,则gitrm filename,然后git commit进行提交。若删错误了文件,但是版本库里面还有,则使用git checkout -- filename 把误删文件恢复到最新版本。
三、远程仓库
添加远程库
要关联一个远程库,令git remote add origin git@server-name:path/repo-name.git
关联后,使用命令git push –u origin master
12. 从远程库克隆:git clone git@github.com:michaelliao/gitskills.git
四、分支的管理
13. 创建和合并分支:在版本回退里面知道每次提交,git都把他们串成一条时间线,这条时间线就是一个分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交,所以HEAD指向的就是当前分支。
14. 当我们创建新的分支,例如dev时,git就新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前在dev分支上
15. 用git checkout –b dev(分区名字) 创建分支dev (-b参数表示创建并切换)
此命令等于git branch dev(创建) git checkout dev (切换)
16. 用git branch 列出当前所有分支,分支前面加*的代表当前分支。
17. 用git merge dev 合并dev分支到当前分支
18. 用git branch –d dev 删除分支
注释:在git里面可以创建多个分支,然后同时对应一个项目的多个人员,分别提交在在自己的分支里面,然后等全部提交完毕之后,在合并到master上。
19. 再通过更新版本的时候,git pull的时候,报错说文件冲突,还有一种解决办法,就是用代码库中的文件完全覆盖线上的文件
git reset –hard
git pull
2) 当都往远程的一个分支上推送东西时,会发生冲突,一种办法:git pull把最新的提交从origin/dev抓下来,在本地合并解决冲突在推送;
第二种办法:git pull 也失败的时候,提示:”no tracking information”原因是没有指定本地dev与远程origin/dev分支的链接,设置本地dev与远程origin/dev的链接:
git branch –set-upstream devorigin/dev 然后在git pull
20. 分支管理策略:通常在进行分支合并时,git会用fast forward模式,但是在这种模式下,删除分支后就会丢到分支上的信息。
如果强制禁用fast forward模式,git就会在merge时生成一个commit,从历史上就可以看出分支信息。
21. 强制禁用fast foreard模式参数:--no-ff
git merge –no-ff –m “create commit”分支名
22. 分支策略:在实际的开发中,一般按照以下几个原则:
1) master分支是非常稳定的,也就仅用来发布新版本,平时不在上面干活;
2) 一般干活都在dev的其他分支上,也就是说,dev分支不稳定,到要发布现版本的时候,就把dev分支合并到master上,在master上进行发布
3) 所以团队人员都在dev分支上干活,每个人都有自己的分支,时不时往dev分支上合并就可以了。
23. Bug分支:当接到要修复一个bug101时,很自然想创建一个bu101分支来修复他,但是当前正在dev分支上的工作还没有提交,这个时候可以使用stash功能,把当dev前分支隐藏。
1) 首先确定在哪个分支(master)上修复bug,然后切换到那个分支(master),在创建切换到新的分支(bu101),然后进行修改,然后提交到分区(bu101),在切换分区(master),然后再合并分区(bu101),删除bu101分区。
24. 可使用git stashlist查看stash缓存区隐藏内容。
25. 当使用stash把当前分区隐藏后,可使用git stashapply恢复,但是恢复后,stash内容不会删除,需要gitstash drop删除。
还有种方法是使用git stashpop,恢复的同时把stash内容也删了。
26. 在开发新功能时新建一个分支(new),在还没有合并时,要删除新建的分区,可使用强行删除:
git branch –D new
27. 多人协作:当你从远程仓库克隆时,实际上git自动把本地的master分支和远程的master分区对应起来了,并且远程仓库默认名为origin。
28. 查看远程仓库信息:git remote,详细信息:git remote -v
29. 推送分支项目就是把该分支的所有本地推送给远程库。推送时要指定本地库。
git push origin master(本地的分支)
在进行远程推送的时候要先设置全局用户:
git config --global user.name "name"
git config --global user.email “test@jvtd.cn” (若不设置全局用户取消global即可)
30. 抓送分支就是从远端克隆到本地。从远程克隆时,默认只能看到本地的master分支,若要在其他分支开发(dev),就需要创建远程origin的dev分支到本地,以下命令创建:
git checkout –b dev origin/dev
现在就可以在dev上进行修改,然后把dev分支push到远程。
31. 如果想要创建自己的git库,可以在www.github.com上进行注册。
32. 当执行过git add之后,用git status -s 查看时,文件的状态会变成这样
A cc/qq.txt
对一个文件执行git commit之后但是还没有进行git push时,然后在文件里面添加有新的内容,执行git status -s 查看时,文件的状态会变成这样
M qq.txt
-------------------------------------------------------------------------------
1. 用git拉取远端代码:git clone 地址
2. 用git进行提交文件到服务器:git add filename ; git commit–m “说明”
3. 用git把文件推送到远端服务器上:git push