这篇文章是我入门Github时期记录的笔记,当时主要是参考GitHub入门与实践 (豆瓣)一书,文中有部分内容也来源于此。
个人感觉比较适合新手入门的,感兴趣的朋友可以自行阅读。

前面的简介和Github的账号创建暂且略过,从需要输入代码的部分开始:

使用前的准备

创建账户(略)

设置头像(略)

注:以下需要:Windows10操作系统,下载好GitBash;Linux同理。

设置SSH Key

第一个问题出现了,什么是SSH Key呢?我的理解是GitHub通过SSH Key与本地的仓库相连接,也就是说我们在本地创建SSH Key然后用它连接到GitHub。这样才能完成从远端Github下载到本地,从本地上传到Github的操作。

(先切换到目标文件夹,在目标处右键Gitbash here或者命令行cd过去都可以)

打开下载好的GitBash开始输入:

"email@xxx.com"

运行完成后设置一下密码。

设置完成后系统会告诉你id_rsa和id_rsa.pub的位置以及key的指纹和图像(Fingerprint, Randomart Image)分别是什么。

其中id_rsa是私有密钥,id_rsa.pub是**公开密钥**,GitHub即通过**公开密钥**认证来连接已有仓库。

添加公开密钥

先通过:

$ cat ~/.ssh/id_rsa.pub

查看自己的Key,然后在GitHub网页上找到Add SSH Key的入口,Title处输入密钥名称,Key部分粘贴Key内容即可。(注意:Key不包括邮件,但包括“ssh-rsa”)

完成后会收到提示邮件。

文中提到完成设置之后就可以用私人密钥与GitHub进行认证和通信了,即运行:

$ ssh -T git@github.com

成功的话会出现:

Hi *Your name*! You've successfully authenticated, but GitHub does not provide shell access.

基本操作

本地仓库初始化

这部分是关于本地的Git仓库的基本操作。

首先打开GitBash,建立一个目录并初始化仓库:

$ mkdir git-tutorial   #新建文件夹
$ cd git-tutorial   #切换到该文件夹目录
$ git init      #初始化仓库

成功后会生成.git目录,其内存放的便是管理当前目录内容所需的仓库数据。称之为“工作树”,文件编辑在工作树中进行,仓库内是记录和快照。

创建+初始化仓库完成后,可以查看其状态:

$ git status

结果会显示①当前位置(分支)②有无可提交内容;既然是新建的仓库肯定啥都没有。

于是建立一个README.md文件进行实验:

#建立文件
$ touch Learning tracker
$ git status
#把它添加到暂存区
$ git add Learning tracker
$ git status
#保存历史记录
$ git commit -m "first commit"
$ git status

这里提到了git commit命令——保存仓库的历史记录,我记得之间用push把本地文件传到GitHub之前也有git commit命令,之前一直没搞清楚commit和push都是上传,为什么要进行两次呢。现在清楚了,commit提交的是“历史记录”,未来可以通过commit命令的记录复原文件。

关于提交日志

$ it log                 #显示以往提交的hash值,提交人和时间。
$ git log --pretty=short  #不显示日期
$ git log Learning tracker       #只显示与指定文件相关的日志
$ git log -p
$ git lop -p Learning tracker    #只看某文件提交前后的差别

查看工作树、暂存区和最新提交的区别

$ git diff            #对比工作区(未add)和暂存区(add之后),如果当前暂存区没有文件,就比较当前工作区和版本库(上一次commit之后)的差别
$ git diff HEAD       #对比工作区(未add)和暂存区(add但未commit),分别和版本库(上一次commit之后)
$ git diff --cached   #对比暂存区(add之后)和版本库(上一次commit之后)

分支的操作

$ git branch                    #查看所有分支,*为当前所在
$ git checkout -b feature-A     #创建名为feature-A的分支并且切换到它
$ git branch feature-A          #效果等同
$ git checkout feature-A        #效果等同

在feature-A分支下对README.md修改,并不会影响master分支下的README.md,这就是Git分支的优点。

$ git checkout -                #切换回上一个分支
$ git checkout master           #切回master,等同上一条
$ git merge --no-ff feature -A  #合并分支A至master
$ git log --graph               #图表输出日志

更改提交

处理文件的回溯,推进,以及提交信息错误或者是因为出现了简单的错误而不想占用过多历史空间的情况。

$ git reset --hard hash值       #回复到某hash值的状态(所有文件)
$ git reflog                    #git log只能以当前状态为终点查看日志,而这可以看所有历史
$ git commit --amend            #修改提交信息(如之前的first commit)(Vim)
$ git rebase -i HEAD~2          #选定当前分支中包含HEAD(最新提交)在内的2个最新历史记录为对象,并在编辑器中打开

rebase提交后会出现:

pick hashA aaa
pick hashB bbb
……

若想将bbb的历史记录压缩到aaa里,将第二行的pick改成fixup后保存并关闭编辑器即可。

之后再将aaa分支与master合并,便省去了多合并一次bbb的历史。

