GitHub使用指南

1、使用Github(gitLab)的前期准备

一、本地环境,设置姓名和邮箱

  • 设置使用Git时的姓名和邮箱地址
git config --global user.name "Firstname Lastname"
git config --global user.email "your_email@example.com"
复制代码

注意:
html

  • 1.查看用户名和邮箱地址
$ git config user.name
$ git config user.email
复制代码
  • 2.修改全局用户名和邮箱地址
$ git config --global user.name  "username"  
$ git config --global user.email "email"   
复制代码
  • 3.修改局部用户名和邮箱地址:
$ cd ~/you project                       
$ git config user.name  "username"      
$ git config user.email "email" 
复制代码
$ 第一步:控制面板 -----> 用户帐户                       
$ 第二步:用户帐户------> 管理windows凭据 
$ 第三步:找到对应的地址修改登陆名称和密码便可
``
复制代码

二、设置SSH Key

  1. 首先,你得有个Github帐号(gitLab也适用)。链接Github上已有仓库时的认证,是经过使用了SSH的公开密钥认证方式进行的。 运行下面的命令建立 SSH Key。
$ ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa): 按回车键
Enter passphrase (empty for no passphrase): 输入密码
Enter same passphrase again: 再次输入密码
复制代码
  1. 输入密码后会出现如下结果。
Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa.
Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub.
The key fingerprint is:
 fingerprint值 your_email@example.com
The key's randomart image is: +--[ RSA 2048]----+ | .+ + | | = o O . | 略 复制代码

id_rsa 文件是私有密钥,id_rsa.pub 是公开密钥。git

  1. Git查看已生成公钥和密钥
  • 经过命令窗口,打开你的git bash 窗口
  • 进入.ssh目录:cd ~/.ssh
  • 查看公钥:cat id_rsa.pub 或者vim id_rsa.pub;或者你也能够直接输入命令 :cat ~/.ssh/id_rsa.pub;或者你也能够直接打开你用户(通常都是Administrator)下的.ssh文件夹,打开它里面的id_rsa.pub 文件。
$ cat ~/.ssh/id_rsa.pub
ssh-rsa 公开密钥的内容 your_email@example.com
复制代码

若是经过上面的方式找不到公钥,你就须要先生成公钥了。github

三、添加公开密钥

  1. GitHub 中添加公开密钥,从此就能够用私有密钥进行认证了。
  2. 添加成功以后,建立帐户时所用的邮箱会接到一封提示“公共密钥添加完成”的邮件。 完成以上设置后,就能够用手中的私人密钥与 GitHub 进行认证和通讯了。让咱们来测试下链接是否成功。
$ ssh -T git@github.com
The authenticity of host 'github.com (207.97.227.239)' can't be established. RSA key fingerprint is fingerprint值 . Are you sure you want to continue connecting (yes/no)? 输入yes 复制代码

出现以下结果即为成功。web

Hi hirocastest! You've successfully authenticated, but GitHub does not provide shell access. 复制代码

四、建立远程仓库

  1. 首先建立Github远程仓库
  2. clone已有仓库
$ git clone git@github.com:hirocastest/Hello-World.git
Cloning into 'Hello-World'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
$ cd Hello-World
复制代码

而后,就能够在本地开心的敲代码了~~shell

2、Git实际操做

一、Git基本操做

  1. git init初始化仓库 初始化仓库成功后,,.git目录里存储着当前目录内容所需的仓库数据。 在Git中,包含.git目录的内容称为”附属于该仓库的工做树“。文件的编辑等操做在工做树中进行,而后记录到仓库中,以此管理文件的历史快照。
  2. git status查看仓库状态
  3. git add向暂存区中添加文件 要想让文件成为Git仓库的管理对象,就须要用git add命令将其加入暂存区。 暂存区是提交以前的一个临时区域。
  4. git commit保存仓库的历史记录 git commit命令能够将当前暂存区中的文件实际保存到仓库的历史记录中。经过这些记录,咱们就能够在工做树中复原文件。
  • 记录一行提交信息
$ git commit -m "First commit"
复制代码
  • 记录详细的提交 若是想要记述得更加详细,请不加 -m,直接执行 git commit命令。执行后编辑器就会启动,并显示以下结果。
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
#
# Initial commit
复制代码

在编辑器中记述提交信息的格式以下vim

  • 第一行:用一行文字简述提交的更改内容
  • 第二行:空行
  • 第三行之后:记述更改的缘由和详细内容
  1. git log查看提交日志
  • 只显示提交信息的第一行 $ git log --pretty=short
  • 只显示指定目录、文件的日志 $ git log README.md
  • 显示文件的改动
$ git log -p
$ git log -p README.md
复制代码

参数有不少,用到就去查一下。windows

  1. git diff

git diff命令能够查看工做书、暂存区、最新提交之间的差异。浏览器

  • 查看工做树和暂存区的差异

执行 git diff命令,查看当前工做树与暂存区的差异。 若是咱们还没有用git add命令向暂存区添加任何东西,因此程序只会显示工做树与最新提交状态之间的差异,也就不会显示任何内容。安全

