玩转GitHub

简介: 玩转GitHub

玩转GitHub


Git基础

下载Git

Git官网下载对应操作系统的Git。

安装完成后,还需要最后一步去设置自己的名字以及邮箱地址,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

使用Git

创建新仓库

从终端(cmd)进入你想要记录内容更改的文件夹里

例如我们进入gittest文件夹

输入:

git init

这个文件夹以后的更改就会被记录了。(如果是空文件夹会提示Initialized empty Git repository in /home/yep/code/gittest/.git/,告诉你文件夹为空)

检出仓库

执行如下命令以创建一个本地仓库的克隆版本:

git clone /path/to/repository

如果是远端服务器上的仓库,你的命令会是这个样子:

git clone username@host:/path/to/repository

工作流

网络异常,图片无法展示
|

添加和提交

你可以提出更改(把它们添加到暂存区),使用如下命令:

git add <filename>
git add *
git add .

这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:

git commit -m "代码提交信息"

现在,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。

推送改动

你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库:

git push origin master

可以把 master 换成你想要推送的任何分支。

如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:

git remote add origin <server>

如此你就能够将你的改动推送到所添加的服务器上去了。

分支

分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。

网络异常,图片无法展示
|

创建一个叫做“feature_x”的分支,并切换过去:

git checkout -b feature_x

切换回主分支:

git checkout master

再把新建的分支删掉:

git branch -d feature_x

除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的

git push origin <branch>

更新与合并

要更新你的本地仓库至最新改动,执行:

git pull

以在你的工作目录中 获取(fetch)  并 合并(merge)  远端的改动。

要合并其他分支到你的当前分支(例如 master),执行:

git merge <branch>

在这两种情况下,git 都会尝试去自动合并改动。遗憾的是,这可能并非每次都成功,并可能出现冲突(conflicts) 。 这时候就需要你修改这些文件来手动合并这些冲突(conflicts) 。改完之后,你需要执行如下命令以将它们标记为合并成功:

git add <filename>

在合并改动之前,你可以使用如下命令预览差异:

git diff <source_branch> <target_branch>

标签

为软件发布创建标签是推荐的。这个概念早已存在,在 SVN 中也有。你可以执行如下命令创建一个叫做 1.0.0 的标签:

git tag 1.0.0 1b2e1d63ff

1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。可以使用下列命令获取提交 ID:

git log

你也可以使用少一点的提交 ID 前几位,只要它的指向具有唯一性。

log

如果你想了解本地仓库的历史记录,最简单的命令就是使用:

git log

你可以添加一些参数来修改他的输出,从而得到自己想要的结果。 只看某一个人的提交记录:

git log --author=bob

一个压缩后的每一条提交记录只占一行的输出:

git log --pretty=oneline

或者你想通过 ASCII 艺术的树形结构来展示所有的分支, 每个分支都标示了他的名字和标签:

git log --graph --oneline --decorate --all

看看哪些文件改变了:

git log --name-status

这些只是你可以使用的参数中很小的一部分。更多的信息,参考:

git log --help

替换本地改动

假如你操作失误(当然,这最好永远不要发生),你可以使用如下命令替换掉本地改动:

git checkout -- <filename>

此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。

假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它:

git fetch origin
git reset --hard origin/master

版本回退

  • 首先我们可能不记得做了哪些修改,我们需要查看下历史记录,执行语句 git log
    网络异常,图片无法展示
    |
    这里我们也可以看出git commit -m 后面跟的说明多么重要,写的越详细,你越清楚。还要注意的就是每个记录里的长长的数字,这个是版本号。
  • 回退版本需要 git reset --hard HEAD^ 命令,如果想回到上一个版本可以用HEAD^,上上版本即HEAD^^,依次类推。这里我们回到上一个版本试下。
    网络异常,图片无法展示
    |

    再点开first.txt文件可以看到内容已经变成版本2的内容了。
  • 看似我们已经完成了需求,但其实,我们有可能还会出现,回退到以前版本使用了一段时间后,发现还是原来的版本更好,但用上面的指令已经无法回退到原来的版本。这里就需要借助上面提到的版本号。使用命令 git reset --hard 版本号
    网络异常,图片无法展示
    |

    此时再查看文件,已经变为版本3的内容了

