1.什么是Git?
Git是一款分布式源代码管理工具(版本控制工具)
我们写的代码需要使用Git进行管理。
源代码有必要管理起吗?
1.0
2.0 //
svn,vss,vcs… git
有必要,因为人工的去处理不同的版本,做相应备份会很麻烦。
Git是linux之父当年为了维护linux—linus之前也是手动维护合并把文件发给Linus
linus自己写了一个版本管理的工具(Git)
我理解的git是:
比如说在本地写好某一个编程文档时,发现有些地方需要修改或者删除,
有的人可能会直接在当前文件中直接修改,有的人会复制一份在上面修改,
然后删除没用的文件。但是当你发现还是原来的文件好或者另外的版本好时,就可能手足无措了。因为你已经把他删掉了,
此时就可以使用git工具。可以在本地建一个版本库,
每当需要修改时,就可以把之前的版本提交并标明此版的特点。
这样文件夹里就只有一个编程文档了。当你需要哪个版本时,
只要在版本库中恢复一下就可以了。
我对Git理解是:它能自动帮我记录每次项目的改动,
可以让成员间修改调试,这样子我们对项目管理就不用这么麻烦了,
也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以。
Git就像一个动态仓库,记录着我们修改的代码痕迹,同时你也不用担心和维护它。
特点:
Git易于学习, 占用空间小,性能快如闪电。它优于 Subversion、CVS、Perforce 和 ClearCase 等 SCM 工具,
具有便宜的本地分支、方便的暂存区和 多个工作流等功能。
2.git 与 svn的区别?
svn 集中式代码版本控制管理工具
git 分布式代码版本控制管理工具 git 最流行
集中存放在服务器端 传统 url地址: 账号名:密码
svn集中式的 如果出现svn服务器出现故障 每个用户都不能访问服务器 代码无法同步, git就没有这种问题。
3.git与github、码云、gitlab的关系
github、码云、gitlab都是在线的代码托管平台
他们都支持git管理代码的方式
github.com: 全球最大免费代码托管平台 码云: 国内免费代码托管平台 gitlab:企业项目开发使用广泛。
4.Git安装
初始化Git仓储/(仓库)
这个仓库会存放,git对我们项目代码进行备份的文件
在项目目录右键打开 git bash
命令: git init
自报家门
就是在git中设置当前使用的用户是谁
每一次备份都会把当前备份者的信息存储起来
命令:
配置用户名:git config --global user.name "xiaoming"
配置邮箱: git config --global user.email "xm@sina.com"
把代码存储到.git仓储中
1.把代码放到仓储的门口
git add ./readme.md 所指定的文件放到大门口
git add ./ 把所有的修改的文件添加到大门口
2.把仓储门口的代码放到里面的房间中去
git commit -m "这是对这次添加的东西的说明"
可以一次性把我们修改的代码放到房间里(版本库)
git commit --all -m "一些说明"
–all 表示是把所有修改的文件提交到版本库
查看当前的状态
可以用来查看当前代码有没有被放到仓储中去
命令: git status
git中的忽略文件
.gitignore,在这个文件中可以设置要被忽略的文件或者目录。
被忽略的文件不会被提交仓储里去.
在.gitignore中可以书写要被忽略的文件的路径,以/开头,
一行写一个路径,这些路径所对应的文件都会被忽略,
不会被提交到仓储中
写法
/.idea 会忽略.idea文件
/js 会忽略js目录里的所有文件
/js/*.js 会忽略js目录下所有js文件
5.码云创建仓库 与本地仓库与远程仓库的推送
拥有ssh地址
git@gitee.com:xxxxx/class_2104.git
git remote add origin git@gitee.com:xielong196/ok.git 定向仓库地址
git remote -v 查看当前定向的分支
git push -u origin master 本地仓库推送至远程仓库
注意:可能会有报错
1> 定向地址错误
git remote rm origin
git remote add origin git@gitee.com:xielong196/class_2012.git
git push -u origin master -u 表示下次不需要写master(git会把当前分支与远程的指定的分支进行关联) 下次直接写 git push
2> 先把远程仓库内容同步到本地仓库, 在推送
git pull origin master 简写方式
git push origin master
故障及解决:
! [rejected] master -> master (non-fast-forward) error: failed to push some refs to ‘git@github.com:thewar3/demo.git’
hint: Updates were rejected because the tip of your current branch is behind
解决方案
1、git pull origin master --allow-unrelated-histories //把远程仓库和本地同步,消除差异
2、重新add和commit相应文件
3、git push origin master
4、此时就能够上传成功了
git克隆
git clone git@github.com:thewar3/react-sell.git
git clone http://38.106.80.45:8070/zhangh/yb-admin.git
6.git fetch 与 git pull区别
简单来说: git pull=git fetch+git merge 不建议用git pull
实际上:git pull看起来像git fetch+get merge,但是根据commit ID来看的话,他们实际的实现原理是不一样:
git pull的问题是它把过程的细节都隐藏了起来,以至于你不用去了解git中各种类型分支的区别和使用方法。当然,多数时候这是没问题的,但一旦代码有问题,你很难找到出错的地方。
7.查看日志
git log 查看历史提交的日志
git log --oneline 可以看到简洁版的日志
8.回退到指定的版本
git reset --hard Head~0
表示回退到上一次代码提交时的状态
git reset --hard Head~1
表示回退到上上次代码提交时的状态
git reset --hard [版本号]
可以通过版本号精确的回退到某一次提交时的状态
git reflog
可以看到每一次切换版本的记录:可以看到所有提交的版本号
9.分支
默认是有一个主分支master
创建分支
git branch dev
创建了一个dev分支
在刚创建时dev分支里的东西和master分支里的东西是一样的
切换分支
git checkout dev
切换到指定的分支,这里的切换到名为dev的分支
git branch 可以查看当前有哪些分支
两个命令的简写
git checkout –b dev
删除分支
git branch –d dev
合并分支
git merge dev
合并分支内容,把当前分支与指定的分支(dev),进行合并
当前分支指的是git branch命令输出的前面有*号的分支
git rebase dev
git rebase 保留主要commit 建议用rebase
git merge 保留所有的commit
合并时如果有冲突,需要手动去处理,处理后还需要再提交一次.
撤销分支的合并:
1:git reset --hard 版本号
2:git revert 版本号 -m 1/2
10.GitHub
https://github.com
不是git,只是一个网站–全球最大的代码托管平台
只不过这个网站支持git方式管理代码
提交代码到github(当作git服务器来用)
git push [地址] master
示例: git push https://github.com/huoqishi/test112.git master master
会把当前分支的内容上传到远程的master分支上
git pull [地址] master
示例: git pull https://github.com/huoqishi/test112.git master
会把远程分支的数据得到:(注意本地-要初始一个仓储!)
git clone [地址]
会得到远程仓储相同的数据,如果多次执行会覆盖本地内容。
11.团队开发协作中碰到的问题: 操作文件冲突(版本冲突)
版本冲突问题解决:
1.先git pull 下拉远程仓库代码
2.然后再代码中找到发生冲突的代码
3.开发人员协商使用哪些代码
4.然后再git add . git commit -m “描述内容”
5.git push 推送代码至远程仓库。