• github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开。

  • github由Chris Wanstrath, PJ Hyett 与Tom Preston-Werner三位开发者在2008年4月创办。迄今拥有59名全职员工,主要提供基于git的版本托管服务。

1、注册账号和创建仓库

  1. 要想使用github第一步当然是注册github账号了, github官网地址:https://github.com/。 之后就可以创建仓库了(免费用户只能建公共仓库),点击右上角头像,再点击 Your profile,进入Repository,点击New,之后会出现一些仓库的配置信息:

  2. 之后会进入配置界面,依次填写仓库的基本信息,然后点击Creat Repository,正式创建一个代码仓库:

  3. 配置完成之后,会进入到仓库里面,让我们一探究竟吧:

基本创建工作完成,后面就是用ssh链接到我们的仓库啦,这时我们就会用到 git-bash 这个工具啦,继续往下看。

2、git

下载安装 Git

配置 Git

  1. 首先在本地创建 ssh key ,运行命令:

    1
    2
    # 这里填写你的邮箱地址
    $ ssh-keygen -t rsa -C "your_email@youremail.com"
  2. 后面的your_email@youremail.com改为你在github上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。

  3. 回到github上,进入 Settings(账户配置),左边选择SSH and GPG keys,点击New SSH Key,title随便填,粘贴在你电脑上生成的key。

  4. 为了验证是否成功,在git bash下输入:

    1
    $ ssh -T git@github.com

    如果是第一次的会提示是否continue,输入yes就会看到:You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。

  5. 接下来我们要做的就是把本地仓库传到github上去,在此之前还需要设置username和email,因为github每次commit都会记录他们:

    1
    2
    $ git config --global user.name "your name"
    $ git config --global user.email "your_email@youremail.com"
  6. 进入要上传的仓库,右键git bash here,添加远程地址:

    1
    2
    # git remote add origin git@github.com:yushengyuan1993/test.git
    $ git remote add origin git@github.com:yourName/yourRepo.git

    后面的yourName和yourRepo表示你再github的用户名和刚才新建的仓库,加完之后进入.git,打开config,这里会多出一个remote “origin”内容,这就是刚才添加的远程地址,也可以直接修改config来配置远程地址。

  7. 创建新文件夹,打开,然后执行 git init 以创建新的 git 仓库。

3、克隆仓库

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

    1
    $ git clone /path/to/repository
  • 如果是远程服务器上的仓库,你的命令会是这个样子:

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

4、Git命令

你的本地仓库由 git 维护的三棵”树”组成。第一个是你的 工作目录,它持有实际文件;第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动;最后是 HEAD,它指向你最后一次提交的结果。

  1. 工作流:

    • 你可以提出更改(把它们添加到暂存区),使用如下命令:
      1
      2
      $ git add <filename>
      git add *
    • 这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:
      1
      $ git commit -m "代码提交信息"
      现在,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。
  2. 推送改动:

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

      1
      2
      3
      # 推送改动到 master 分支,实际开发中很少会直接推送到master上,
      # 一般都是推到开发分支,再由leader推到master
      $ git push origin master

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

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

      1
      $ git remote add origin <server>

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

  3. 分支:

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

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

      1
      $ git checkout -b feature_x
    • 切换回主分支:
      1
      $ git checkout master
    • 再把新建的分支删掉:
      1
      $ git branch -d feature_x
    • 除非你将分支推送到远端仓库,不然该分支就是不为他人所见的:
      1
      $ git push origin <branch>
  4. 更新与合并:

    • 要更新你的本地仓库至最新改动,执行:
      1
      $ git pull
    • 以在你的工作目录中 获取(fetch)合并(merge) 远端的改动。
    • 要合并其他分支到你的当前分支(例如 master),执行:
      1
      $ git merge <branch>
    • 在这两种情况下,git 都会尝试去自动合并改动。遗憾的是,这可能并非每次都成功,并可能出现冲突(conflicts)。 这时候就需要你修改这些文件来手动合并这些冲突(conflicts)。改完之后,你需要执行如下命令以将它们标记为合并成功:
      1
      $ git add <filename>
    • 在合并改动之前,你可以使用如下命令预览差异:
      1
      $ git diff <source_branch> <target_branch>
  5. 标签:

    • 为软件发布创建标签是推荐的。这个概念早已存在,在 SVN 中也有。你可以执行如下命令创建一个叫做 1.0.0 的标签:
      1
      $ git tag 1.0.0 1b2e1d63ff
    • 1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。可以使用下列命令获取提交 ID
      1
      $ git log
    • 你也可以使用少一点的提交 ID 前几位,只要它的指向具有唯一性。
  6. 替换本地改动:

    • 假如你操作失误(当然,这最好永远不要发生),你可以使用如下命令替换掉本地改动:
      1
      $ git checkout -- <filename>
    • 此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。
    • 假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它:
      1
      2
      $ git fetch origin
      $ git reset --hard origin/master
  7. 实用小贴士:

    • 内建的图形化 git
      1
      $ gitk
    • 彩色的 git 输出:
      1
      $ git config color.ui true
    • 显示历史记录时,每个提交的信息只显示一行:
      1
      $ git config format.pretty oneline
    • 交互式添加文件到暂存区:
      1
      $ git add -i
    • 设置 git 命令别名:
      1
      2
      3
      4
      5
      $ git config --global alias.st status     # 把status 别名设置为 st
      $ git config --global alias.cm commit # 把commit 别名设置为 cm
      $ git config --global alias.br branch # 把branch 别名设置为 br
      $ git config --global alias.co checkout # 把checkout 别名设置为 co
      $ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" # 设置结构化的git log tree
    • git show 命令:
      1
      2
      3
      $ git show commitId           # 查看这次提交具体修改的内容
      $ git show stashId # 查看stash的一些基本信息
      $ git show commitId fileName # 查看某一个文件在某一次提交中的修改
    • git stash 命令:

      1
      2
      3
      4
      5
      6
      $ git stash                   # 隐藏当前正在进行的工作
      $ git stash list # 列出所有stash
      $ git stash apply stashId # 拉取某次的stash
      $ git stash drop stashId # 移除某个stash
      $ git stash pop # 抽取上一次的stash到工作空间
      $ git stash clear # 清除所有的stash
    • 把本地代码推送到远程仓库:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      # 1、初始化版本库
      $ git init

      # 添加文件到版本库(只是添加到缓存区),.代表添加文件夹下所有文件
      $ git add .

      # 把添加的文件提交到版本库,并填写提交备注
      $ git commit -m "first commit"

      # 2、到目前为止,我们完成了代码库的初始化,但代码是在本地,还没有提交到远程服务器,所以关键的来了,
      # 要提交到就远程代码服务器,进行以下两步:
      $ git remote add origin `remote repository` # 把本地库与远程库关联

      $ git push -u origin master # 第一次推送时

      $ git push origin master # 第一次推送后,直接使用该命令即可推送修改
  8. 把 main 修改为 master

    1
    2
    3
    4
    5
    6
    7
    8
    9
    The default branch has been renamed!
    main is now named master

    If you have a local clone, you can update it by running:

    git branch -m main master
    git fetch origin
    git branch -u origin/master master
    git remote set-head origin -a

参考文档 git-scm