Github远程仓库

准备工作

  • 申请Github账号 直接去github.com注册。
  • 基础Git语法知识
  • 本地安装好Git bash运行环境

建立远程仓库

登录Github账号后点击右上角加号建立自己的仓库,名称自拟。

此处以test为例。

网络异常,图片无法展示
|

配置 SSH 秘钥

创建SSH密钥

在Git bash中执行命令:

ssh-keygen -t rsa -C "abc@163.com"   #此处填自己注册GitHub的邮箱

没有特殊需求的话可以不设置密码,两次回车继续。

~/vvd_git$ ssh-keygen -t rsa -C "zywvvd@mail.ustc.edu.cn"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zywvvd/.ssh/id_rsa): 
Created directory '/home/zywvvd/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/zywvvd/.ssh/id_rsa.
Your public key has been saved in /home/zywvvd/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:klt1J9JxcGBj7xgB5dC1cXsQmK9ioOhInLRgqKppO8k zywvvd@mail.ustc.edu.cn
The key's randomart image is:
+---[RSA 2048]----+
|      o+p+=o+.   |
|       B.Bo+ o   |
|      = *.+ . .  |
|.    o = *.  .   |
|oo  . . u..      |
|* +   . .        |
|+*.. . .         |
|*E  .  .   .     |
|Ooo              |
+----[SHA256]-----+
复制代码

得到类似上述输出即为创建成功。得到的文件放在~/.ssh文件夹中。

添加SSH Key

  • 登陆github
  • 在settings中设置 'SSH and GPG keys'
  • 添加new SSH key—— 设置名字并将.ssh 文件夹中isa.pub公钥文件的内容复制进去
  1. 创建一个SSH Key。到主目录下(本机为 C:\Users\ZJ-luoke)查看有无 .ssh 目录,若有,直接跳到下一步。若无,则打开Git Bash,执行命令 ssh-keyGen -t rsa -C "youremail@example.com" 去生成SSH Key。注意上面的邮箱要填自己的。然后一路回车,操作结束之后,就会出现 .ssh 目录。
  2. 如果没有操作错误,.ssh 目录会有两个文件如下:
    网络异常,图片无法展示
    |

    这两个就是SSH Key的秘钥对,id_rsa 是私钥,不能泄露出去,而 id_rsa.pub 就是公钥。
  3. 登录GitHub,按下图顺序点击
    网络异常,图片无法展示
    |
    网络异常,图片无法展示
    |
    网络异常,图片无法展示
    |

在title上填写钥匙名,再复制 id_rsa.pub 文件的内容,粘贴到下面的key框里。最后点击Add SSH key,大功告成。

测试SSH秘钥

执行命令:

ssh -T git@github.com

输出结果:

Warning: Permanently added the RSA host key for IP address '52.74.223.139' to the list of known hosts.
Hi zywvvd! You've successfully authenticated, but GitHub does not provide shell access.

出现欢迎字段说明SSH密钥配置成功。

测试

同步本地库到远程库上

在已有的本地仓库中使用remote命令链接仓库:

git remote add origin https://github.com/zywvvd/test.git

编辑本地库内容,推送到远程端:

echo "#example" >> README.md
git add README.md
git commit -m "README.md created"
git push -u origin master

此时可以在github端看到更新上传的说明文件。

克隆仓库

执行如下命令以创建一个本地仓库的克隆版本:

git clone /path/to/repository

如果是远端服务器上的仓库,你的命令会是这个样子:

git clone username@host:/path/to/repository

Fork

Fork别人的项目或者多人合作项目,最好每人都拥有一个独立分支,然后由项目维护人合并。如何建立自己的分支?

# 分支的创建和合并
# git branch yourbranch 
# git checkout yourbranch    切换到yourbranch
# 开发yourbranch分支,然后开发之后与master分支合并
# git checkout master
# git merge yourbranch
# git branch -d yourbranch    合并完后删除本地分支

