学习GitHub看这一篇就够了


GitHub学习笔记.

之前对git学习只是简单的了解了下命令,但是很容易就忘记,因此写下这篇文章记录下git学习过程以及实践

git提交步骤:

  1. git init //初始化仓库
  2. git add .(文件name) //添加文件到本地仓库
  3. git commit -m “first commit” //添加文件描述信息
  4. git remote add origin + 远程仓库地址 //链接远程仓库,创建主分支
  5. (新) git branch -M main
  6. <git pull origin main// 把本地仓库的变化连接到远程仓库主分支>
  7. 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、什么是版本控制.

版本管理就是管理更新的历史记录。(记录一款软件添加或更改源代码的过

程,回滚到特定阶段,恢复误删除的文件等)

版本控制系统的分类:.

  1. 集中型(Subversion)

    将仓库集中存放在服务器之中,所以只存在一个仓库。

    集中型

    • 优点:
      • 在同一服务器上,便于管理
    • 缺点
      • 服务器宕机,数据丢失
      • 所处环境无法连接服务器,无法获取最新源代码
  2. 分散型(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.

添加公钥到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参数可以同时显示本地仓库和远程仓库的分支信息。


文章作者: liuminkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liuminkai !
评论
 上一篇
在linux系统中,配置tomcat快捷方式过程中报错-Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program 在linux系统中,配置tomcat快捷方式过程中报错-Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program
在linux系统中,配置tomcat快捷方式过程中报错.报错内容如下:. Neither the JAVA_HOME nor the JRE_HOME environment variable is defined,At least one
2020-11-11
下一篇 
Redis详细笔记-学习Redis看这一篇就够了 Redis详细笔记-学习Redis看这一篇就够了
Redis详细笔记. 笔记记录 B站狂神说Java的Redis课程:https://www.bilibili.com/video/BV1S54y1R7SB 一、NoSQL概述.1、为什么要使用NoSQL. 现在是大数据时代(一般的数据库已
2020-11-02
  目录