Skip to content

github

github 是目前最流行的开源代码托管平台之一,本文将介绍如何使用github。

HTTPS连接

过去,HTTPS 连接要求你输入用户名和密码,但是这种方式由于不安全已经被 github 废弃。现在,要想通过 HTTPS 连接,你必须使用另外一种叫Git Credential Manager的方式。具体操作请查看官网文档。

SSH连接

SSH 连接默认采用 22 端口,但是有时候防火墙会阻止这种行为。如果遇到这种情况,你可以采用上面的 HTTPS 连接。如果 HTTPS 连接也不行,你可以尝试采用 HTTPS 端口的 SSH 连接。

要测试通过 HTTPS 端口的 SSH 连接是否可行,输入以下命令:

ssh -T -p 443 git@ssh.github.com

> Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
如果输出以上内容,则说明连接可行。你可以更改~/.ssh/config文件,强制与 github 的连接都通过 SSH 的 443 端口。

Host github.com
Hostname ssh.github.com
Port 443
User git

更改配置后,再次测试 SSH 连接是否可行:

ssh -T git@github.com

> Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

注意:SSH 通过公钥和私钥配对的方式来验证连接是否安全,当你第一次通过 SSH 连接时,会询问你是否信任该服务器,输入yes即可。github 的 SSH 公钥存放在Github's SSH key fingerprints。你可以添加到~/.ssh/known_hosts来避免验证。

添加SSH密钥

添加 SSH 密钥的过程很简单,按照步骤一步步来即可。

1.首先输入以下命令,将邮件地址改为你注册 github 的邮箱:

ssh-keygen -t ed25519 -C "your_email@example.com"

系统会要求你输入一些信息,连续按回车跳过即可。

2.将 SSH 密钥添加到 ssh-agent:

先启动 ssh 代理:

eval "$(ssh-agent -s)"

然后添加私钥:

ssh-add ~/.ssh/id_ed25519

3.向你的账户添加新的 SSH 密钥

现在,.ssh/目录下有两个文件,以 pub 结尾的就是公钥,需要你上传至 github 服务器。

cat ~/.ssh/id_ed25519.pub

复制打印的内容,然后在 github 个人资料面点击设置,找到SSH and GPG keys,点击New SSH key,最后粘贴复制的公钥即可。

网络配置

github 支持流量代理:

git config --global http.proxy http://127.0.0.1:[端口号]

git config --global https.proxy http://127.0.0.1:[端口号]

这两行命令的意思是让 http 和 https 协议的流量全部走你梯子的代理,端口号根据梯子的配置自行输入。配置完以后git clone应该不会卡了。如果你要取消全局代理,输入以下命令:

git config --global --unset http.proxy

git config --global --unset https.proxy

管理远程仓库

要添加一个远程仓库链接,使用git remote add 命令,该命令需要两个参数:

  • 远程仓库名,比如origin
  • 远程仓库地址,比如https://github.com/OWNER/REPOSITORY.git
git remote add origin https://github.com/OWNER/REPOSITORY.git

在添加完远程仓库后,可以使用git remote -v命令可以查看你当前添加的远程仓库:

git remote -v
# Verify new remote
> origin  https://github.com/OWNER/REPOSITORY.git (fetch)
> origin  https://github.com/OWNER/REPOSITORY.git (push)

如果要更改连接远程仓库的方式,比如从 HTTPS 改为 SSH,则可以使用git remote set-url命令:

git remote set-url origin git@github.com:OWNER/REPOSITORY.git

这时远程仓库的格式应该是:

origin  git@github.com:OWNER/REPOSITORY.git (fetch)
origin  git@github.com:OWNER/REPOSITORY.git (push)

git基本概念

git流程图

分支管理

显示所有分支:

git branch -a

新建并切换分支:

git checkout -b [新分支名]

删除分支:

git branch -d [分支名]

合并其他分支的代码到当前分支,你需要手动解决冲突:

git merge [另一个分支名]

将某个分支的提交应用到当前分支,你需要手动解决冲突:

git cherry-pick [提交号]
  • Master:禁止任何未被 review 和测试过的代码部署到该分支,Master 分支用来发布正式版本
  • Develop:开发分支,持续集成的工作存放于此,review 过的代码可以合入这里
  • Feature:新功能开发分支,从 develop 分支上拉取,完成后合并回 develop 分支
  • Hotfix:紧急修复分支,从 Master 分支上拉取,完成后合并回 Master 和 develop 分支
  • Release:预发布分支,比如 0.1、0.2 版本
  • Bugfix:修复 Bug 分支,从 develop 分支上拉取,完成后合并回 develop 分支

回退操作

回退

清空工作区的数据:

# 丢弃所有未暂存的更改
git checkout .

# 丢弃单个文件未暂存的更改
git checkout [file]

将暂存区回退到工作区(Untracked):

git resotre -S [file]

从本地仓库回退:

  1. git rest --soft:回退到暂存区

    • 影响范围:仅影响 HEAD 的位置
    • 效果:不更改工作区和暂存区的内容,仅移动 HEAD 指针
    • 适用场景:适合于需要修改最近提交的一些改动,但不想丢失当前工作区和暂存区的变更
  2. git reset --mixed:回退到工作区

    • 影响范围:影响 HEAD 的位置和暂存区
    • 效果:不更改工作区内容,移动 HEAD 指针到指定提交,然后将这个提交之后的修改放入暂存区
    • 适用场景:适合于需要回退到之前的提交,选择下一次提交中的更改
  3. git reset --hard:完全撤销提交和相关更改,就像从未提交过一样

    • 影响范围:影响 HEAD 的位置、暂存区和工作区
    • 效果:将 HEAD 回退到指定提交,重置暂存区和工作区,丢弃所有未提交的更改
    • 适用场景:完全撤销某个提交,且不关心之前的修改内容

撤销之前某个版本,但保留该版本后面的版本:

git revert -n [版本号]  //-n表示手动解决冲突

比较差异

git diff命令用于显示提交之间的差异,下面是一些常见的用法。

查看未暂存的更改:

git diff

查看已暂存但未提交的更改:

git diff --stage

查看工作区和暂存区的差异:

git diff HEAD

查看工作区和某个提交之间的差异:

git diff [版本号]

查看暂存区和某个提交之间的差异:

git diff [版本号] --staged

比较两个提交:

git diff <commit1> <commit2>

比较两个分支:

git diff <branch1> <branch2>

显示每个文件更改的概要信息:

git diff --stat

暂存改动

git stash命令允许"临时存放"工作区和暂存区中的所有改动,这样就可以干净地切换到另一个分支去处理其他任务,而不用担心丢失当前的进度。使用该命令后 git 会做以下几件事:

  1. 保存修改至一个称为"stash"的栈中
  2. 清理当前工作目录,恢复到最近一次提交的状态,清除所有未提交的更改

下面是一些常见的用法:

暂存当前改动并添加一则信息:

git stash save "message"

显示所有暂存的改动:

git stash list

应用最近的暂存:

git stash apply

应用最近的暂存并删除:

git stash pop

清除所有暂存:

git stash clear

注意:git stash命令默认不会暂存 untracked 文件。