如何将牛人的远程分支更新到自己的本地分支?

# 查看当前项目下远程
# git remote
# 增加新的分支链接,例如
git remote add niuren giturl…
# 获取牛人的远程更新
git fetch niuren
# 将牛人的远程更新合并到本地分支
git merge niuren/master


相关文章
|
XML 存储 前端开发
想要制作沙盒游戏?那么这一款插件你一定不能错过(Unity3D)
今天给大家介绍一款简单而又强大的多人沙盒游戏开发插件VOXL。 VOXL是一款简单且易于理解的多重体素沙盒游戏,使用Unity的UNET网络系统开发。 由于服务器和客户端是一体的,所以我们不用再费心搭建服务器,会大大提高我们的开发效率。 VOXL目前只包含大约2500行干净、优雅和易于理解的源代码。
|
安全 应用服务中间件 Apache
目标URL存在http host头攻击漏洞
目标URL存在http host头攻击漏洞
1597 0
目标URL存在http host头攻击漏洞
|
Java 测试技术 API
Zookeeper开源客户端Curator之基本功能讲解
Zookeeper开源客户端Curator之基本功能讲解
783 0
Zookeeper开源客户端Curator之基本功能讲解
|
人工智能 运维 监控
智能化运维:AI在IT运维中的应用与挑战
【6月更文挑战第21天】本文将深入探讨AI技术如何革新传统的IT运维领域,通过案例分析展示AI在故障预测、自动化处理和安全监控等方面的应用。同时,文章也将讨论AI运维带来的挑战,包括数据隐私、系统复杂性和成本问题,并提出相应的解决策略。
791 6
|
关系型数据库 MySQL
This application requires Visual Studio 2013 x64 Redistributable. Please install ———— 版【已解决】
This application requires Visual Studio 2013 x64 Redistributable. Please install ———— 版【已解决】
568 1
|
算法 数据处理 计算机视觉
论文介绍:基于点标注的实例分割
【5月更文挑战第24天】研究人员提出了一种创新的弱监督实例分割方法,通过点标注代替传统的像素级掩模标注,显著降低数据标注成本和时间。点标注方案只需在对象边界框内标注少量点,与Mask R-CNN兼容,实现接近全监督性能。改进的PointRend模块(Implicit PointRend)在点监督下表现出色,简化了模型设计。实验表明,使用10个点标注的Mask R-CNN能达到全监督模型的性能,为实例分割的实际应用开辟了新途径。尽管取得初步成功,但面临处理不同尺度对象和提高泛化能力的挑战。
269 4
|
设计模式 开发框架 .NET
分享一个 .NET Core Console 项目使用依赖注入的详细例子
分享一个 .NET Core Console 项目使用依赖注入的详细例子
297 0
|
设计模式 Java 开发者
如何在Java项目中实现领域驱动设计(DDD)
如何在Java项目中实现领域驱动设计(DDD)
|
算法 Java 开发者
深入理解死锁的原因、表现形式以及解决方法,对于提高Java并发编程的效率和安全性具有重要意义
【6月更文挑战第10天】本文探讨了Java并发编程中的死锁问题,包括死锁的基本概念、产生原因和解决策略。死锁是因线程间争夺资源导致的互相等待现象,常由互斥、请求与保持、非剥夺和循环等待条件引起。常见死锁场景包括资源请求顺序不一致、循环等待等。解决死锁的方法包括避免嵌套锁、设置锁获取超时、规定锁顺序、检测与恢复死锁,以及使用高级并发工具。理解并防止死锁有助于提升Java并发编程的效率和系统稳定性。
731 0
Outlook邮箱怎么建立邮件组?
在Outlook中创建邮件组,登录邮箱后点击“联系人”,选择“新建联系人组”,命名并添加成员,保存即成。发邮件时直接写邮件组名,Outlook会自动填充成员。可编辑或删除组,高效管理邮件收发。