从今天开始学习git系统,一直听过、想用,公司这边用svn,所以自己抽空学习一下,这么火的东西不会怎么行?
一、准备工作
1,下载git版本控制系统,地址百度上下一个,git网站下载打不开
2,注册个github账号,远程仓库要用
二、开始
1,安装git,按照默认提示一步步安装。一般都成功了。
2,右键git bash 进入命令行模式
三、命令
git init 建立仓库
git config --global user.name ""
git config --global user.email ""
echo 1 > index.html >意思是清空index.html 然后写入1
echo 2>> index.html >>意思追加内容
git add Index.html 添加到缓存区
git commit -m 提交所有缓存区的文件到仓库里去
git status 查看当前目录文件状态
git status -s 加上 -s 参数可以用精简方式
如果git status告诉你有文件被修改过,
- git diff 可查看工作区和暂存区的差异。
- git diff HEAD 可查看工作区和HEAD(当前工作分支)相比的差异
- git diff --cached 可查看暂存区和历史区的差异.
git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本, 工作区 不变,回退历史区 和 暂存区
git reset –soft:回退到某个版本,只回退了历史区的信息,工作区 和 暂存区 都不变
git reset –hard:彻底回退到某个版本,回退 工作区 、历史区 和 暂存区 。
Git鼓励大量使用分支:
- 查看分支:
git branch
- 创建分支:
git branch <name>
- 切换分支:
git checkout <name>
- 创建+切换分支:
git checkout -b <name>
- 合并某分支到当前分支:
git merge <name>
- 删除分支:
git branch -d <name>
- 放弃这次合并:
git merge --abort
当Git无法自动合并分支时,就必须首先解决冲突。
解决冲突后,再提交,合并完成。
用 git log --graph --oneline
命令可以看到分支合并图。
git branch
命令查看当前分支分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;
你和你的小伙伴们每个人都在dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。
所以,团队合作的分支看起来就像这样:

小结
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast
forward
合并就看不出来曾经做过合并。
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
$ git checkout -b issue
$ echo fixbug >> index.html
$ git add index.html
$ git commit -m "fixbug"
修复bug等操作
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff -m "merge issue" issue
回到相应的分支 进行合并
$ git branch -d issue
删除bug分支
回到原来的分支
$git checkout dev
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug.
修复后,再:
git stash list
查看一下有哪些stashgit stash apply
应用某个stash而不删除stashgit stash pop
应用某个stash并且删除stashgit stash clear
一次性清理所有的stash
从而回到工作现场
- 命令
git tag <name>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id
; git tag -a <tagname> -m "标签注释..."
可以指定标签信息;- 命令
git tag
可以查看所有标签。
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git
;
关联后,使用命令git push -u origin master
第一次推送master
分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
$ git clone git@github.com:fangdown/demo.git 克隆远程库
git push origin dev
$ git checkout -b dev
$ git push origin dev
查看远程库信息,使用git remote -v
;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name
,如果推送失败,先用git
pull
抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream-to=devorigin/branch-name
从远程抓取分支,使用git pull
,如果有冲突,要先处理冲突。
- 命令
git push origin <tagname>
可以推送一个本地标签; - 命令
git push origin --tags
可以推送全部未推送过的本地标签; - 命令
git tag -d <tagname>
可以删除一个本地标签; - 命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。
git config --local
git conifg --user.namegit配置的增删改查
git config --global --add user.name zfpx 增加键值
git config user.name 查看用户名
git config --get user.name 取得用户名
git config --list --global 列出global所有的变量
git config --global --unset user.name zfpx 删除一个值
git config --global --unset user.name 删除所有值
git config --global user.name zfpx
git config --list --global 列出所有的值
git全局忽略
git config --global core.excludesfile ~/.gitignore_global
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。