一、理解概念
1、git与github的区别: 两者并非同一个概念,简单而言, git是一种实现分布式版本控制的工具,可以看做是一种管理代码的工具; github 则是一个远程的代码仓库,是世界上最大的软件远程仓库,是一个面向开源和私有软件项目的托管平台, 全世界的程序员都会将代码上传到该平台,与大家做分享和开源;
2、 git与github的关系: 当你要开发一个自己的项目时, 需要创建自己的项目仓库, 这个仓库,可以创建在本地,也可以创建在github这样的开源管理平台; 而对github的所有操作,均是通过git指令实现的; 所以,简单理解一下两个的关系,更多是一种『平台化和操作平台工具』的关系;
二、git的工作原理
1、从远端仓库克隆git资源到本地目录,该本地目录为『工作区』;一般是『git clone』的结果
2、在工作区,可以进行代码的修改、新增代码、删除代码等操作;
3、如果有其他人更新了代码,并合入了远端仓库, 你可以直接更新本地目录,实现同步更新; 同样,你也可以是那个更新远端仓库的人;
4、提交修改到暂存区,英文名为stage或者index,一般放在『.git』目录下的index目录下;【不过这些不重要,重要的是后面这句话】, 当执行『git add 被修改的文件』指令后,对工作区的修改,被存储到『暂存区』;
5、提交修改到本地仓库,该操作是执行『git commit 』的结果;
【对于其原理,还不明白,可以参考:https://www.runoob.com/git/git-workflow.html】
三、基本操作汇总
1、单纯的创建本地git仓库: git init
该指令会在当前目录下创建.git目录,并初始化git配置文件,从而实现初始化一个本地仓库;
当然,你可以执行『git update-server-info』指令,来跟远程用户共享你得仓库;
2、可以远端仓库(如github)的代码到本地:
提供两种方法: http和ssh
git clone https://github.com/PaddlePaddle/models.git
git clone git@github.com:PaddlePaddle/models.git
3、使用git 新增与提交变更
通过git这种分布式版本控制系统, 你可以在仓库的本地副本上完成大部分工作,包括添加新的代码、修改代码、测试等; 最后将完整无误的代码提交就可以了;
1)git add : 上面降到该指令实现,将工作区的代码变更添加到暂存区; 该命令,并不会改变仓库的内容,只是标记了此次变更; 【通常的做法是, 每次修改之后,都使用git add 指令小型提交一下,防止遗漏,到最后全部完成之后,再执行一次大的提交】
# git add 文件名/文件夹/ *.c (多个文件同时git)
2) git commit: 该指令,会打开shell环境变量EDITOR中定义好的编辑器,这样的操作之后,你得代码就被保存到仓库的本地副本中了; 但是,这样的操作,并不会影响到远端仓库(github);
# git commit
# git commit -m "modify some file"
# git commit -am "Add and commit all modify files" 【git commit -a 操作,相当于执行了 git add 操作】
4、关于分支的管理与操作
1) git branch : 查看,当前所在的分支; 【git branch -a 指令可以查看对应代码库下的所有分支】,如下:
2)git checkout bdg : 实现切换到bdg分支,
git checkout 子命令会检查系统中的.git目录, 然后恢复 与指定分支相关联的快照,从而实现切换分支;
git checkout -b MyBranchName 命令实现创建一个新的分支,并切换到该分支;
3)合并分支
# git checkout originalBranch : 切换到指定的分支;
# git checkout -b modsToOriginalBranch : 创建新的分支modsToOriginalBranch,该分支指针指向 originalBranch分支;
# 编辑代码,测试编辑后的代码;
# git commit -a -m "Comment on modsToOriginalBranch to originalBranch" : 【git add 修改部分; git commit 修改部分】
# git checkout originalBranch : 切回到最初的分支,也就是将代码恢复到编辑和提交之前的最初状态;
# git merge modsToOriginalBranch : merge指令将起始分支的快照指针移动到正在合并的分支快照 【也就是将修改的部分,与原始分支代码合并,将合并后的代码做为下一次修改的原始代码】
4) 删除分支: git branch -d myBranch
5) 查看日志: git log : 该命令可以生成一份报告,该报告中记录了每一项提交记录;
5、分支推送
通过git commit 指令,将修改内容更新到本地仓库后, 接下来就是将本地仓库的分支推送到远端分支上:
git push 『远端主机名』 『本地分支名』 『远端分支名』
# git push origin master: refs/for/master
1) origin 远端主机名; master 本地分支名; 第二个master 为远端分支名;
refs/for 表示提交代码到服务器之后,需要经过codereview 才能合入; 对应的 refs/heads 则不需要;
2)各种变形指令:
# git push origin master: 省略远端分支,表示将本地分支内容推送到 与之存在追溯关系的远端仓库的同名分支; 如果远端仓库不存在该分支,则会新建;
# git push origin :refs/for/master : 省略本地分支名, 表示推送一个空的分支到远端仓库,等同于删除远端仓库的同名分支;
# git push origin : 省略本地分支,同时省略远端分支, 表示将当前分支,推送到远端仓库的同名分支中;
# git push : 如果当前分支对应的远端仓库中,也只有一个分支,那么origin也可以省略;