【一文解决】Git使用手册:手把手零基础上手git协作开发与代码管理—基于gitee

本文对 git分区 采用的分类方法是:工作区(Working Directory)、暂存区(Stage/Index)、版本库/仓库(commit History)

一:基础协作:单分支开发(仅需上传与下载)

0、仓库管理者与协同开发者的角色区别

仓库管理者即在gitee创建仓库并上传初始代码的人。
协同开发者即加入到仓库管理者所创建的gitee仓库并一起开发的人。

1、仓库管理者和协同开发者都要做的

(1)下载git、注册gitee

git国内镜像
注册gitee:用户名尽量用英语,邮箱用国内可以轻易登录的邮箱。

(2)新建一个文件夹并在这个文件夹中打开git

对于仓库管理者,这个文件夹是用于直接存放代码的。
对于协同开发者,这个文件夹是用于存放 存放代码的文件夹 。(你没看错,就是两个“存放”。
打开git的方式:
右键刚刚新建的文件夹 — git bash here

(3)配置username和email

git config --global user.name "引号里面填你的username"
git config --global user.email "引号里面填你的email"

(4)重新生成并获得ssh public key(下称spk)

a)重新生成spk
ssh-keygen -t rsa -C "引号里面填你的email" (之后三连回车)(在这个过程中会告诉你生成的新ssh在哪里,注意千万不能把生成的文件从它生成的那个文件夹中移走)
如果问你要不要overwrite(覆盖)就填y(yes)。
b)查看生成的ssh public key
新生成的spk的位置会在生成过程中告诉你,但是一般是会在默认位置。
默认位置:c盘:user(就是“用户”文件夹)/(电脑用户名)/.ssh/id_rsa.pub
用记事本打开id_rsa.pub文件:以ssh-rsa 开头,以账号的注册邮箱结尾的一串乱码就是spk
举例:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGI2vDj7UpVCUEFgeUW527SaUZqpXaN/YWU2KEwLo/bzZX1kA/icQLqD4dtzcTYAK92JUNFxGhGYEzYVMLS9aZJ+jcl2NpUltkL/Z4lmIfkWH3rp8eusDB31pXHnsByxqzyA4O0OWZBw6/9OgevGN5Uf6/zZB5AuLSbrzgNYw7P5MaJyyIY3qmbP49yc14sX9843PyPtmtZX6ZHOPqxRVsWvV8wWeXxPgX+bHnHl3zSnpAMqwB/UxuRjoAx6xW5XLJaUcE3kYlaU/uXXzSaT55LjWQXBQ/wSWV9sP3FpOr8Ty7Gaha6c8WnXWQyPCQJwmAAakD1XYw4eVFiW8HYB42NkdOS0wHFYKc2ttmU2f9t0xqYt+5kE9RmxcIumwgrIYcWhOybtn5Y5LxaBBULpkDb6U3nvEQshFnMzgEINXk+dZtj1TkIHf4BNSFjusbBbPq6Vlg54OEM0BPvW3fN7OzrYA2LduaG1dSInmDO4pKuvCM2MAMdOsp5U1iwo3JOws= XXXXXXXXX@xxx.com
(5)将 仓库管理者、协作开发者 的ssh public key都添加到 仓库管理者 的码云

如果你是仓库管理者,你需要将 自己以及其他协作开发者的 spk 添加到自己的码云spk库,这样才能成功地让 git与你在gitee上创建的远程仓库 相连。

如果你是协同开发者,因为你是加入到别人的仓库中和别人一起开发,所以你要将自己的spk加到你要加入的仓库的创建者那里的码云spk库。

添加地址(让仓库管理者打开这个链接):https://gitee.com/profile/sshkeys

(6)测试是否与gitee成功连接

git终端输入ssh -T git@gitee.com
提示Hi! <仓库管理者的用户名>.....(就是gitee向你问好) ,说明这一步没问题。
注意:无论仓库管理者还是协同开发者,Hi!之后跟的都是仓库管理者的用户名(因为spk都是加到了仓库管理者的码云spk库)

