1.git安装
1.1官网下载
Git
安装详情见https://www.cnblogs.com/liuwenwu9527/p/11688323.html
1.2配置
2.git基本概念
2.1本地
工作区(Working Directory):就是你在电脑里能看到的目录。说人话就是idea直接能看到的这部分纯代码区域。(不含 .git 目录)
暂存区(stage):从物理位置上看隶属于本地库,是版本库中设立一个暂存区(Stage or Index)。从功能上逻辑来看,是工作去本版本库交互的中间人。工作区文件的提交或者回滚首选都是通过暂存区。
本地仓库,也叫版本库(repository):代码下载下来后隐藏的.git目录,这个目录不属于工作区。即又可以称为版本库。 Git的版本库里存了很多东西,其中最重要的有三个,一个就是称为stage的暂存区,第二个就是Git为我们自动创建的第一个分支master,第三个就是指向master的一个指针叫HEAD。
由此可见,事实上,如果只是个人开发,本地结构已经很够用了,完全能满足代码的提交,回滚,版本控制,等操作。
2.2远程
2.1.1 代码托管中心是干嘛的呢?
我们已经有了本地结构,本地结构可以帮我们进行版本控制,为什么还需要代码托管中心呢?
它的任务是帮我们进行团队协作和跨团队写作开发。
单一团队程序员之间协作
多团队程序员之间协作
2.1.2 代码托管中心分类
局域网环境下: 可以搭建 GitLab服务器作为代码托管中心,GitLab可以自己去搭建
外网环境下: 可以由GitHub或者Gitee作为代码托管中心,GitHub或者Gitee是现成的托管中心,不用自己去搭建
3.git常用操作
3.1向远程提交代码
我们将文件往Git版本库里添加的时候,是分两步执行的:
第一步,代码提交到本地仓
1.git add 文件,文件从工作区添加到暂存区
2. git commit -m 文件 ,文件从暂存区提交到本地仓的当前分支上去。(因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在git commit就是往master分支上提交更改。简单来说,就是add的文件全部放到暂存区,然后commit一次性提交暂存区的所有修改)
第二步,将本地仓库的修改Push到远程仓库
git push <远程主机名> <本地分支名>:<远程分支名>
3.2不同阶段的代码回退
3.2.1 reset命令:前进或者后退历史版本
举例
hard参数/mixed参数/soft参数
hard参数
说人话就是执行了git reset --hard 某个commit提交的索引后本地的代码也就没了,变成了该索引对应的那个快照的代码。如果本地代码不要了,直接就hard就行。
mixed参数
说人话就是,执行git reset --mixed 某次commit的索引后,本地代码还是当前代码,但是暂存区和本地仓(版本库)中已经是该索引对应的快照代码了。
soft参数
说人话就是,执行git reset --soft 某次commit的索引后,本地代码还是当前代码,暂存区也是本地代码,只是本地仓(版本库)中已经是该索引对应的快照代码了。
3.2.2 reset使用场景
假如你修改了工作区,并把工作区中的修改 git add 到了暂存区。如果你想撤销工作区和暂存区中的修改。
git reset --hard head # 简写为 git reset--hard
如果你仅仅只是想要撤销暂存区中的修改。
git reset --mixed # 简写为 git reset
注意,由于没有进入版本库,只是撤回暂存区,所以 hard 后面不用根header~n ,header^
假如你修改了工作区,并把工作区中的修改 git add 到了暂存区,然后又 git commit 提交到了版本库。
如果你想回退到上一个版本,可以使用下面的命令。
具体的解决方法有: git reset --hard head^ 或 git reset --hard HEAD~1 ,这样本地代新写的代码被重置了,暂存区也回退了
注意:
1如果你回退版本时,采用的是 『 git reset --mixed 版本号 』,--mixed 其实本来就是默认选项。
那么,你只是更改了 head 的指向和回退了暂存区,而并没有回退工作区。
2如果你回退版本时,采用的是 『 git reset --soft 版本号 』,
那么,你只是回退了本地仓的版本号,暂存区和工作区没回退。
而,往往我么回退的场景就是代码提交到本地仓了,发现有问题,
这个时候,1要去回退,让本地仓不出现有问题代码,2是不想把本地代码清零了,因为要在这个基础上修改。
所以,一般采用git reset --soft HEAD "版本号"的方式。为啥不用git reset --mixed 呢,好想也行
假如你修改了工作区,并把工作区中的修改 git add 到了暂存区,然后又 git commit 提交到了版本库,并将本地分支的代码推上了云端。
如果你想撤销刚push到云端的代码,可以按以下步骤:
1.回退本地分支代码到上个版本 git reset --hard head^
2.将本地分支push到云端进行覆盖 git push origin wlb:master -f
我在想最好是不是git reset --soft head^ git push origin wlb:master -f ,因为这样既达到效果,又不重置本地代码
另外,可见远程的代码只能覆盖,不能撤回。
3.2代码拉取
3.2.1 fork项目
在github或gitee页面上, 点击fork按钮, 将B的项目拷贝一份到A自己的代码仓库中.
3.2.2 clone项目,并添加远程项目路径
克隆A自己的代码仓库到本地.
git clone https://github.com/A/A.git
3.2.3查看项目远程仓库配置,如果没有源的地址则新增
git remote -v
3.2.4 添加源项目地址
将B的项目作为最新代码的参考标准(upstream 是上游仓库的别名,别名随意命名)git remote add upstream https://github.com/B/B.git
3.2.5确认是否添加成功
git remote -v
3.2.6 获取源项目的更新
git fetch upstream
git remote add origin https://gitee.com/northeast-big-bared-flower/kd-osysteam.gitgit pull
git push -u -f origin master
3.2.7 当自己fork的仓库更新时,需要
git fetch upstream
git merge upstream/master