1) 安装git Git官网
2) 生成ssh key
打开git bash 执行如下命令(其后所有命令都在git bash下执行,之后不再赘述)
ssh -keygen
找到 c:/user/你的当前用户/.ssh目录
把id_rsa.pub发给git服务器管理员配置
3)克隆项目
管理员配置好你的key之后,就可以执行如下命令,克隆出你想要的项目
$ git clone git@url/*/*.git
项目会生成在你的当前目录,后文会说明此命令究竟干了什么
workspace : 工作区,通俗来讲就是你在文件系统,ide中看到的文件,你可以直接经行修改的文件
index : 暂存区 , 一个本地的缓冲区
local repository : 本地仓库,里面有远程分支和本地分支, 处于本地,你不可以直接对其经行修改
remote repository : 远程仓库,位于git服务器上,有效文件最终要提交到的地方
1)clone
$ git clone <远程仓库地址>
此命令从远程仓库clone项目到了你的当前目录并与其建立联系
一般远程仓库名字叫 origin
//查看远程仓库
$ git remote
loacl repository 中会生成一个 origin/master 的远程分支 一个master本地分支
Tip:远程分支仅仅与与远程仓库保持一致
//查看远程分支
$ git branch -a
workspace 中产生一个master本地分支的拷贝,你将在这个分支上工作
//查看本地分支
$ git branch
2)add commit push
// 添加test.txt 到 index(缓冲区)
$ git add test.txt
// 提交缓冲区的文件 到 localrepository 的本地分支 master中
$ git commit test.txt -m"A has done"
// 将loacl repository 中master和origin/master比对是否有冲突 无冲突则推送到 remote repository,至此工作完成
$ git push
git commit -m"提交信息"
提交信息是必须的,否则不给你提交,如图中红色所示
3)fetch merge /pull
员工B需要开始工作,他需要先更新自己的项目,有两种方式
B依次执行如下命令
//本地仓库的远程分支 origin/master 与 远程仓库 的origin 更新,此时你还看不到A的代码,因为的你master分支没有改变,remote origin可加可不加
$ git fetch origin
//将local repository 中的 本地分支master 与远程分支origin/master 同步,这时候你已经可以看到A的代码,可以开始工作了
$ git merge origin/master master
//相当于fetch + merge
$ git pull
以上都是最理想的工作状态,所有员工的工作都没有冲突,当然现实中是不存在这种情况的。
1)产生冲突的原因
产生:多个开发者同时使用或者操作git中的同一个文件,最后在依次提交和push的时候,
第一个操作的是可以正常提交的,而之后的开发者想要执行pull(拉)和push(推)操作的时候,
就会报冲突异常conflict。
解决:保留自己修改的数据,同时保留别人的数据信息。
2)场景
B在修改test.txt文件之后,成功push了。
A第二天继续开始工作,他没有先更新B修改之后的代码就继续在test.txt中进行编辑
工作完成之后 A push代码
这时push 失败了
3)解决冲突
先执行fetch代码,再尝试经行merge
这时提示我们自动合并失败,需要手动处理冲突,并自动进入master|MERGING 状态
打开test.txt
可以看到红框处就是我们需要处理的部分,A保留了A和B的内容并保存
然后执行 add commit再push即可
冲突解决完成,B也可以更新到最新的代码了。
1)何谓分支?
请参考GIT官方对分支的解释
2)为何使用分支
我们在前文说过,你在clone一个项目下来的时候。本地仓库已经存在了一个master分支和origin/master远程分支
origin/master远程分支是直接与远程仓库同步的,我们不用管。
你当然可以直接在master分支上直接开展工作,但是如果你的代码出现问题且你无法快速的解决。
你就可能被迫放弃自己的更改,然后重新clone一给项目。
所以不建议在master直接工作,而是创建一个与master相同的分支,然后再分支上工作。工作完成后再合并到master
具体流程如下
3)场景
1. 先克隆项目
2. 你需要开发一个新功能A,这时你创建一个分支newFunctionA,再此分支上工作
//查看分支
$ git branch
可以看到当前只有一个分支master
*表示当前我们处于哪个分支,括号里的内容也会提示我们目取处于哪个分支
//创建分支 newFunctionA
$ git branch newFunctionA
//切换到 newFunctionA
% git checkout newFunctionA
我们已经成功创建并切换到newFunctionA,可以看到括号内的提示也改变了
3. 工作已经完成
情况A. 如果你的工作出现前文说的问题,你只要执行切换回master分支就可以了,并不需要重新clone项目,
并且你的更改仍存再newFunctionA之中,一条命令就实现了回滚的操作且不丢失你的更改(即使这个更改是错误的)
创建了一个文件
提交
这时我意识到我的代码写错了,并且我没有 时间/能力 直接修复
//切换回master
$ git checkout master
我切换到master分支,发现一切都回到错误之前了,并且提示我的master和远程分支origin/master是一样的。
再切换回newFunctionA,我的更改仍然存在,这就方便我保留其中有用的代码。
情况B 你的工作正常完成,在newFunctionA中commit到本地仓库,切换回master分支,与newFunctionA合并后push
这时master已经和newFunctionA一致了,你可以push了,然后删除newFunctionA分支(当然你也可以保留)
此时工作已经完成
//删除指定分支newFunctionA
$ git branch -d newFunctionA
4)更复杂的场景
你接到了新的任务,开发新功能B,这时你创建了newFunctionB的分支在上开发。
在你开发没有完成的时候,客户反馈之前的功能A出了bug,需要立刻修复,但是此时B功能的代码还不能push
可以按照以下思路解决问题
1. 返回到原先已经发布到生产服务器上的分支(master)。
2. 为这次紧急修补建立一个新分支(debugFunctionA),并在其中修复问题。
3. 通过测试后,回到生产服务器所在的分支,将修补分支合并进来,然后再推送到生产服务器上。
4. 切换到之前实现新需求的分支(newFunctionB),继续工作。
廖雪峰git教程
Git官方教程
15分钟学会使用Git