(7)获得gittee远程仓库地址

常用协议有https和ssh,我们这里用ssh(速度快),仓库地址的形式是:

git@gitee.com:mygiteelib/test.git(下面都会拿这个仓库地址举例)

假如你是仓库管理者,则由你去在gitee新建一个仓库(推荐初始化仓库的时候生成md说明文件,用于后续检验操作是否成功)。在仓库的主界面点击 克隆/下载-SSH-复制 把仓库地址复制下来,发给你的团队成员。同时,生成 邀请他人成为你的gitee远程仓库的协同开发者 的链接,发给你的团队成员。

假如你是协同开发者,那你要从仓库管理者那里获得他那个gitee仓库的地址。

2、仓库管理者才要做的

1)在之前新建的文件夹中打开git同时进行git初始化

在你之前新建的文件夹中放入代码文件

退出这个文件夹,右键这个文件夹,选择 git bash here

输入命令 git init ,初始化这个文件夹为git本地仓库

2)将你最新加入的代码加入git本地仓库

git add .将新的代码文件加到git暂存区
git commit -m "add v1.0 code"将暂存区中新的代码文件提交到git本地仓库

3)本地仓库与远程仓库建立连接并下载gitee远程库中现存的文件,最后上传本地仓库的文件到远程仓库

远程仓库中“现存的文件”就是你新建仓库时伴随新建的说明markdown文档。

git remote add origin <远程仓库地址> 关联仓库:本地仓库添加gitee上的仓库作为远程仓库,起名oigin

git pull origin master --allow-unrelated-histories 下载gitee远程库中现存的文件,并与本地仓库现存的文件合并

git branch --set-upstream-to=origin/master master 关联分支:本地仓库主分支master与远程仓库主分支origin/master关联

git push origin master 上传上传本地仓库的文件到远程仓库

3、协同开发者才要做的

(0)要等仓库管理者的所有步骤做完,才可以开始协同开发者的步骤
(1)第一次同步代码。

此步紧接着 一、1、(6)。这一步还会同时关联本地仓库与远程仓库,以及同时关联本地仓库分支与远程仓库分支
$ git clone <远程仓库地址>

(2)本地分支与远程分支关联(确保分支关联上了)

git branch --set-upstream-to=origin/master master 本地仓库主分支master与远程仓库主分支origin/master关联。

4、仓库管理者和协同开发者之后都会用到的命令

这些命令对仓库管理者和协同开发者的作用是一摸一样的

首先要在放代码的文件夹“git bash here”来打开git。

1)下载/拉取远程仓库的代码文件并与本地仓库代码文件合并 的流程

就只要输入git pull。这个命令用于将远程库的中的代码文件下载到本地并与自己的代码文件合并。注意这个命令实际上是把远程仓库中所有的分支都下载并合并到本地的仓库了,如果远程仓库是多分支开发的话,不能轻易使用这个命令。但由于现在是单分支开发,所以这样做完全没问题。

2)推送/上传的流程

假设你在文件夹中增加了新的文件111.txt(或修改了111.txt)

首先,输入git pull ,这个命令用于将远程库的中的代码文件下载到本地并与自己的代码文件合并(因为不知道别的团队成员在过去的一段时间有没有更新远程库的内容)

然后,git add .这个命令是将工作区所有的修改都提交到暂存区

然后,git commit -m "add 111txt",这个命令是把暂存区的修改提交到本地库的仓库,双引号中的内容是本次提交的注释

最后,git push origin master ,将自己的修改提交到远程库。(这个命令的用法是git push origin 分支名称,但因为从头到尾我们的远程库和本地库都是单分支,所以就直接填git给我们默认设置的主分支)。

5、其他问题

a)git提交过程中:Error325(E325)
b)fatal: refusing to merge unrelated histories解决
c)解决"requested upstream branch ‘origin/master’ does not exist"
d)Git: There is no tracking information for the current branch.

