github入门教程
最近一直在学习Java,主要还是在学习JavaSE部分,正好使用github作为远程仓库使用。但是发现自己的git命令实在是太拉胯了,只会简单地拉取、提交等操作。对于新建文件夹(本地仓库)怎么关联远程仓库,以及如何推送到远程仓库指定分支什么的操作都是模模糊糊。
然后我就在网上查了一些资料并且试验了一下,在这里总结记录一下自己的使用情况。
软件版本:IntelliJ IDEA 2022.2.1
我的软件界面是采用的新的UI界面,还处于测试阶段,个人比较喜欢新的界面,大家自行参考;
其他软件也是类似的,只是换了一个软件的外壳,本质没有什么变化,所以大家不要害怕,本教程适用于其他软件。
准备工作
-
创建github仓库
-
在本地新建一个文件夹(或者是你需要将代码上传到github的文件下),这里使用IDEA中的代码文件上传作为实验。
准备工作已经结束了,接下来就是git命令操作。
IDEA终端连接到github仓库
-
打开git操作页面,在test文件夹里右键->Git Bash Here(这里我使用的IDEA这款软件,用的IDEA的终端,与
git bash here
效果一样,唯一的缺点就是git bash here
会在后面显示属于哪一个分支)这里简单演示查看文件夹路径(这里需要简单熟悉linux系统的部分操作命令):
pwd # 查看文件绝对路径 clear # 清屏
-
初始化仓库
git init # 初始化仓库 # 配置个人信息 git config user.name '你的github用户名' git config user.email '你的github邮箱' git config --list --global # 查看配置信息
因为我已经配置过自己的个人信息了,所以这里只需要演示如何初始化操作和展示配置信息,初始化完成后,当前文件夹下会多出一个隐藏文件夹
.git
,没有显示的可以勾选文件夹的默认文件夹: -
查看状态并提交代码到本地仓库
git add . # 添加所有修改的文件 git commit -m '注释' # 提交到本地仓库,并进行解释说明
-
将本地仓库与远程仓库进行连接,并提交到github仓库
git remote add origin https://github.com/zechaowei/test.git # 这里我使用我自己远程仓库的https,使用时修改成自己的就可以了 git push -u origin master # 相当于下面执行的两句 # git branch --set-upstream-to=origin/master master//将远程仓库origin的master分支与本地仓库master分支关联 # git push origin master # 一般提交代码格式 --> 下面这些代码内容会在最后再次提到,留意一下即可 git push origin 本地要上传代码的分支名称:远程你要上传的指定分支名称 # 另外如果远程仓库上没有dev这个分支,我们执行git push origin master:dev命令的话,它也会帮我们自动创建这个分支
查看远程仓库的链接:
这里后面一直报错,一开始觉得是http缓存不够或者网络不稳定,于是输入下面命令:
git config --global http.postBuffer 524288000
但是后面重新提交的时候还是有问题,查阅资料显示,利用科学上网工具后,网页可以打开github。说明命令行在拉取/推送代码时并没有使用上网科学工具进行代理。于是我刷新一遍后重新提交后即可成功。这里过程就不演示了,展示最后的结果:
这里显示new branch,出现了新的分支,这是因为我们在git push时,远程仓库并没有master这个分支(创建远程仓库时默认是main分支),因此会显示新的分支。
这个时候刷新一下github网页就好了:
main分支上面会显示保护分支,原因是因为使用Git时,会碰到需要对某个分支进行保护,避免其他人随意push。但是我这里只是简单测试,即使被push也没有什么问题。大家有兴趣可以自行搜索了解。这里可以参考Gitlab分支保护。
-
查看本地和远程的所有分支
git branch --all # 查看本地和远程的所有分支
绿色是本地仓库分支,红色是远程仓库分支
本地新建项目提交到远程分支上面
无论是在本地仓库还是远程仓库上,特别是在做项目的时候,一般都是不会直接提交到master(主分支),都是提交到另外一个分支,如dev分支。
当然在本地你可能为了方便直接在master上开发代码,但是一般最好都是另建一个分支,开发好一定的代码,再合并提交到master分支,最后在推送到远程仓库的dev分支。(你的boss不会让你直接提交到master分支,因为可能还有别人同时也在开发,boss会将你们的代码合并然后才提交到master分支)
接下来实现在本地新建一个dev分支,修改内容后提交到master分支,然后提交到远程仓库的dev分支。
-
本地新建分支
git checkout -b dev # 创建并切换到dev分支 # 当然也可以使用一下命令 git branch dev # 创建dev分支 git checkout dev # 切换到dev分支
这里展示分支的效果不明显,使用git bash here切换分支时,会在末尾显示哪一个分支。使用idea时,软件的左上角会显示版本控制,也可以通过软件左上角查看
-
现在回到我们原来要提交的文件夹里新建一个
test.txt
文件,这个时候我们是在dev分支下进行操作的 -
分别查看dev分支和master分支情况
git status # 查看dev分支状态 git checkout master # 切换到master分支 git status # 查看master分支状态
执行上面命令,显示
test.txt
文件为未追踪文件。那么什么是未追踪的文件呢?那些新创建的或者从未add过的文件就是未跟踪的。此时有以下几种情况:- 我们创建了文件,并未提交上去的,这种情况下只要add就可以了,最后终端会显示了
git add <file> ...
,add的文件也会变为绿色。(常见情况) - 必须放在git工具目录中,但又不能提交了,比如保存了数据库密码的配置文件等的东西。
- 我们不准备提交又没用的。
- 我们创建了文件,并未提交上去的,这种情况下只要add就可以了,最后终端会显示了
-
切回到dev分支去提交代码看看
git checkout dev # 切换到dev分支 git branch # 查看当前分支状态,确定切换到dev分支 git add . # 添加所有修改文件,也可以指定添加文件夹git add test.txt git status # 显示当前分支状态 git commit -m '添加test.txt' # 提交
这时候再我们原来要提交的文件夹下看看,记得我们此时是在dev分支下的 ,可以看到dev分支下,
test.txt
文件已经提交到本地仓库了git branch # 查看当前分支
查看dev分支下面的文件,发现包含
test.txt
文件:这时,我们将分支切回到master分支,再看看文件
git checkout master # 切换到master分支
切换到master分支后,没有
test.txt
文件了,因为代码只提交到了dev分支,所以在master是看不到这个文件的。
合并分支
-
将dev分支的代码合并到master
注意:此时是已经在master分支,所以不用切换分支,一般要把文件或者代码合并到哪个分支,就要
git checkout
到哪个分支git merge dev # 把dev分支的更改和master合并
-
将更改的代码推送更新到远程仓库上
一般都是执行
git push
,直接将本地的master直接提交到了远程的master(一般这样做可能会被boss diss😐😐😐)我们应该将我们的代码push到另外的分支(通常是你的boss给定的分支)我们先看看github上面的分支情况:
正常创建一个空的仓库时,只会有main这一个分支,但是前面执行过
git push -u origin master
命令,并且提到如果远程仓库没有这个分支,它会自动帮我们创建这个分支。这里我们就手动创建dev分支(也可以使用git命令,这里只是多一种演示方式,最后效果都是一样的,了解即可)
创建好后,我们就可以看见一个dev分支了。(最后push的时候出现了问题,后面又删除了这个手动创建的dev分支)
-
将本地的master提交到远程dev分支上(此时我已经删除了dev分支了,大家注意操作,如果已经操作了,可以接着向下看,并提供了解决方法)
git push origin master:dev # git push origin 本地要上传代码的分支名称:远程你要上传的指定分支名称 # 另外如果远程仓库上没有dev这个分支,我们执行git push origin master:dev命令的话,它也会帮我们自动创建这个分支
这里自己当时出了问题,显示一下问题:
后面我删除了远程仓库的dev分支,再次执行
git push origin master:dev
最后推送成功了,并且显示new branch新的分支。
网上查找资料后,提供以下资料供大家参考:git推送报错“! [rejected] master -> master (fetch first)解决办法、[git将本地内容传送到远程仓库出现[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B5OiLpHR-1681403638147)(null)]
-
执行完了刷新github, 看看GitHub上的情况
最后在github的test仓库中已经push成功了,并且查看master分支和dev分支,因为在执行
将本地仓库与远程仓库进行连接,并提交到github仓库
这个操作时,我的文件夹本身就不是空的,包含了master分支中的所有内容,而dev分支比master分支多了test.txt
这个文件,是因为当时比对master分支和dev分支的区别时在本地的dev分支下就增加了test.txt
文件,所以在最终显示中dev分支比master分支多了一个test.txt
文件。
OK,到这里,就已经完成将本地的代码从本地仓库上传到远程仓库的所有过程了。对于以上内容有什么错误的地方,敬请指正,麻烦指出来哦!
参考文章: