git:版本控制器,控制的对象是开发的项目代码。
作用:在多人开发时
git名词解释
git:是版本管理软件,可以装在不同操作系统平台,主要用来做版本管理。
github:全球最大的开源软件仓库,国内公司一般不放在github。
gitee:码云,中国版的github,少量公司用码云。
gitlab:公司内部使用的代码托管平台。
下载对应版本:https://git-scm.com/download ,一路下一步
同样可以做版本管理和合并代码的软件还有SVN。
svn :集中式管理,cs架构,客户端需要配合服务端才能正常使用功能

git:分布式管理,单台机器就能进行版本管理


git工作时会划分出三个区:
工作流程:在工作区修改代码后,先提交到暂存区,暂存区再提交到版本库,代码才被版本管理,被管理的版本可以随时回退。
各个区域可以相互操作,但工作区不能直接提交到版本库。
git不管理空文件夹,文件夹下有文件,才会被管理
初始化仓库
# 当前文件夹当做仓库git init# 在当前文件夹下创建一个仓库git init 仓库名

在仓库目录终端下 - 设置全局用户,保存在 C:\Users\用户文件夹\.gitconfig文件中,所有仓库下都可以使用
git config --global user.name '用户名'git config --global user.email '用户邮箱'在仓库目录终端下 - 设置局部用户,保存在当前仓库\.git\config文件中(有局部用户优先使用局部用户)
git config user.name '用户名'git config user.email '用户邮箱'查看仓库状态,当仓库中有文件增加、删除、修改,都可以在仓库状态中查看。
# 查看仓库状态git status# 仓库状态的简约显示git status -s
工作区提交到暂存区,仓库状态红变绿
# 提交所有变更的文件git add .# 提交指定变更文件git add 文件名暂存区所有内容提交到版本库,需要设置用户,仓库状态绿变无
git commit -m '注释内容'查看版本管理信息,每次更改文件后提交到版本库就是一个版本
# 显示谁在什么时间提交的,版本号是多少git log# 简略显示版本信息git reflog# 查看时间点之前|之后的日志:git log --after 2018-6-1git log --before 2018-6-1git reflog --after 2018-6-1git reflog --before 2018-6-1# 查看指定开发者日志git log --author author_namegit reflog --author author_name
工作区文件回退到某个版本
# 回滚到上一个版本:git reset --hard HEAD^git reset --hard HEAD~# 回滚到上三个版本:git reset --hard HEAD^^^git reset --hard HEAD~3# 回滚到指定版本号的版本:git reset --hard 版本号暂存区拉回到工作区,仓库状态绿变红
git reset HEAD把当前工作区的更改(不包含新增,包含修改和删除),回退回去
git checkout .在仓库目录下,新建一个 .gitignore 文件,文件中写目录或者文件或者模糊匹配,它可以完成对这些文件的忽略。
.gitignore内容:
eg:a.txt:项目中所有a.txt文件和文件夹都会被过滤/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
git分支的概念,可以认为分支就是当前工作目录中代码的一份副本。 使用分支,可以让我们从开发主线上分离出来,以免影响开发主线,分支开发完毕后可以合并到主线,即不影响主线,又修改了代码。
不同分支的操作,是相互独立的。

创建分支
git branch 分支名切换分支
git checkout 分支名查看分支
git branch删除分支
git branch -d 分支名合并分支,假设当前在master分支执行了git merge dev,即把dev分支合并到了master分支。
git merge 分支名上面都是在本地做代码管理,如果需要协同开发,把多人的代码合并到一起,需要有一个远程仓库,都把代码提交到远程仓库,远程仓库帮我们做合并。
github、gitee、gitlab 都是远程仓库。
1)你作为项目仓库初始化人员: 线上要创建空仓库 => 本地初始化好仓库 => 建立remote链接(remote add) => 提交本地仓库到远程(push) 2)你作为项目后期开发人员: 远程项目仓库已经创建成功 => 复制远程仓库到本地(clone) => 进入仓库就可以进行接下来的开发# 查看仓库已配置的远程源git remotegit remote -v# 删除远程源git remote remove 源名# 添加远程源git remote add 源名 源地址# 提交代码到远程源git push 源名 分支名# 从远程源拉取代码git pull 源名 分支名# 克隆远程源git clone 远程源地址1.创建空仓库


2.本地初始化好仓库
git init3.建立remote链接(remote add)
git remote add origin https://gitee.com/xxxx4.提交本地仓库到远程(push),提交时需要输入gitee的用户名密码。
git push origin master
没有建立remote链接
仓库克隆,在当前文件夹内生成。
git clone https://gitee.com/xxxx建立了remote链接
git pull 源名 分支名gitee官方创建公钥私钥:生成/添加SSH公钥 - Gitee.com
生成公钥:邮箱可以任意填写
ssh-keygen -t rsa -C "*@*.com"查看公钥:
C:\Users\Administrator\.ssh\id_rsa.pub码云线上添加公钥:设置 => SSH公钥 => 添加公钥

添加完成后,使用ssh连接远程仓库,以后就不需要使用用户名密码,就可以直接操作gitee了,走的是ssh链接,而不是https链接。
git remote origin git@gitee.com:xxxxx
用dev分支举例1)本地切换到远程要回滚的分支对应的本地分支git checkout dev2)回滚本地分支git reset --hard 版本号3)本地版本强行提交给服务器git push origin dev -f冲突出现的情况:
分支合并出现冲突

master分支对a.txt第一行添加了'asdasd',dev分支对a.txt第一行添加了'bbb',在把合并dev分支到master分支时就会提示冲突,并且a.txt内容会显示为:
<<<<<<< HEADasdasd=======bbb>>>>>>> dev多人在同一分支开发出现冲突同理。

解决
先把冲突的地方多余的删除:
asdasdbbb分析冲突的地方该留哪一个,把不需要的删除即可。
asdasd在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。
git merge合并时,提交记录一并合并过去了,查看记录时就会令人头大;
而通过变基合并分支(git rebase),可以让提交记录更简洁。
git merge合并

git rebase

git fetch与git pull类似,首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。
git pull = git fetch + git merge
JetBrains系列软件其实可以作为git的图形化客户端,这里拿pycharm举例。
pycharm配置git


克隆代码


工作区提交到暂存区(git add)

暂存区提交到版本库(git commit)


查看所有分支,切换分支(右下角)


git pull 和git push


跟历史版本比较


查看所有历史更改