推送至远程仓库

之前的操作都是针对本地仓库在git上进行的,现在开始学习GitHub上的远程仓库操作。

添加远程仓库

首先在GitHub网站上建立新的仓库,注意一般不勾选自动建立README.md的选项,防止本地仓库与远程仓库失去“整合性”(当然也可以后期强制覆盖,先pull一下就可以)。

然后将该仓库设置成本地仓库的远程仓库:

$ git remote add origin git@github.com:yourname/yourrepositories.git

这一步完成后Git会自动将远程仓库的名字设置为origin。

推送

$ git pull origin master --allow-unrelated-histories   #如果远程仓库内有内容,先把他们pull下来和本地同步
$ git push -u origin master                     #将当前分支内容推送给远程仓库的origin的master分支

注意此处“-u”参数的作用在于,将origin仓库的master分支设置为本地当前分支的上游(upstream),这使得未来通过git pull从远程仓库获取内容时本地仓库的这个分支可以直接从origin-master获得内容。(只有第一次推送带参数-u,之后不用再带)

本地master以外的分支推送也是同理:

$ git checkout -b feature-B         #切换到分支B
$ git push -u origin feature-B      #推送分支B,即将本地的B分支推送到远程(origin)

从远程仓库获取

获取远程仓库

首先切换到其他目录下,准备将GitHub上的仓库clone到本地:

$ git clone git@github.com:yourname/yourrepositories.git

运行后我出现了:

Enter passphrase for key '/c/Users/Shinelon/.ssh/id_rsa':

直接输入密码继续。

(在其他目录下也要先git init建立仓库数据,否则这一步会报错!)

完成后本地仓库的master分支与远程仓库的master分支完全相同。

使用-a参数可以同时查看本地仓库和远程仓库的分支信息:

$ git branch-a

获取远程某分支

$ git checkout -b feature-X origin/feature-Y

以远程仓库的分支Y为来源,在本地仓库中建立X分支。

向远程分支提交修改

一般情况下,如果要对自己/他人的远程分支提交修改,可以如下操作:

$ git checkout -b featrueX origin/featureY          #从远程获取Y分支
$ git diff                                          #在本地对X,即获取到的Y进行修改
$ git commit -am "xxx"                              #加入暂存区并提交,=add+commit
$ git push                                          #将本地X分支推送到Y

获取最新分支

$ git pull origin featureY

将本地的X通过Y更新到最新。

一些自问自答的小问题:

1.在本地建立仓库直接新建文件夹,然后cd到目录下git init即可;远程则是GitHub网页建立新仓库。通过git clone命令能够将origin(远程)的仓库直接克隆到本地,而本地到origin的push命令却只能push某个分支的内容到远程?

答:确实是这样,要推送全部分支到origin的话需要使用

$ git push -all origin                             #这样即是将本地所有分支都推送到了origin

2.练习时创建了大量分支,本地和远程都有,要如何删除?

答:

$ git branch -d <BranchName>                       #删除了本地的BranchName分支
$ git push origin :<BranchName>                    #将一个空分支推送至远程BranchName,效果等同与删除远程BranchName
$ git push origin --delete <BranchName>            #真正的删除指令

3.分支只能在本地之间切换吗?

答:是这样,而且研究了一下我发现git branch和git checkout虽然在新建分支并切换的时候效果等同,但实际branch就是一个新建的命令,checkout才是切换至某分支的指令。

更多简单的指令可以看看这个网址,感觉说的还比较详细:git push命令 - Git教程™。

4.今天在本地修改文件后同步到GitHub中,直接使用git commit -am '说明'

进行提交,结果出现了一点小bug,部分GitHub中的文件夹丢失了。具体原因还不是很清楚。

答:改用

$ git add .
$ git commit -m ' '
$ git push

小技巧

1.显示快捷键:

【Shift+/】

2.通过URL直接查看分支间的差别:

①分支4-0-stable和3-2-stable之间的差别:

rails/rails **compare/4-0-stabel...3-2-stable**

②查看master分支在最近7天内的差别:

rails/rails **compare/master@{7.day.ago}...master**

③查看master分支在2013年9月9日与现在的区别

rails/rails **compare/master@{2013-09-09}...master**

Issue的使用

1.给Issue添加标签/里程碑,以及GFM语法。(略)

2.GFM的独有功能Tasklist语法:

本日要做的任务:

- [x] 早上8点以前起床

- [x] 看完《怪诞心理学》并还回图书馆

- [ ] 学习时间超过5h

- [ ] 运动至少30min

3.Close Issue:

若一个处于OPEN状态的Issue处理完毕,可在该提交中以以下任意格式描述提交信息,从而Close该Issue:

fix#24 fixes#24 fixed#24 /fix可以换成close和resolve

Pull Request

1.以.diff或.patch格式获取Pull Request:

如下输入即可:

https://github.com/UserName/RepositoryName **/pull/28.diff** 28为Pull Request的编号#28

https://github.com/UserName/RepositoryName **/pull/28.patch**