DELL@DESKTOP-L7RGC6H MINGW64 ~/Desktop/新建文件夹 (5) (master)
$ git diff
DELL@DESKTOP-L7RGC6H MINGW64 ~/Desktop/新建文件夹 (5) (master)
复制代码
  • 查看工做树和最新提交的差异

要查看与最新提交的差异,请执行如下命令。bash

$ git diff HEAD
复制代码

不妨养成这样一个好习惯:在执行git commit命令以前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差异,等确认完毕后再进行提交。当前,你最好用webstrome或者其余可视化视图工具,更方便的查看。 这里的 HEAD 是指向当前分支中最新一次提交的指针。

二、分支基础操做

  1. git branch-显示分支一览表
  2. git checkout -b-建立并切换分支
  3. git merge-分支合并

合并分支时,加上--no-ff参数git merge --no-ff master_dev1,编辑器会启动,用于录入要提交的信息。

  1. git log --graph以图表的形式查看分支(webstronme有更丰富的操做)

三、更改提交操做

  1. git reset回溯历史版本

要让仓库的HEAD、暂存区、当前工做树回溯到指定状态 。只有提供目标时间的哈希值,并使用git reset --hard命令便可。

$ git reset --hard 47febf026b47194be1586a6457ed59987dbb333a
复制代码
  1. git commit --amend修改提交信息(就是git commit -m时候的写的信息)

要修改上一条提交信息,可使用git commit --amend命令。 执行命令后,编辑器会启动,修改就是了。

  1. git rebase -i -压缩历史

四、推送至远程分支

  1. git remote add-添加远程仓库

使用git remote add命令将其设置为本地仓库的远程仓库。

$ git remote add origin git@github.com:github-book/git-tutorial.git
复制代码
  1. git push推送至远程仓库

将当前分支下本地仓库中的内容推送给远程仓库,须要用到git push命令。

-u参数能够在推送的同时,将 origin 仓库的 master 分 支设置为本地仓库当前分支的 upstream(上游)。添加了这个参数,未来 运行 git pull命令从远程仓库获取内容时,本地仓库的这个分支就可 以直接从 origin 的 master 分支获取内容,省去了另外添加参数的麻烦。

  • 推送至 master 之外的分支

除了 master 分支以外,远程仓库也能够建立其余分支。

$ git checkout -b feature-D
Switched to a new branch 'feature-D'
复制代码

如今将它 push 给远程仓库并保持分支名称不变。

$ git push -u origin feature-D
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
 * [new branch] feature-D -> feature-D
Branch feature-D set up to track remote branch feature-D from origin.
复制代码
  1. git clone获取远程仓库
$ git clone git@github.com:github-book/git-tutorial.git
Cloning into 'git-tutorial'...
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 20 (delta 3), reused 20 (delta 3)
Receiving objects: 100% (20/20), done.
Resolving deltas: 100% (3/3), done.
$ cd git-tutorial
复制代码

们用 git branch -a命令查看当前分支的相关信息。

  1. 获取远程的 feature-D 分支

将 feature-D 分支获取至本地仓库。

$ git checkout -b feature-D origin/feature-D
Branch feature-D set up to track remote branch feature-D from origin.
Switched to a new branch 'feature-D'
复制代码
  1. git pull获取最新的远程仓库分支 使用 git pull 命令,将本地的 feature-D 分支更新到最新状态
$ git pull origin feature-D
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1)
Unpacking objects: 100% (3/3), done.
From github.com:github-book/git-tutorial
 * branch feature-D -> FETCH_HEAD
 First, rewinding head to replay your work on top of it...
 Fast-forwarded feature-D to ed9721e686f8c588e55ec6b8071b669f411486b8.
复制代码

若是两人同时修改了同一部分的源代码,push 时就很容易发生冲 突。因此多名开发者在同一个分支中进行做业时,为减小冲突状况的发 生,建议更频繁地进行 push 和 pull 操做。

3、Github的注意功能

一、Pull Request

Pull Request 是本身修改源代 码后,请求对方仓库采纳该修改时采起的一种行为。Pull Request 概念图以下:

二、仓库的维护

Fork 或 clone 来的仓库,一旦放置无论就会离最新的源代码愈来愈远。 一般来讲 clone 来的仓库实际上与原仓库并无任何关系。因此咱们须要将原仓库设置为远程仓库,从该仓库获取(fetch)数据与本地仓库进行合并(merge),让本地仓库的源代码保持最新状态。以下图:

  • 仓库的Fork与clone 将 octocat/Spoon-Knife 做为原仓库,在 GitHub 上进行 Fork,而后clone。
$ git clone git@github.com:hirocastest/Spoon-Knife.git
Cloning into 'Spoon-Knife'...
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 24 (delta 7), reused 17 (delta 1)
Receiving objects: 100% (24/24), 74.36 KiB | 68 KiB/s, done.
Resolving deltas: 100% (7/7), done.
$ cd Spoon-Knife
复制代码
  • 给仓库设置名称 咱们给原仓库设置 upstream 的名称,将其做为远程仓库。
$ git remote add upstream git://github.com/octocat/Spoon-Knife.git
复制代码

