码云教程
对于网上的项目
一、fork源项目
码云的协作是基于fork(分支)源项目的基础上,才能进行pull request。对要进行协作开发或者学习的项目,fork一份到自己的远程仓库。
这样我们自己的远程仓库就会有一份源工程的副本。熟悉git版本工具开发的朋友,可以把一份fork下来的副本当成一个开发分支。
只有fork下来的副本你才拥有修改的权限,等同于一个拥有开发权限的分支。在这个开发分支中,你可以进行代码学习或者开发,提交修改到远程仓库的副本工程。
二、协同修改操作pull request
这样可以将自己仓库的修改过的分支,提交合并请求到源项目,完成远程协作。
三、拉取源项目最新内容
点击项目标题下源项目旁边的 刷新按钮,便可以拉取最新的源项目数据。
便于及时获取原作者最新的项目更新。
也可以通过给fork下来的副本添加上游仓库地址
使用git 命令更新
1 | git remote add upstream https://gitee.com/xxxxxxxx.git |
注意: 更新上游仓库 会覆盖本地修改,所以请pr项目评审(Project Review) 接受之后 在更新
对于工作的项目
创建本地代码仓库
在本地一个盘下新建一个文件夹,当作本地代码仓库,也就是说希望之后这个文件夹里的文件的改动都能被git进行管理。
例如在F盘内新建一个名为XXX的文件夹在该文件内: 点击鼠标右键,选择执行git命令,执行代码:
git init
这句话的意思是初始一个本地仓库,之后可以看到在该文件夹下多了一个.git文件夹,用于记录所有与管理本仓库相关的文件,
所以请小心改动。
也可以:git clone 项目的url
然后就会发现在该盘下面就有了一个同名文件夹,并且.git目录和README.md文件都有,这两个代码仓库都已经同步好了
进行代码托管
本地代码仓库和远程代码仓库都创建好之后,需要把它们进行同步才能在gitee上进行代码托管。
1.本地代码仓库与远程代码仓库进行同步,执行代码:
1 | git remote add origin https://gitee.com/xxxxxxx.git |
其中远程库的名字就是origin,这是git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
origin可以改为项目名,或者和项目名不同也都是可以的,因为重要的是后面的url,每个远程代码库都有一个自己的url,所以本地仓库本质上是和这个url所指代的远程仓库进行关联的。
2.拉取远程代码库
由于在创建远程仓库时会初始化一个README.md文件,而本地仓库里没有,所以需要先执行pull操作将远程仓库拉取合并到本地仓库,否则会出错。执行代码:
1 | git pull origin master |
【注1:由于在本地创建了代码仓库,git默认关联的库在本地,所以直接执行git pull命令是无效的,需要执行git pull origin master
命令才行,这句话的意思是推送到远程库master分支,此外,也可以根据提示执行一下git branch --set-upstream origin master
命令,以后就可以直接使用git pull了】
此时可以看到在本地代码仓库中多了一个README.md文件。
【注2:如果遇到错误提示“fatal: refusing to merge unrelated histories”,出现这种错误是因为git会以为这两个仓库不同所以进行无法合并,在执行pull操作时添加–allow-unrelated-histories,即执行git pull origin master --allow-unrelated-histories
就可以了】
3.向远程代码仓库推送文件(例如在本地代码仓库中新建了test1.txt和test2.txt文件,现把它们同步到远程代码仓库),执行代码:
1 | git add . |
可以看到,git追踪到了仓库中文件的变化,所以说git起到了作用。现在执行push操作将它推送到远程代码库:
1 | git push |
【注3:这里使用git push命令会和上面使用git pull时出现同样的问题,根据提示git push --set-upstream origin master
,以后就可以直接使用git push命令了】
刷新远程代码仓库,可以看到文件被成功的同步到了远程仓库:
当然,同步一个文件夹到远程仓库与同步单个文件相同,只不过无法同步空文件夹到远程仓库,因为git会认为没有改动
【注4:这以直接使用git push命令,因为远程创建了代码仓库,git默认关联的库在远程,git push是默认推送到远程库master分支】
关于删除
一、删除文件、文件夹
1.删除文件,执行命令:git rm 想要删除的文件的名字及其后缀
如果在本地代码仓库testGit1中有三个文件,README.md、test1.txt和test2.txt,删除文件test1.txt,
但是如果不加文件后缀的话,会发现提示匹配不到文件,所以必须给全名。
之后可以发现本地仓库已经没有这个文件了,但是刷新远程仓库会发现,这个文件依然存在,
这是因为在本地仓库改动过后,没有将现在的状态同步到远程仓库,所以需要执行一下commit和push命令:
git commit -m "对本次提交的描述信息"
git push
现在刷新远程代码仓库,可以看到文件test1.txt被成功的删除了。
2.删除文件夹,执行命令:git rm 想要删除的文件夹的名字 -r
如果在本地代码仓库testGit1中有一个名为test的文件夹,直接使用删除文件的命令无法删除文件夹,会提示错误“not removing ‘test’ recursively without -r”,可以先执行一下git rm -help命令查看rm命令的使用详情,其中添加-r表示允许迭代移除,所以git rm test -r可以删除test文件夹,之后执行commit和push操作即可。
二、找回误删文件、文件夹
git对于版本的管理本质是对提交的管理,所以在每个操作后最好提交一下,便于之后需要回退,例如要找回上面操作中误删的文件test1.txt。
1.如果你现在正在进行某些更改,需要先推送远程仓库,否则回退之后,最新状态的内容就没有了。
2.执行命令:git log
这个命令会显示出提交日志,可以看到有一个增加了2个文件(test1.txt和test2.txt)的提交和删除test1.txt的提交:
每个提交都有自己的唯一标识,所以想要找回文件test1.txt,需要回退到提交删除操作的前一个状态,所以这里是回退到添加文件状态,执行命令:
git reset --hard 需要回退到的状态的commit标识号
该命令的原理:git有个指向当前版本的HEAD指针,执行回退操作本质上是git把HEAD指针从当前状态指向想要回退到的状态,所以回退的速度很快,需要回退到哪里,就让HEAD指向哪里就行。
如果看到提示说HEAD已经处于添加文件的状态了,此时查看文件也可以看到test1.txt文件。
3.如果在这个状态和最新状态之间又提交过很多文件,需要手动把这个找回的test1.txt文件拷贝出去一份,再执行reset命令回到最新的状态:
git reset --hard 最新状态的commit标识号
4.最新状态是没有刚刚找回的这个文件的,把test1.txt文件拷贝进本地仓库中,然后推送到远程仓库即可,执行命令:
git add .
git commit -m “对本次提交的描述”
git push
这样就可以既找回了之前误删的文件,又没有丢掉中间状态的很多文件。
找回误删的文件夹和找回误删的文件操作完全相同,因为git不会识别你找回的是什么,只是回退到相应的状态而已。
过程示意图:
commit:1——>commit:2——>commit:3——>commit:4——>commit:5
误删 最新状态
当你想要找回删除的文件的时候,先保存现在的状态即最新状态commit:5,然后回退到误删的前一个状态也就是commit:2,
这时候可以获取到已经删除的文件,把它拷贝出去保存一份,然后回到最新状态commit:5,
该状态下是没有已经删除的文件的,但是刚刚我们找到了它并拷贝了一份,现在把这个文件再拷贝进来到本地仓库中,
然后执行提交推送操作,会产生一个新的commit状态,这个就是在commit:5的基础上找回已删除文件后产生的最最新的状态。
常见名词
- 分支(git branch命令)
git默认分支一般是master,当然,这是可以修改的,我们在master完成一次开发,生成了一个稳定版本,那么当需要添加新功能或者做修改时,只需要新建一个分支,然后在该分支上开发,完成后合并到主分支即可,分支功能解决了正在开发的版本与上线版本稳定性冲突的问题。
- 提交(git commit命令)
git对于版本的管理其实是对提交的管理,git使用40个字节长度的16进制字符串来标识每一个提交,每一个提交具有唯一的标识,根据这个标识可以任意回退。
- 拉取(git pull命令)
用于取回远程仓库某个分支的更新,再与本地仓库合并。
- 推送(git push命令)
用于把本地的代码更新到远程仓库。
常见操作指令
1 | git init //初始化一个Git仓库,Git的很多命令都需要在Git的仓库中运行,所以 git init 是使用Git的第一个命令 |
IDEA集成gitee
1、安装gitee插件
【File】-【Settings】-【Plugins】,查看gitee插件并安装
IDEA 码云插件已由 gitosc 更名为 gitee。
安装完成后,重启IDEA
2、使用码云托管项目
添加Gitee账户
【File】-【Settings】-【Version Control】-【Gitee】,点击【Add account】添加账户
输入账号和密码,点击【Log In】
登录成功后会显示账户信息。
项目初始化
将IDEA项目分享至Gitee(这个会推送到个人的项目里,不是多人合作的项目)(用于个人练习的项目存到码云上)
选中要同步的项目,点击菜单【VCS】-【Import into Version Control】-【Share Project on Gitee】
点击【Share】按钮
(如果文件有很多更改)将不必要的文件去除对勾,点击【Add】
提示项目成功分享至Gitee
登录Gitee可看到项目
Gitee项目克隆至IDEA(用于将码云上的项目下载到本地)
【VCS】-【Git】
输入Gitee项目的URL,点击【Clone】,开始克隆
点击【Yes】
点击【This Window】
克隆成功,可看到项目代码
Gitee团队协作(用于正式项目的开发合作)
拉取代码
【VCS】-【Update Project】
点击【OK】
提示更新多少个文件,可以点击【View】查看更新的文件列表
更新文件列表
提交代码
注:提交代码前,应先拉取。若拉取时出现代码冲突,应先解决冲突后再提交
【VCS】-【Commit】
可选择哪些代码提交,默认全选,输入提交信息,点击【Commit and Push】。或者先点击【Commit】,再从菜单中点击【Push】
选择默认分支,点击【Push】
提交成功
idea里颜色含义
绿色,已经加入控制暂未提交
红色,未加入版本控制
蓝色,加入,已提交,有改动
白色,加入,已提交,无改动
灰色:版本控制已忽略文件
代码冲突
发生的场景
- 情景一:多个分支代码合并到一个分支时
- 情景二:多个分支向同一个远端分支推送代码时
实际上,push操作即是将本地代码merge到远端库分支上。
关于push和pull其实就分别是用本地分支合并到远程分支 和 将远程分支合并到本地分支
所以这两个过程中也可能存在冲突。git的合并中产生冲突的具体情况:
<1>两个分支中修改了同一个文件(不管什么地方)
<2>两个分支中修改了同一个文件的名称
两个分支中分别修改了不同文件中的部分,不会产生冲突,可以直接将两部分合并。
解决的方法
- 情景一:在当前分支上,直接修改冲突代码—>add—>commit
- 情景二:在本地当前分支上,修改冲突代码—>add—>commit—>push
注:借用vim或者IDE或者直接找到冲突文件,修改
idea里:
当在提交或拉取代码时,出现冲突会弹出对话框,选中冲突的文件,点击【Merge】
对话框中出现三个框,分别为:
左边框为本地待提交的代码
右边框为Gitee中代码
中间框为解决冲突后的结果代码
解决代码冲突:我们修改中间的代码,可根据情况选择【Accept Left】或【Accept Right】;亦或者手动修改冲突代码后点击【Apply】
点击【Yes】
当所有冲突文件解决后,重新提交即可
还有一种解决冲突的方式:
1.将本地代码进行stash 即保存到git栈中,并命名”333 conflict” (git - repository - stash changes
) 此后所有的修改已经不存在了,恢复到上一次的代码内容
2.pull master
代码内容变为远程仓库master分支的内容
3.将本地修改取出 (git - repository - unstash changes
)选中之前创建的”333 conflict” 恢复
4.此时会提示有冲突 点击解决冲突 中间的result为解决结果 可以直接选择左或右或修改结果
5.冲突修改完成,commit and push
idea里找回历史版本:
在需要恢复的文件夹或者类上右击Local History
选择show history
,选择你的版本,找到你之前的文件。
实际操作
新建一个项目
码云上在仓库下创建一个项目。点击代码,按照操作步骤来:
1.Git 全局设置:
1 | git config --global user.name "孙伟旋" |
2.创建 git 仓库:
1 | mkdir 项目名字 |
本地新建立一个文件夹,然后git命令拉取到本地:
git clone url地址
提交代码:
1 | git add . |
分支:
gitee是国内的代码托管平台,相比较于github拉取仓库和推送的速度更快,这里主要讲述一下通过git bash将代码推送到gitee的某个branch的流程。
推送流程简述:
推送的流程其实归纳起来可以总结出四步:
- 将Gitee的仓库/某个具体的分支拉取到本地
- 将自己写好的代码放到本地仓库中
- 将代码提交到本地仓库
- 将代码推送到Gitee远端仓库
具体过程详解:
首先是将Gitee的仓库/分支拉取到本地:
首先进入任意文件夹,选择git bash(在这里运行的前提是本地已经安装并配置好git,安装配置的过程在这里不多赘述),然后输入命令:
git clone -b【分支名】SSH(这里的ssh是码云仓库的SSH)
这里强调一下,如果是要拉取master分支就可以直接使用git clone,如果要拉取子分支需要加 -b 【分支名】,否则默认拉取的是master分支!
拉取成功之后会看到本地多了一个文件夹,这就是我们远端拉取到的git仓库
将代码提交到本地git仓库
在成功拉取之后我们进入到拉取来的文件夹,可以看到里面的结构与我们码云上的结构是完全相同的
然后直接从本地将我们的代码拷贝到该文件夹中,打开git bash,执行
git add 【文件】
的操作(!!这里要重点强调,一定要在远端仓库中打开git bash,会在路径中看到有我们的分支名称)
当 git add完成之后我们需要执行
git commit -m ""
操作,来表明我们对这个事务进行提交(可以类比数据库的事务)
在这里使用 -m
目的是对提交的项目进行描述(message)
当commit成功后我们就成功将我们的项目添加到了本地的git仓库中,使用
git push origin 【分支名】
就可以成功把本地git仓库的代码推送到码云远端仓库中
回退版本
1.git log
查看日志,也可以去码云的网站上查看,是一串数字和字母。
2.git reset --hard 版本号
也可以用git reset --hard HEAD^
回退到上一个版本,上上一个版本就是HEAD^^,往上100个版本HEAD~100
3.git push -f
强制推上去(此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧)
git push origin HEAD --force
也可以强推
反做版本
git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。
比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。
适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法
1.git log
查看日志,也可以去码云的网站上查看,是一串数字和字母。
2.git revert -n 版本号
(这里可能会出现冲突,那么需要手动修改冲突的文件。而且要git add 文件名)
3.提交,使用git commit -m 版本名
4.git push