GitHub学习笔记.
之前对git学习只是简单的了解了下命令,但是很容易就忘记,因此写下这篇文章记录下git学习过程以及实践
git提交步骤:
- git init //初始化仓库
- git add .(文件name) //添加文件到本地仓库
- git commit -m “first commit” //添加文件描述信息
- git remote add origin + 远程仓库地址 //链接远程仓库,创建主分支
- (新) git branch -M main
- <git pull origin main// 把本地仓库的变化连接到远程仓库主分支>
- git push -u origin main//把本地仓库的文件推送到远程仓库
一、什么是GitHub.
GitHub 是为开发者提供 Git 仓库的托管服务。这是一个让开发者与
朋友、同事、同学及陌生人共享代码的完美场所。
Git:一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 GitHub 是 在网络上提供Git仓库的一项服务。
1、主要功能.
Git 仓库.
我们可以免费建立任意个 GitHub 提供的 Git 仓库,但如果是私有仓库,需要花钱。
Issue.
将一个任务或问题分配给一个 Issue 进行追踪和管理的功能
Wiki.
通过 Wiki 功能,任何人都能随时对一篇文章进行更改并保存,因此可以多人共同完成一篇文章。该功能常用在开发文档或手册的编写中。
Pull Request.
开发者向 GitHub 的仓库推送更改或功能添加后,可以通过 Pull Request 功能向别人的仓库提出申请,请求对方合并。
Follow.
关注其他开发者,你所 Follow 的用户的活动就会显示在您的控制面板页面中。
Watch.
也可以获取别人项目最新的信息
二、Git.
Git 属于分散型版本管理系统,是为版本管理而设计的软件。
1、诞生背景.
- Linux 的创始人 Linus Torvalds 在 2005 年开发了 Git 的原型程序。由于在 Linux 内核开发中使用的既有版本管理系统的开发方许可证发生了变更,为了更换新的版本管理系统,Torvalds 开发了 Git。
2、什么是版本控制.
版本管理就是管理更新的历史记录。(记录一款软件添加或更改源代码的过
程,回滚到特定阶段,恢复误删除的文件等)
版本控制系统的分类:.
集中型(Subversion)
将仓库集中存放在服务器之中,所以只存在一个仓库。
- 优点:
- 在同一服务器上,便于管理
- 缺点
- 服务器宕机,数据丢失
- 所处环境无法连接服务器,无法获取最新源代码
- 优点:
分散型(git)
GitHub 将仓库 Fork 给了每一个用户。Fork 就是将 GitHub 的某个特定仓库复制到自己的账户下。Fork 出的仓库与原仓库是两个不同的仓库,开发者可以随意编辑。
- 优点
- 服务器宕机影响小(多个仓库)
- 缺点
- 因为有多个仓库,相对复杂一些(操作,对新手不太友好)
- 优点
Git 与 SVN 区别点:
- 1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
- 2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
- 3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
- 4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
- 5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
3、初始设置(git安装后).
设置姓名和邮箱地址:.
git config --global user.name "你的用户名(git)" # 用户名使用英文
git config --global user.email "你的邮箱"
这个命令执行后,用户目录生成 .gitconfig文件中,存在刚才的配置
提高命令可读性:.
使各种命令输出更容易分辨
git config --global color.ui auto
4、使用GitHub(需注册账号).
设置SSH Key (本地电脑生成密钥).
# 密钥生成
ssh-keygen -t rsa -C "你的邮箱"
# 生成文件(用户目录下.ssh文件夹生成) id_rsa:私钥 id_rsa.pub:公钥
添加公钥到GitHub.
测试连接.
ssh -T git@github.com
出现以上表示连接成功
创建仓库.
这些命令的基本使用.
首先创建一个目录(liuyou_blog),目录内,打开git命令行
echo "# liuyou_blog" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/kaiminliu/liuyou_blog.git
git push -u origin main
5、git基本操作.
1. git init——初始化仓库.
初始化成功后,会在当前目录生成 .git 目录(存储着管理当前目录内容所需的仓库数据)
这个目录的内容:附属于该仓库的工作树
2.git status——查看仓库的状态.
git status命令用于显示 Git 仓库的状态。
3.git add——向暂存区(Stage或Index)中添加文件.
4.git commit——保存仓库的历史记录(history).
将当前缓存区中的文件实际保存到仓库的历史记录中(可以使用记录恢复文件)
5.git log——查看提交日志.
只显示提交信息第一行(简述)
git log --pretty=short
只显示指定目录、文件的日志
git log 文件名
显示文件的改动
查看文件commit后的改动
git log -p # 文件改动前后差别显示在提交信息之后 or git log -p 文件名
git log命令只能查看以当前状态为终点的历史日志
使用 git reflog命令,查看当前仓库的操作日志
6.git diff——查看更改前后的差别.
git diff命令可以查看工作树、暂存区、最新提交之间的差别。
查看工作树和暂存区的差别
git diff
查看工作树和最新提交的差别
git diff HEAD # HEAD 是指向当前分支中最新一次提交的指针。
好习惯:在执行 git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交。
7.分支操作.
1.git branch——显示分支一览表.
main 左边的
*
表示当前分支,就上图,只有一个分支
创建新分支
git branch 分支名
2.git checkout -b——创建、切换分支.
以当前分支创建新的分支,并切换分支
git checkout -b 分支名 # 实际上就是 git branch 分支名 + git checkout 分支名
在当前分支内更新内容不会影响到,其他分支
切换回上一个分支
git checkout -
3.特性分支(topic分支).
集中实现单一特性(主题),除此之外不进行任何作业的分支。在日常开发中,往往会创建数个特性分支,同时在此之外再保留一个随时可以发布软件的稳定分支。稳定分支的角色通常由 master 分支担当
开发中出现bug,需要再创建新的分支,在新分支中修正
4.主干分支.
主干分支:合并的终点(版本:不存在开发一半的代码);如果有多个版本,存在多个主干分支
5.git merge——合并分支.
# 先切换到主干分支 git checkout 主干分支名
git merge --no-ff 特性分支名 # 为了在历史记录中明确记录下本次分支合并,我们需要创建合并提交。因此,在合并时加上 --no-ff参数
后面编辑器内容可以不做任何更改,保存关闭即可
6.git log –graph——以图表形式查看分支.
8.更改提交操作.
1.git reset——回溯历史版本.
要让仓库的
[^HEAD]: HEAD 是指向当前分支中最新一次提交的指针。
、暂存区、当前工作树回溯到指定状态,需要用到 git rest –hard命令
git reset --hard 目标时间点的hash值 #
使用 git reflog命令,查看当前仓库的操作日志
2.消除冲突.
- 特性分支new修改readme.md内容
同理:另一特性分支newbranch也做修改readme.md内容(但是改后内容不一样)
- 切换到主干分支,合并分支
打开readme.md文件(vim readme.md)
删除一个,重新add ,commit即可
3.git commit –amend——修改提交信息.
修改上一条提交信息
git commit --amend
4.git rebase -i——压缩历史.
在合并特性分支之前,如果发现已提交的内容中有些许拼写错误等,不妨提交一个修改,然后将这个修改包含到前一个提交之中,压缩成一个历史记录。
new分支中的helloworld.java 中添加错误信息,并提交
new分支中的helloworld.java 中添加正确信息,并提交
使用git rebase 把两条提交记录变为一条,良性修改
git rebase -i HEAD~2 # 合并最近两次的提交
良性修改:历史信息中不存在错误的数据
9.推送到远程仓库.
之前的操作都是针对于单一本地仓库的操作。
1.git remote add——添加远程仓库.
git remote add origin git@github.com:用户名/仓库名.git # origin: 远程仓库标识符
2.git push——推送至远程仓库.
想将当前分支下本地仓库中的内容推送给远程仓库,需要用到git push命令。
git push -u origin master # 表示当前分支内容,将推送到远程仓库的master分支 -u 表示推送的同时,将 origin 仓库的 master 分支设置为本地仓库当前分支的 upstream(上游)。添加了这个参数,将来运行 git pull命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从 origin 的 master 分支获取内容,省去了另外添加参数的麻烦。
10.从远程仓库获取.
1.git clone——获取远程仓库.
clone下来的仓库,不能与之前操作的仓库在同一个目录下,即最好新目录
git clone git@github.com:用户名/仓库名.git # 默认克隆 master分支
获取远程的其他分支(在以上操作之后)
git checkout -b 对应分支名 origin/对应分支名
2.git pull——获取最新的远程仓库分支.
git pull origin 本地分支名(远程也必须存在) # 将本地的该分支更新到最新状态
拓展.
学习git推荐的网站.
https://learngitbranching.js.org/
其他.
git commit -am “”.
git add + git commit -m
HEAD 是指向当前分支中最新一次提交的指针。.
git branch -a命令查看当前分支的相关信息。.
添加 -a参数可以同时显示本地仓库和远程仓库的分支信息。