从此,咱们的这个仓库将以 upstream 做为原仓库的标识符。这个环境下只须要设定一次。

  • 获取最新数据(fetch到的代码,不会自动和本地代码合并)

第一步:从远程仓库实际获取(fetch)最新源代码。 第二步:与本身仓库的分支进行合并。要让仓库维持最新状态,

$ git fetch upstream
From git://github.com/octocat/Spoon-Knife
 * [new branch] master -> upstream/master
$ git merge upstream/master
Already up-to-date.
复制代码

!--注意--注意--git fetch 和git pull 的差异

  • git fetch 至关因而从远程获取最新到本地,不会自动merge,以下指令:
git fetch orgin master //将远程仓库的master分支下载到本地当前branch中
git log -p master  ..origin/master //比较本地的master分支和origin/master分支的差异
git merge origin/master //进行合并
复制代码

也能够用如下指令:

git fetch origin master:tmp //从远程仓库master分支获取最新,在本地创建tmp分支
git diff tmp //將當前分支和tmp進行對比
git merge tmp //合并tmp分支到当前分支
复制代码
  • git pull至关因而从远程获取最新版本并merge到本地

git pull origin master git pull 至关于从远程获取最新版本并merge到本地

补充

  1. fetch的时候本地的master[ID=1]没有变化,若是与远程仓关联的那个版本号master[ID=2]被更新了。咱们接下来就是在本地合并这两个版本号的代码master[ID=3],此时会有三个版本号,可查可用。
  2. git pull的会将本地的代码更新至远程仓库里面最新的代码版本。至于两个版本号,代码有丢失风险。

总结:如下借鉴文献

不要用git pull,用git fetch和git merge代替它。 git pull的问题是它把过程的细节都隐藏了起来,以致于你不用去了解git中各类类型分支的区别和使用方法。固然,多数时候这是没问题的,但一旦代码有问题,你很难找到出错的地方。看起来git pull的用法会使你吃惊,简单看一下git的使用文档应该就能说服你。 将下载(fetch)和合并(merge)放到一个命令里的另一个弊端是,你的本地工做目录在未经确认的状况下就会被远程分支更新。固然,除非你关闭全部的安全选项,不然git pull在你本地工做目录还不至于形成不可挽回的损失,但不少时候咱们宁愿作的慢一些,也不肯意返工重来。

三、接收Pull Request

点击Pull Request 查看详细内容。

点击 Merge pull request 按钮,Pull Request 的内容便会自动合并至仓库。

注意:

在采纳以前,请尽可能将接收到的 Pull Request 拿到本地开发环境中进行检查,确认是否可以正常运行以及代码是否安全。

3.一、 采纳 Pull Request 前的准备

  • 代码审查 在 GitHub 上能够对 Pull Request 的具体的某行代码进行评论。
  • 查看图片的差异
  • 在本地开发环境中反映 Pull Request 的内容

下面咱们来说解收到 Pull Request 后在本地开发环境中进行实际检查的流程。在本示例中,Pull Request 接收方的用户名为ituring,发送方的用户名为“PR 发送者”。

(1)将接收方的本地仓库更新至最新状态 首先,将 Pull Request 接收方的仓库 clone 到本地开发环境中。若是已经 clone 过,那么请进行 pull 等操做更新至最新状态。

$ git clone git@github.com:ituring/first-pr.git
Cloning into 'first-pr'...
remote: Counting objects: 34, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 34 (delta 10), reused 15 (delta 4)
Receiving objects: 100% (34/34), 89.48 KiB | 112 KiB/s, done.
Resolving deltas: 100% (10/10), done.
$ cd first-pr
复制代码

(2)获取发送方的远程仓库 将 Pull Request 发送方的仓库设置为本地仓库的远程仓库,获取发送方仓库的数据。

$ git remote add PR发送者 git@github.com:PR发送者/first-pr.git
$ git fetch PR发送者
省略
From github.com:PR发送者/first-pr
 * [new branch] gh-pages -> PR发送者/gh-pages
 * [new branch] master -> PR发送者/master
 * [new branch] work -> PR发送者/work
复制代码

注意:fetch以后,只是获取了远程仓库的数据,这些数据还没有反映在任何一个分支中。须要建立一个分支,用来显示的承载fetch到的代码

(3)先从接收者新建一个分支,和发送pull request的分支合并,测试功能。 从接收者的本地仓库中,新建一个分支后,用这个分支和fetch到发送pull reuqest的远程仓库数据合并

$ git checkout -b pr1
Switched to a new branch 'pr1'
$ git merge PR发送者/work
Updating cc62779..243f28d
Fast-forward
 index.html | 2 ++
 1 file changed, 2 insertions(+)
复制代码

(4)采纳 Pull Request

完成上述内容后,若是 Pull Request 的内容没有问题,大可打开浏览器找出相应的 Pull Request 页面,点击 Merge pull request 按钮,随后Pull Request 的内容会自动合并至仓库。 不过,因为咱们已经在本地构筑了相同的环境,只要经过 CLI 进行合并操做再 push 至 GitHub,Pull Request 中就会反映出 Pull Request 被采纳后的状态。

更新中。。。

相关文章
相关标签/搜索