$ git branch --set-upstream-to=origin/master master

e)git 合并分支出现 Please enter a commit message to explain why this merge is necessary.

二、分支管理与多人协作

1、分支操作:

(1) branch 类命令

(a) 列出本地所有分支 git branch
(b) 创建一个新分支 git branch <分支名称>
图中的master和xuzhangzheng1这两个分支在显示的时候有些区别,master分支前多个一个*号,且master分支字体颜色与xuzhangzheng1分支不同,这种显示区别的原因是因为,当前使用的分支为master分支。
在这里插入图片描述
(c)删除指定本地分支
git branch -d <删除的分支名称> 用于删除已经与其他分支合并的分支
git branch -D <删除的分支名称> 强制删除:用于删除任何一个你想删的分支
记得删除某个分支前先离开这个分支
如下图所示,首先使用git branch查看本地现有分支,再进行删除apiThirdTest分支操作.
操作完成后,可以看到提示:Deleted branch apiThirdTest (was a5d8ca0)
含义为:删除了分支apiThirdTest,本次仓库版本号为a5d8ca0
删除完毕后,我们再使用 git branch 查看本地现有分支,可以看到本地已经没有apiThirdTest分支了,确认已经删除了。删除分支异常解决方案
在这里插入图片描述
(d)删除指定远程分支git push origin --delete <删除的分支名称>
本命令是删除远程仓库中的指定分支名称的分支,不会删除本地仓库中对应名称的分支。

(2)切换分支(采用新命令switch类)(逐渐舍弃checkout类)

为什么舍弃checkout类命令?
目前 切换分支 以及 创建分支并切换到新分支 ,是使用
git checkout <分支名>git checkout -b <分支名>

有了 git switch 之后,对应的命令分别为
git switch <分支名>git switch -c <分支名>

(3)本地合并分支

在本地,合并某分支到当前分支有两种方式
git merge <要合并到当前分支的分支名字> (可能会使用Fast-Forward模式)
git merge --no-ff -m "merge with no-ff" <要合并到当前分支的分支名字> (禁用Fast-Forward模式)
区别在于:下面的合并方式禁用了Fast-Forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
留意:合并的代码的来源是仓库中的代码。也就是说,在合并前,你要先把修改过的代码add+commit到仓库。合并后的新代码(无论有没有冲突)会在你的工作区,你要先检查能不能实现功能,再决定提交到仓库。
如果报冲突,则修改冲突,再add+commit到仓库。
小tips:查看分支合并图git log --graph --pretty=oneline --abbrev-commit
下图为git merge解决冲突并提交后的分支合并图:
在这里插入图片描述

(4)分支命令小总结

查看分支:git branch
创建分支:git branch <分支名>
切换分支:git switch <分支名>
创建+切换分支:git switch -c <分支名>
合并某分支到当前分支:git merge <分支名>
删除已合并的分支:git branch -d <分支名>
强制删除任一分支:git branch -D <分支名>

2、多人协作:git fetch 拉取远程最新分支

fetch与pull的区别:pull拉取后还会合并,而fetch不会。

3、多人协作:稳定高效地pull与push

参考解决冲突
拉取:拉取远程仓库中指定分支代码到本地,与本地的当前分支合并git pull origin <远程分支名称> PS:git pull命令(无任何参数的pull)仅对已经与远程分支建立联系的本地分支有效,作用是将当前分支对应的远程分支的最新版本拉取并合并到本地
推送:推送本地仓库中当前分支代码到远程,与远程的指定分支合并git push origin <远程分支名称>

正确的操作流程:必记!必记!
(1)使用命令前,需要保证工作区、暂存区、本地仓库中的代码文件一摸一样。即使用git add .git commit -m "prepared for pull/push"
(2)先与远程库中当前分支的最新版本合并 git pull
PS:如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to=origin/<远程分支名称> <本地分支名称>
(3)如果拉取合并无冲突,则直接进入下一步(4);如果合并有冲突,则解决冲突(点击展示解决冲突的方法),并在本地提交(即add+commit),再进入下一步(4)
(4)推送本地分支到远程git push origin <远程分支名称>
在这里插入图片描述