2.在Conversation引用评论:

选中想要引用的部分,然后按【R】。

3.Files Changed:

该标签页可以查看当前Pull Request更改的内容以及前后的差别,但是默认情况下空格的改变也会高亮显示,不方便,可以在URL末尾添加:

“?w=1”

便不再显示空格的区别。

github 删除分支_Github新手入门指南相关推荐

  1. mac 删除分区 command r 选择网络_Mac使用必看基础篇,Mac快捷键大全,mac新手入门指南...

    你是Mac新手吗?你对使用Mac电脑有疑问吗?你还不知道mac有哪些快捷键吗?别着急,来看看小编给大家准备的Mac使用必看基础篇--Mac快捷键大全,对于新手用户很有帮助哦!! 一.开机相关命令快捷键 ...

  2. python pip-什么是pip?Python新手入门指南

    什么是 pip ?pip 是 Python 中的标准库管理器.它允许你安装和管理不属于 Python标准库 的其它软件包.本教程就是为 Python 新手介绍 pip. 通过本教程,你将学到: 1. ...

  3. Apache Kylin新手入门指南

    Apache Kylin新手入门指南 文章目录 Apache Kylin新手入门指南 1 Apache Kylin是什么 2 为什么使用Apache Kylin 3 Apache Kylin的易用性如 ...

  4. Neo4j 新手入门指南

    Neo4j 新手入门指南 前言: 前段时间在公司实习有用到图数据库做一个小项目,就想着记录一下当时找到的比较有用的资料. 纯属入门学习啦,新手当作一个大纲来学习也可以! 感谢关注! 所有链接均在文章结 ...

  5. 蓝桥云课之新手入门指南

    这是蓝桥云课学习人数最多的课程: 新手入门指南之玩转蓝桥云课 460896 人学过 27739 次评价 作者: 云课管理员 难度: 初级 综合评分: 9.4 复习一遍,里面共有3中课程模式: 第一种, ...

  6. rust油桶用什么打_腐蚀rust新手入门指南 游戏新萌拿好不谢!

    川北在线核心提示:原标题:腐蚀rust新手入门指南 游戏新萌拿好不谢! 如何开始游戏? 巴拉巴拉那么多现在开始步入正轨吧! 点击find game 就进入了服务器列表,在这里你可以加入官方的服务器(热 ...

  7. 新手入门指南之玩转蓝桥云课

    新手入门指南之玩转蓝桥云课 文档1  你好,蓝桥云课 实验1 Linux 桌面环境使用指南 本实验采用的就是图形界面的 Linux 桌面环境.图形界面使用的是非常优秀的 Ubuntu Linux 操作 ...

  8. 从GitHub删除分支的仓库

    本文翻译自:Delete forked repo from GitHub I'm starting with git and GitHub and there's a project I'm watc ...

  9. 从零开始学黑客:网络黑客新手入门指南(转)

    从零开始学黑客:网络黑客新手入门指南(转) (一)系统基本知识 1.a.什么是IP:要是真的想说清楚什么是IP,那是一项很繁重的工作.简单的来说,IP就是所有Internet或是局域网上的主机的身份证 ...

最新文章

  1. System.OutOfMemoryException
  2. linux hadoop集群搭建,hadoop集群搭建
  3. MyBatisPlus条件构造器中last方法怎样使用
  4. WorkerMan 入门学习之(二)基础教程-Connection类的使用
  5. SpringBoot配置@ConfigurationProperties与@Value的区别
  6. Java虚拟机-垃圾回收简介
  7. c语言程序设计二级考试哪些题型,计算机二级考试题型及分值
  8. 指针与引用的混合使用总结
  9. 14.http 304优化,了解客户端缓存
  10. mysql php教程笔记_Mysql学习笔记(一)
  11. 【网络安全学习笔记3】侧信道攻击以及技术概览
  12. 学习Flutter:Hello Word篇
  13. xposed框架 微信群发源码
  14. 软件开发方法论:TDD、BDD、DDD、ATDD、DevOps
  15. Spring IOC的工作原理
  16. 零基础也能用ChatGPT写代码,简直不要太爽
  17. [盘点]现今热门的h5网游
  18. linux安装包安装方法
  19. TenSEAL 同态加密(密文传输)
  20. SuperMap GIS 10i 新一代三维GIS技术白皮书

热门文章

  1. sysctl: 深入使用Linux的必经之路
  2. Linux内核目录结构(2.6版本以上的kernel)
  3. deepin--eclipse安装与配置
  4. OpenCV不规则ROI提取
  5. python dlib学习(二):人脸特征点标定
  6. c++socket多个客户端通过不同端口与一个服务端通信_手写RPC,深入底层理解整个RPC通信...
  7. 获取另一个驱动的设备结构体_《rt-thread驱动框架分析》-i2c驱动
  8. iptables_默认规则
  9. Linux Mint 18.2 Sonya 将于 6 月上旬发布公测版本
  10. 2021年终总结-向着阳光前进