Git的基本使用
此次仿真试验主要集中于gitee上进行
1、单人项目开发
git add . // 表示将所有代码提交至暂存区
git commit -m "提交信息" // 将代码提交至本地仓库,注意提交的附加信息不可或缺
git push // 提交至远程仓库(gitee)
需要注意的是:
2、多人协同开发(重点)
1) 创建分支是基础,必不可少,此次创建了devA分支以及devB分支(此时,加上master主分支,共三个分支)
假设:起始是在master主分支
git branch devA // 创建本地分支devA (但此时分支仍定位在master主分支上)
git branch // 查看当前所处分支情况
git branch -r // 查看远程仓库分支情况
git checkout -b devC // 创建本地分支devC,会发现该创建方式会切换至该分支
// 同时发现它并不影响远程仓库的分支情况
git branch -d devC // 表示删除本地devC分支,需要注意的是不能所在的分支,
// 也即当前在本地devC分支不能删除它,需要切换至其他分支才能删除
git checkout devA // 表示切换至本地devA分支
2)具体操作
① 首先,检查主分支master的代码,发现a最终为a = 000(本地切换至master分支后的图示)
② 在master主分支上提交代码至远程仓库
1.1 提交所有文件至本地缓存区: git add .
1.2 本地缓存提交至本地仓库 : git commit -m "主分支提交"
1.3 提交至远程仓库: git push
此外,可以观察到远程仓库gitee内容也随之发生变化
③ 一般不允许在主分支master上进行开发,所以此次创建了两个分支,A同学操作分支devA,B操作分支devB
正常开发流程中,A、B很有可能对同一文件进行操作,而且可能出现不同的修改结果,这在最终合并到主分支时必然会出现冲突问题!
为了复现该过程,对部分内容进行了简化,但原理都差不多。具体为:B操作修改了MainActivity.java中的变量a的值,将a=000修改为a=520,并提交至远程仓库。此时,倘若A想要在devB分支修改a=250时必然会发生冲突(模拟的是A、B分支修改同一变量,最终合并时具体保留哪个版本的这一冲突问题),此时就应该对其进行修改,择其一进行保留!
B同学在终端进行了如下命令操作:
git add app // 将app提交到本地缓存
git commit -m "B同学首次提交" // 提交至本地仓库
git push origin devB // 然后在远程仓库看到如下详情
此时,对应的本地:
远程仓库:
此时,A同学准备修改B同学的a值,将a的值修改为250!
那A如何将B操作的a值进行修改呢?
3.1 A首先需要切换到该分支; git checkout devB
3.2 然后手动修改代码中a的值,将其修改成:a=250
魔鬼细节: 此时倘若A同学想再切换到devA分支,会怎样?没错,会出现如下错误:
虚晃一下?明明修改了devB的内容,又不提交,那这个修改岂不没起到任何作用??所以,当修改了代码之后必须提交
(先提交至缓存区,再提交至本地仓库,若需要远程仓库维护,还需要提交至远程仓库)
3.3 提交到远程仓库
git add . // 提交至本地缓存
git commit -m "我是A,我修改了B在devB分支中的a的值" // 提交至本地仓库
git push origin devB // 此时,出现冲突
本地出现这些红色问题:(选择保留合适的版本信息,这里对应就是a的不同数值,将其余重复冲突内容删除!)
git pull origin devB // 出现冲突,拉取回来,解决冲突,择优选择保留!!
记得,一定一定得重新提交,否则会出问题,在远程看不到修改的结果!!
至此,冲突解决,A如愿修改了B中对应的a的值!!!
(这部分至此over!!)
git merge devA // 假设当前在master分支,那么就是合并devA到master分支去,合并完成后,一定按照提交本地缓存、本地仓库、远程仓库的方式进行提交,
否则无法在远程仓库看到合并后的结果,也即无法看到merge主分支上有devA对应的a值详情,也即devA并未实际合并到merge!!
④ 合并,先看主分支master对应的代码,会发现对应的a=000,而此时又已知devB中的a=250,那么合并devB至master会发生什么?
git checkout master // 首先,应当从当前分支切换至master主分支
git merge devB // 将devB分支合并至当前主分支master上
此时,不论切换到devB还是master分支,会发现本地的a = 250,可是远程仍然还是最初的a=000,为啥呢?
那当然是没有提交至远程仓库呗!所以合并完想在远程看到合并的效果,务必进行代码的远程提交!!
本地的不论是devB分支还是master分支,a的值皆是250,具体如下:
红线圈起的地方也提醒需要远程提交,这样才能看到效果!!!
git push // 由于已经在主分支了,所以这样远程提交就行!(发现对应的远程仓库的master分支的a=250啦)
记得!有变化(包括修改、合并)就得重新提交!!
补充: ① 删除远程分支
git push origin --delete + 要删除的分支名 // 也可以直接在gitee远程仓库进行删除
② 获取最新远程仓库信息到本地仓库
git fetch //git fetch命令用于从远程仓库获取最新的提交记录,但是并不会将这些提交记录合并到本地代码库中。它相当于是将远程仓库的最新变化下载到本地仓库,但是并不会修改本地代码库的状态。这个命令会将远程仓库的分支和标签更新至本地仓库。
③ 拉取
git pull // 简单地,也可以根据它直接拉取,有冲突解决冲突(择优选择保留)