一、版本控制
1.本地版本控制系统
人们把项目拷贝到本地磁盘上进行备份, 然后以命名方式来区分. 这种做法好处是简单, 但坏处也不少比如备份比较 多或许就会混淆不同版本之间的区别. 那为了解决这个问题, 有人就开发了一个本地版本的管理系统
2.集中化版本控制系统
诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管 理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出新的文件或者提 交更新
只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新 记录的风险。
3.分布式版本控制系统
Git,Mercurial,Bazaar 以及 Darcs 等, 客户端不只是提取出新版的文 件快照, 而是把原始的代码仓库镜像到本地. 这样一来,任何一处协同工作用的服务器发生故障,事后都可以用任 何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
二、Windows上安装Git
1.安装
在Windows上使用Git,先从Git官网直接下载安装程序,选择指定系统下载,然后按默认选项安装即可
在开始菜单里找到**“Git”->“Git Bash”,**显示出类似命令行的窗口,说明Git安装成功
2.使用
在窗口内输入 git --version 查看git 版本信息如下
在使用用Git工作之前,我们需要做个一次性的配置。方便后续Git能跟踪到谁做了修改,我们需要设置对应的用户 名与邮箱地址。
注意 git config 命令的 --global 参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当 然也可以对某个仓库指定不同的用户名和Email地址。
git config --global user.name "your_username" git config --global user.email your_email@domain.com git config --list 查看所有配置
三、创建版本库并提交文件
1.创建版本库
编写一个文本文件并将文件提交到git仓库
- 初始化git 本地仓库 通过执行 git init 命令在本地初始化一个本地仓库,执行该命令后会在本地初始化一个没有任何文件的空 仓库。
- 新建文本文件 git01.txt 并添加到暂存区
- git status 命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没 有被Git tracked到。
- git add path 通常是通过git add
的形式把 添加到索引库中, 可以是文件也可以是目录。 git不仅能判断出 中,修改(不包括已删除)的文件,还能判断出新添的文件,并把它们的信息添加到索引库中。 - 提交文件到本地版本库文件被添加到暂存区后,执行git commit 命令提交暂存区文件到本地版本库中。 git commit 命令后跟上 -m 属性
- git log :命令用于显示提交日志信息。 (比较常用,后续降到时光穿梭时会经常使用该命令)。
2.修改文件与文件提交
此时当文件修改后 使用 git status 命令可以看到git 检测到文件被修改,git 版本库给出的下一步操作是添加修 改的文件到暂存区 此时执行添加操作命令
执行提交 git commit -m “属性”
git log 命令查看操作日志记录
**注意:**差异比较说明
---
:表示变动前的文件+++
:表示变动后的文件 变动的位置用两个@作为起首和结束 @@ -1,2 +1,3 @@:减号表示第一个文件,"1"表示第1行,“2"表示连续2行。同样的,”+1,3"表示变动后,成为第二个 文件从第1行开始的连续3行。暂存区文件提交与撤销:当发现因失误而将文件添加到暂存区时,git 支持文件的撤销操作 执行命令 git reset HEAD 文件
3.版本回退
- git01.txt 文件已有几个版本,对于历史版本的查看 使用 git log 命令
- git reset 命令用于将当前HEAD复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit等)。
- ,如果提交历史记录较多 可以加入数字控制显示的版本记录数 并且使用git log -3 --pretty=oneline (最多显示三次)
- 回退到上一版本执行 **git reset --hard HEAD^ ** **HEAD^ :将指针之上上一个版本,如果是上上一个就是 HEAD^,上上上一个HEAD^^,**但这样记就比较麻烦,如果回 退版本较多,简写为 HEAD~100 往前回退100个版本 ~后跟数字即可
- ,Git提供了一个命令 git reflog 用来记录用户操作的每一次命令
4.文件删除
- 如果此时发现文件是被误删除呢,不用担心,这里可以将误删除的文件重新从版本库中检出,执行命令:git checkout – 文件名
- 如果确定是要执行删除操作 执行 git rm 文件名 命令即可
四、远程创库
1.克隆远程项目到本地
1.1克隆项目到本地执行 git clone 项目路径
1.2在本地磁盘指定目录下右键 git bash here 操作
2.将本地库推送到远程
1.Git本地库初始化与文件提交
git init
git add file|path 提交文件|文件夹 到暂存区
git commit file|path -m "提交说明" 提交暂存区文件或目录到本地仓库
2.推送本地仓库文件到远程仓库(GitHub)
1.注册github 账户
2.创建远程库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y8A3EKs4-1597568364328)(F:/A20200102/%E9%AB%98%E7%BA%A7%E8%B5%84%E6%BA%90/Git/reference/images/1578123886976.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yv0TAN3O-1597568364332)(F:/A20200102/%E9%AB%98%E7%BA%A7%E8%B5%84%E6%BA%90/Git/reference/images/1578123933439.png)]
3.执行推送(https | ssh(推荐使用))
3.1 生成 ssh 公钥 私钥串
ssh-keygen -t rsa -C "GitHub账户邮箱"
3.2 上传公钥到github
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kNCC7Osp-1597568364334)(F:/A20200102/%E9%AB%98%E7%BA%A7%E8%B5%84%E6%BA%90/Git/reference/images/1578124093445.png)]
3.3 绑定远程库到本地
git remote add origin ssh地址
3.4 推送本地文件到远程仓库
git push -u origin master
3.5 验证是否成功:
ssh -T git@github.com
五、Git分支操作
命令 | 描述 |
---|---|
git checkout branch | 切换到指定分支 |
git checkout -b new_branch | 新建分支并切换到新建分支 |
git branch -d branch | 删除指定分支 |
git branch | 查看所有分支, 并且*号标记当前所在分支 |
git merge branch | 合并分支 |
git branch -m | -M oldbranch newbranch | 重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命 名,否则,使用-m进行重命名。 |
1.创建本地分支,查看分支
创建分支
git checkout -b 分支名
查看分支
git branch
2.切换指定分支,执行合并操作
切换:
git checkout 分支名
合并:
git merage 合并的分支
3.重命名分支
git branch -m 原分支名 新分支名
4.删除分支
不能再待删除的分支上执行删除当前分支操作
git branch -d 分支名
5.分支Push与Pull操作
命令 | 描述 |
---|---|
git branch -a | 查看本地与远程分支 |
git push origin branch_name | 推送本地分支到远程 |
git push origin :remote_branch | 删除远程分支(本地分支还在保留) |
git checkout -b local_branch origin/remote_branch | 拉取远程指定分支并在本地创建分支 |
6.分支操作冲突出现与解决
6.1本地分支操作冲突
修改master与leaf01分支前git01.txt 文件内容状态
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容 <<<<<<< HEAD 当前git 指向分支 这里指的为master ======= 分离不同分支修改的内容 >>>>>>> leaf01 leaf01 与 master 在git01.txt 同一行同时出现了修改操作 这里git 是不允许发生的
此时出现冲突后 这里对git01.txt 内容进行修改 (实际开发视情况而定 这里将内容合并为一行)
6.2多人协同操作冲突
拉取远程库dev 并在本地创建dev开发库,执行命令 git checkout -b dev origin/dev 这里以同台机器不同窗口来 模拟两个用户操作同一分支同一文件(实际开发时多人操作统一文件冲突情况比较常见) 这里两个客户端以c1与c2来描述
c1 客户端本地修改dev 分支git01.txt 文件并在本地执行提交操作
C2 客户端在本地同样修改了dev分支git01.txt 文件并在本地执行提交
此时解决方式Git 已有对应提示 Push 之前先执行Pull 操作 将远程文件拉取到本地 解决完冲突后再次执行Push 操 作
7.标签管理
命令 | 描述 |
---|---|
git tag tag_name | 新建标签 默认为HEAD |
git tag -a tag_name -m ‘xxx’ | 添加标签并指定标签描述信息 |
git tag | 查看所有标签 |
git tag -d tag_name | 删除一个本地标签 |
git push origin tag_name | 推送本地标签到远程 |
git push origin --tags | 推送全部未推送过的本地标签到远程 |
git push origin :refs/tags/tag_name | 删除一个远程标签 |