4、远程并行协作开发简明用法

(1)远程并行协作开发概念

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
在这里插入图片描述

哪些分支需要推送?
master分支是公布的稳定版主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发,以及你想不想通过云端保存你的分支。

(2)远程库与协作的常用命令

参考git多人协作
(a)查看远程库信息git remote -v
(b)协作开发者第一次同步远程库到本地git clone <仓库地址>
PS:本命令默认只会下载远程库的主分支,即origin/master。对于多分支的远程库,若clone后还需要开发除主分支以外的远程库中已存在的分支,则需要用到下面第©条命令
(c)clone后将远程库中某个分支下载到本地git switch -b <本地分支的起名> origin/<远程库中分支的名字>
PS:<本地分支的起名> 与<远程库中分支的名字>最好一样,方便查看。用了这条命令后,尽管本地分支中的内容与远程库中的该分支是一样的。但是本地分支和远程分支依旧不是关联的(这会导致push这个分支时报错),此时需要用到下面第(d)条命令
(d)本地分支与远程分支建立联系 git branch --set-upstream-to=origin/<远程库中分支的名字> <本地分支的名字>
(e)拉取远程分支到本地并与本地分支合并 git pull
( f)推送本地分支到远程并与远程分支合并 git push origin <远程分支名称>

三、版本管理

1、撤销修改与版本回滚:撤销工作区修改、撤销暂存区修改、撤销仓库区修改(也即版本回退)

(1)场景1:撤销工作区修改:
当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- <file>
(2)场景2:撤销暂存区修改:
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
(3)场景3:撤销仓库区修改/版本回退:
已经提交了不合适的修改到版本库时,想要撤销本次提交,则只能使用版本回退,不过前提是没有推送到远程库。

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

2、文件删除与rm命令

参考 Git:移除文件----git rm命令的使用
这里有总结:
(1)rm test.txt :作用上等同于在文件管理器右键删除文件
本命令仅删除工作区的文件,并不删除版本库的文件。
想要删除版本库文件还要执行下面的命令:
git add test.txt
git commit -m "delete test"
(2)git rm test.txt
(3)git rm -f test.txt
(4)git rm --cached test.txt
总而言之:删除文件的最简单方法就是:文件管理器中删除文件 + add + commit

3、查看不同区的差异与diff命令

参考git diff 、git diff --cached 命令详解
git diff 查看修改后的本地工作区中的文件与暂存区比较后的差异
git diff --cached查看add后的本地暂存区中的文件与仓库区比较后的差异
git diff HEAD -- readme.txt查看工作区仓库区里面最新版本的区别

四、其他操作

1、本地项目关联到远程git仓库

五、Git的二三事/碎碎念

1、Git的分区:

廖大大的教程中把git分为工作区(Working Directory)版本库(Repository),而版本库(Repository)又分为暂存区(Stage/Index)分支

同时,也有很多人认为git是并列的三个区:工作区(Working Directory)暂存区(Stage/Index)版本库/仓库(commit History)

在学习时要留意上下文采用哪种说法。

2、解决git status不能显示中文

status查看有改动但未提交的文件时总只显示数字串,显示不出中文文件名,非常不方便。如下图:
在这里插入图片描述

  • 原因
    在默认设置下,中文文件名在工作区状态输出,中文名不能正确显示,而是显示为八进制的字符编码。
  • 解决办法
    将git 配置文件 core.quotepath项设置为false。
    quotepath表示引用路径
    加上--global表示全局配置

git bash 终端输入命令:

$ git config --global core.quotepath false

版本 V3.2

如您有其他问题,希望可以通过留言得形式及时交流,有书写错误和可优化的地方也希望及时提出,感谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值