Githubs的使用方法
一、github基本使用
这一小节主要介绍github的基本使用方法以及每一步的流程和作用。
1. 创建仓库
2. 创建分支
此时有两个分支:main 和 readme-edits。 现在,它们看起来完全相同。 接下来,将向新分支添加更改。
3. 创建和提交更改
在上一步中创建新分支时, GitHub 会将您带到作为 main 副本的新 readme-edits 分支的代码页。
您可以对存储库中的文件进行更改并保存更改。 在 GitHub 上,保存的更改称为提交。 每个提交都有一个关联的提交消息,该消息是解释为什么进行特定更改的说明。 提交消息会捕获您更改的历史记录,以便其他参与者可以了解您执行了哪些操作及其原因。
4. 打开拉取请求
现在,您在 main 以外的分支中进行了更改,可以打开拉取请求。
拉取请求是 GitHub 上协作的核心。 打开拉取请求后,可以提出更改,要求某人审查和提取您的贡献并将其合并到其分支中。 拉取请求显示两个分支中内容的差异。 变化、增减以不同的颜色显示。
只要进行提交,便可打开拉取请求并开始讨论,即使在代码完成之前亦可。
通过在拉取请求消息中使用 GitHub 的 @提及功能,您可以向特定人员或团队请求反馈,无论他们近在大厅还是远在 10 个时区之外。
您甚至可以在自己的存储库中打开拉取请求并自行合并。 这是在处理大型项目之前了解 GitHub 流程的好方法。
您的协作者现在可以查看您的编辑内容并提出建议。
5. 合并拉取请求
在最后一步中,您将 readme-edits 分支合并到 main 分支中。 合并拉取请求后,readme-edits 分支上的更改将合并到 main。
有时,拉取请求可能会引入与 main 上现有代码冲突的代码更改。 如果存在任何冲突, GitHub 将提醒您有关冲突代码的信息,并防止合并,直到冲突解决为止。 您可以进行解决冲突的提交,也可以使用拉取请求中的注释与团队成员讨论冲突。
在本演练中,应该没有任何冲突,因此您已准备好将分支合并到主分支中。
二、通过git命令使用github
在github上创建好仓库后进行以下操作:
1.把需要上传的文件夹变成git可管理的文件,在需要上传的文件夹路径下输入以下:
git init
2.将本地文件添加到暂存区
git add .
3.将暂存区文件提交到分支(master):
git commit -m'对修改过的代码的描述'
4.为将要上传的版本打一个tag,方便后来下载不同版本的代码:
git tag tag名称
# 这里的tag名称最好是分支名称和版本号的组合
4.添加你要上传到的远程仓库:
git remote add origin 仓库地址
# 仓库地址为:git.com:xxx/xxx.git
5.切换分支 (可选,如果不切换分支的话就默认上传到main/master分支上)
git cheekout -b 分支名字
# 如果是存在的分支,想要切换的话直接git checkout 分支名字即可
# 如果是不存在的分支,则git checkout -b 分支名字就可以创建新分支并切换到新分支上
6.将本地本版本号的文件上传到远端仓库的指定分支:
git push origin 分支名字 tag名称
此时,如果报错
就说明你的SSH key没有添加到github帐号设置中,这时需要在本地创建SSH key,然后将生成的SSH key文件内容添加到github帐号上去。
创建SSH key的方法很简单,生成ssh key的过程如下所示:
ssh-keygen -t rsa -C "your_email"
然后系统提示输入文件保存位置等信息,连续敲三次回车即可,生成的SSH key文件保存在中~/.ssh/id_rsa.pub文件中。
在linux下可以用cat命令显示id_rsa.pub中的内容:
cat ~/.ssh/id_rsa.pub
接着拷贝.ssh/id_rsa.pub文件内的所有内容,将它粘帖到github帐号管理中的添加SSH key界面中。
在团队协作使用git的过程中,一般会禁用直接提交master分支的权限。正常操作应该是,在新建分支上进行处理,然后提交一个request,请求合并,也就是常说的PR(Pull Request)。
上传新的版本后就可以进行版本的管理等操作,比如上一小节介绍的拉取请求、解决冲突、合并拉取请求等操作。
查看历史版本的操作如下:
然后就可以看到历史版本,每一个版本分别做了什么样的修改,所以在git commit -m "修改内容部分"要好好填写修改的内容:
三、从GitHub上指定分支clone代码
如果是从master/main分支clone代码,则:
git clone 仓库地址
# 仓库地址为:git.com:xxx/xxx.git
如果想从指定分支clone代码,则
git clone -b 分支名称/tag名称 (--depth=1) 仓库地址
# 仓库地址为:git.com:xxx/xxx.git
# depth 表示克隆深度, 1 表示只克隆最新的版本. 因为如果项目迭代的版本很多, 克隆会很慢
如果想下载历史版本(历史版本没有历史版本号),就可以先git clone,然后从commits找到对应版本的SHA并复制SHA,然后cd到刚下载的代码目录,git checkout SHA,当前目录的代码就变成了该版本。也可以直接通过历史版本进行下载。
当给一个版本打上版本号后,如果这个版本被merge到了master分支,可以通过版本号下载这个版本。
四、本地分支和远程分支之间的一些操作
Git的分支实际上是一个指向某个版本的指针,对分支的增删改操作就相当于对指针的增删改,因此十分快速轻量。
本地分支就是本地Git仓库里的一个指针,指向某个提交。
远程分支是远程仓库里的一个指针,指向远程仓库中的某个提交。
4.1 常用操作
新建一个本地分支feature1。即在当前版本上新建一个分支,也就是新增一个指向当前版本的指针:
git branch feature1
切换到feature1分支。改变HEAD的指向至对应的分支;HEAD是git中一个特殊的指针,它永远指向本地的当前活跃分支,因此在本地切换分支就相当于改变HEAD的指向:
git checkout feature1
新建并切换到分支feature1,操作1和2可以合并成一个步骤:
git checkout -b feature1
还可以将feature1推送到远程:
git push origin feature1
这样远程就会新增一个名为feature1的分支,并且本地的feature1会自动跟踪远程的feature1。
如果不想让远程的分支也命名为feature1:
git push origin feature1:feature1_o
这个命令意为将本地的feature1分支,推送到远程,在远程的分支名为feature1_o,并跟踪之
可以发现上个命令其实是git push origin feature1:feature1的简化
合并分支。在feature1上做了一些修改提交后,还可以将提交merge到主分支:
git checkout master // 先将当前分支切换为master
git merge feature1 // 再将feature1合并进当前分支
合并feature1上的提交后,如果想将这些提交同步到远程的master,则可以执行 git push origin master将本地合并的提交推送到远程。
在feature1分支合并后,还可以再删除分支feature1:
git branch -d feature1
如果未执行合并便删除分支,git会提示错误error:分支’feature1’ 没有完全合并,如确定要删除,可使用-D强制删除:
git branch -D feature1
同样也可以删除远程分支:
git push origin :feature1_o
这里其实运用了个小技巧,将本地的“空”推送到远程的feature1_o分支,也就是删除了远程feature1_o分支。
也可以使用以下这个命令来删除:
git push origin --delete 分支名称
4.2 git修改远程仓库地址
1、直接修改远程仓库地址
查看远程仓库地址
git remote -v
修改远程仓库地址:
git remote set-url origin [url]
2、先删除再修改地址
git remote rm origin
git remote add origin [url]