git及github的操作使用
文章目录
git介绍
git是一款版本控制系统,就像是在下载一些软件时,在官网上除了可以下载最新版以外,也可以选择下载之前的旧版本,可以选择32位版本,也可以选择64位版本。同样的,在我们进行开发创作的过程中,也可能会产生很多版本,但是不一定之后的版本就一定比前一个版本bug少,更适合发布,这时就可以根据实际选择在哪个版本上继续进行创作开发。
因此,有了git就可以非常方便地管理、切换版本。
仓库及其初始化
在git中,有“仓库” (repository)的概念,所谓的仓库,就是指存有工程有关的所有文件合集
具体而言,就是一个 目录,在该目录下有一个.git
子目录,记录了与长裤管理相关的各种信息
要初始化的得到一个可以被版本控制的git仓库有两种方法
-
通过
git init
命令,将一个普通目录,转化为仓库 -
通过
git clone
命令,从网络上复制一个已有的仓库(后文介绍)
版本控制与commit
在git仓库中操作文件(增删改),可以收到git的记录,进行版本控制。
但是,git对于版本的记录,并不是全自动的,需要我们告诉git,工程中哪些节点作 为“快照”,再未来可以恢复。
提交快照的方法,在git中称为commit
,我们将看到,一般的 commit
的流程:
- 对文件进行了操作(增加、删除、修改)
- 将改动了的文件,添加到缓存区(staged、工作台)
- 通过
git commit
命令,正式提交,在git系统中存一个快照,以备之后恢复
如,当我们在git仓库,创建了一个 git_ex.go
文件后: 先通过git add <文件名>
命令,将该文件,添加到缓存区
在开始之前需要先设置一下环境
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
否则会报错
然后:
git add git_ex.go
接着,通过git commit
命令,提交快照
输入后会自动打开一个 一个文本编译器(我这里的是vim编辑器)其中记录着比起上次快照相比,做了那些改变
在此我向其中加入 新建了一个first.go文件
几个字后就会被添加进去
也可以直接使用
git commit -m "新建了一个first.go文件"
也会将这段话同样效果的添加进去
所有的commit,都会被git记录在案(以方便之后回档),我们可以通过git log
命令来查看提交记录。
查看修改情况以及缓存区情况
我们可以通过 git status
命令,查看哪些文件修改了,以及当前缓存区的情况。
如图所示,
当我新建了一个文件second.go
后在此查看缓冲区情况时
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uFxuTL2w-1602303604187)(C:\Users\Shinelon\AppData\Roaming\Typora\typora-user-images\image-20200711175012284.png)](https://img-blog.csdnimg.cn/20210107184812801.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29ybG9ibA==,size_16,color_FFFFFF,t_70)
会发现除了已修改但未提交的报告外,还有一个未添加的文件报告
此时可以通过前文所述的 git add <文件名>
的方式,将改动的文件,添加到缓存 区。
或者可以通过 git add .
命令,将所有改动的文件,都添加到缓存区。
注意:与add命令对应的,还有git rm
命令,可以从缓存区删除文件。
详细日志
可以通过git log -p
打印比较详细的修改前后的情况
可以看到
版本回溯
我们可以通过 git reset <快照hash>
的方式,切换到原有的版本。
其中hash就是
修改前
git reset 482b3afabbb06b6897fea477783c96cf387e1a02 ‐‐hard
版本就变回去了
再例如
运行后:
分支与分支的合并
分支创建与切换
git仓库的第一次commit之后,git会默认给我们创建一个分支(master)。 在一个git仓库中,可以有多个分支,每个分支,可以有多次commit。分支的作用类似 于“分身”,也就说一个新得分支的建立,意味着在老分支的基础上,克隆除了一个新 的分支。
我们可以通过
git branch //命令查看分支。
git branch -a //查看远程分支 当同步远程仓库时使用
我们可以通过通过
git checkout ‐b <新分支名>
新建,并且切换到新的分支上。 比如,我们当前的master分支,是商业版本;然后,我们像加一个功能(readme),但是为了不影响商业版本,我们可以先新建一个分支,然在分支上进行开发:
git checkout ‐b add_readme
我们也可以通过 git checkout <分支名>
在分支间进行切换。
当切换回master后
分支add_readme
下的readme.md就消失了
当切换回该分支时,readme.md 又会出现
git非常推荐使用分支来组织自己的工作流,一般要为项目添加一个功能,流程:
-
切换/同步主分支到最新(master)
-
在master的基础上,新建分支
-
在新分支上新增功能
-
等到时机成熟了,将新分支与主分支,进行合并 不考虑远程仓库,合并本地分支的方法,
使用
git merge
命令。
分支合并
git merge <分支名>
就会将指定的分支,与当前的分支进行合并。 如果两个被合并的分支中,有冲突(同一个文件被不同修改),则需要手工确认。
在项目合作中,往往可以在新分支中开发新功能,成熟之后再合并。
如下 ,我创建了两个分支readme
与readme2
之后在两个分支中分别对readme.md
文件进行不同修改
然后在 主干master
上合并
然后手动修改删除即可
github的使用
上面使用的git命令,其实不仅是一个本地程序,还是一个客户端。配合服务端,git可以将仓库上传、下载到服务端,与(远程仓库)。
通常github.com是可以免费使用的,免费提供git服务端功能的网站。
与之类似,还有gitlee.com。
如何克隆别人的仓库
在github,com的对应页,找到git仓库的地址,然后用git clone
的方法,可以同步到远程仓库
git clone https://github.com/HuangTingIT/HuffmanCoding.git
通过上述方法可以将远程仓库到本地
但是没有将更新的commit记录同步,这就需要:
git fetch <远程仓库地址> <远程分支名> //可以同步指定分支的更新记录
git fetch <远程仓库地址> //若不指定分支名 则将远程主机的更新全部取回本地
因此通过
git fetch origin master
即可同步更新记录
以上的origin
就是远程仓库的地址的简称
这是 github.com
的默认值
可以看到这个origin
其实就是刚才同步时所输的那个网址一个代号,一个通用的别名
github.com的密钥配置
github.com上的工程人人都可以克隆,但是如果人人都可以往该工程中上传,就会很难管理了,所以要保证账号的一致,
但是如果团队共同合作时,其他人如果也要用该账号密码进行创作,就会比较麻烦
因此为了更方便操作远程仓库,而不用频繁的输入账号密码,就需要配置一下公钥、私钥。
所谓的公钥、私钥,就是2个加密软件生成的文件,私钥需要放置在指定的当前电脑指定目录,
公钥,需要将内容上传到github.com
如何生成公钥、私钥?
通过ssh=keygen
命令生成
然后系统文件下就会出现这两个文件
其中id_rsa
是私钥,id_rsa.pub
是公钥。
公钥和私钥其实就是两个文本文件,其中的内容就是段加密的数字,通过公钥和私钥间进行数学运算,来确认是否匹配。(私钥内容一定不要给别人看)
然后需要将公钥设置到github.com上,
打开github.com网站,然后
然后将id_rsa.pub
文本文件的内容复制粘贴到下面的key
框中
并为其起一个名字Tile
然后点击添加
这里可以添加多个公钥,用于多人操作该仓库,下面就添加成功了
需要注意的是:
-
上传过的公钥不可以再次上传,
-
若使用ssh的方式同步,则需要将之前创建的HTTP协议改为SSH协议
通过下面方式可以修改,修改后 仓库连接的地址就会变成
ssh
协议的地址
创建仓库
通过上面的操作就还可以创建一个自己的新仓库
然后通过一下命令可以同步到新仓库
#先创建一个本地仓库
git init
git add <需要添加到缓冲区的文件的文件名>
git commit #更新快照 一般用 git commit -m "需要添加的版本描述"
#然后将远程仓库和本地仓库关联 并给远程仓库的地址起别名(没人为origin)(这里的地址为HTTP协议的,如果是用公钥私钥,需要用SSH协议的地址<git@github.com:OrangLBlue/homework.git>)
git remote add origin https://github.com/OrangLBlue/homework.git
#最后通过git push...将本地仓库上传到远程仓库的master分支
git push -u origin master
其实也就是网页中的
那么预热了这些,接下来就开始操作吧
起初
文件中没有别名与地址
在通过git remote add origin https://github.com/OrangLBlue/homework.git
关联后就会出现别名和地址
最后通过git push
将本地仓库上传到远程仓库的master分支
这时回弹出github的身份验证
输入账号密码(要与vscode 创建git仓库时设置的一样)验证之后
远程仓库就会有本地的commit。就可以在个人主页中看到自己的仓库,并可以点进去查看详情
远程仓库的分支操作
分支创建及上传
如果团队共同维护一个项目
git checkout master //先切换到主分支
git pull //下载最新的版本
//创建新分支
git checkout -b <新分支的名字>
//将修改添加至缓冲区
git add <被修改的文件名> //也可以用‘ . ’代替 代表将该目录下所有文件添加至缓冲区
//提交快照
git commit -m "第一个新分支—第一次作业"
//将修改提交到远程仓库分支
git push origin new_branch
之后会发现远程仓库网页中出现了一个新分支
切换过去后就会发现 正是刚刚创建和修改的分支
点开commit
可以看到两次提交的记录
点开一条记录,还可以查看详细修改的内容是什么
分支合并
在提交后网页中会出现以上提示
用于发送合并请求,点开后就可以写一个草案共他人来看
提交后会出现该页面,点击框中按钮表示决定要进行合并
你也可以请他人来参考,这时另一个人会有一定的决定权来决定是否可以合并
然后点confirm merge
进行合并
合并后会显示 “拉请求成功合并并关闭一切就绪——可以安全地删除new_branch分支。”
再返回仓库主页面看,会发现master分支下文件变成了合并后的结果,同时commit也多了一次
然后到本地操作
//切换到主分支
git checkout master
//查看当前分支
git branch
//更新
git pull
切换到主分支后,原文件内容为空
更新后
就是我们想要的结果了
修改之前的commit注释
如果已经提交到了远程仓库
歧视网上有很多方法,但是我觉的最好用的还是
git rebase -i --root
这个可以修改所有的commit
注释信息
输入指令后回车会进带vim的界面,其中前面几行的 pick就是之前提交的所有commit信息了
然后按按键 i
后进入编辑模式,进行修改,将你想要修改的commit
注释前面的pick
改为edit
,想改哪条改哪条,还可以都改,批量进行 ,把想改的注释改成edit
后按ESC
键然后再输入:
(一定要是英文状态下)+wq
然后敲回车系统就会帮你保存并退出
然后你会显示如下提示
先输入
git commit --amend
然后就会显示你想修改的注释信息,一样的按i
进行修改后保存退出
再输入
git rebase --continue
合并信息
到此本地的commit信息就已经修改完了
可以通过git log
查看是否修改成功
然后通过
git push --force origin master
可以将修改后的注释上传到远程仓库,之前的注释就会变成修改后的注释了