Github使用教程

Git

1.下载安装

下载安装好之后。打开GitBash查看配置信息,并且配置用户信息

1
2
3
4
5
git config --list	//查看所有配置
git config --list --show-origin		//查看所有配置,以及所在文件

git config --global user.name "kong"	//配置用户名
git config --global user.email 1939667131@qq.com	//配置邮箱

2.git命令

新建一个gitdemo文件夹,并新建一个test.txt

先切换到git仓库目录,也就是切换到项目文件夹下,右键选择Git Bash Here

  • git status:查看仓库状态

    目前还不是一个git仓库,只是一个不同的文件夹

  • git init:初始化

    再查看状态,发现已经成为一个空的git仓库。并且默认进入git仓库的master分支,即主分支。返回的三条语句分别是指:

    进入git仓库的主分支

    目前还没有提交过文件(git是版本控制工具,要记录提交历史以及每一个版本)

    提示text.txt文件是Untracked files,就是说test.txt这个文件还没有被跟踪,还没有提交在git仓库里,并提示使用 git add 去操作你想要提交的文件

  • git add:往仓库里添加文件

    输入 git add test.txt, 再输入 git status 查看仓库状态:

    此时,虽然仓库没有提交历史,但是,提示以下文件 changes to be committed, 意思就是 test.txt 文件等待被提交。

    可以看到刚才 git “不承认”我们的文件,现在通过 git add 命令“承认了”,并且把它加到一个可提交的列表(临时缓冲区)。

    当然,也可以使用 git rm –cached这个命令去移除这个缓存。

  • git commit:将缓冲区里的改动提交到本地的版本库

    每次使用 git commit 命令我们都会在本地版本库中生成一个40位的哈希值,这个哈希值叫 commit-id (这个版本的编号),commit-id 在版本回退的时候非常有用的,它相当于一个索引,可以在未来的任何时候通过 git reset 的组合命令回退到这里。

    git commit 不是单独使用的,一般需要通过参数指定提交方式,我们可以输入 git commit –help 查看使用帮助(会跳转到相关网页)

    输入 git commit -m “first commit”,便成功将文件 text.txt 提交到 Git 仓库。其中,-m 代表提交信息,first commit 是本次提交的信息,需要写在双引号内,提交的信息你也可以写成 my commit ,text commit等任意句子。

    此时再查看仓库的状态,结果显示 nothing to commit,working tree clean,这表示已经没有内容可以提交了,即全部内容都已经提交完毕。

    注:为什么不把文件直接提交到仓库呢?

    因为我们可能提交一个错误的文件,先add再commit能有效的防止错误提交。当然也有方法把这两步合并,在后文会介绍。

    补充:git commit 常见的用法有下面三个

    • git commit -m “message”,-m 参数表示可以直接输入后面的 “message” ,如果不加 -m 参数,那么是不能直接输入 message的,而是会调用一个编辑器一般是 vim 来让你输入这个 message。
    • git commit -a -m “massage”,加的 -a 参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过 git add 添加到缓存区,注意,新加的文件(即没有被 git 系统管理的文件)是不能被提交到本地仓库的。建议一般不要使用 -a 参数,正常的提交还是使用 git add 先将要改动的文件添加到暂存区,再用 git commit 提交到本地版本库。
    • git commit –amend,追加提交,它可以在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中
  • git log:打印Git仓库提交日志,会显示作者、时间和提交信息。

  • git branch:查看所在分支,默认会在master分支

    多人合作的时候,一人一个模块,各自建立一个分支就能保证改动互不干扰,等完成之后,还可以把分支合并起来。

    在此基础上新建分支用 git branch a,即新建一个分支a,再次查看分支,可以看到master已经有了一个分支,此时分支a和分支master是一模一样的内容。

  • git checkout:切换分支

    输入git checkout a命令,切换到分支a上。再次查看分支,*在a前,说明此时处于分支a,可以修改分支a的内容了。

    补充:先新建分支再切换很麻烦,使用git checkout -b a,意思就是建立分支后自动切换到该分支。

  • git merge:合并分支

    当在a分支上完成了自己的部分,但是主分支还是原来那样,这是需要把你的代码合并到主分支master上来。

    注:合并分两步

    • 切换到master分支
    • 执行git merge a,即将a分支的代码合并到master分支

    补充:删除分支

    • 删除分支:加入万分之新建错误,或者a分支的代码已经顺利合并到master分支上了,那么a分支就没用了,用git branch -d 删除。删除分支a的语句为git branch -d a
    • 强制删除分支:有时上面的命令会删除失败,比如a分支的代码还没有合并到master,执行上面的命令是删除不了的,它会智能提示你a分支还有未合并的代码,但如果想要强制删除,那就执行git branch -D a就可以强制删除a分支
  • git tag:给版本打标签

    tag是标签的意思,写报告、写代码都有版本的迭代,比如1.0,1.1 。git 可以给每个版本都打上这样的标签,这样加入你想看看第一版的内容,就可以通过标签切换回去。

    git tag v1代表新建 v1 tag ,也可以换成其他名字,git tag代表查看标签。

    如果想切换至某一个标签如v1,使用git checkout v1即可,v1是某版本的标签名。

总结:

以上全是一些最基本的git操作,而且都是在本地环境进行操作的,完全没有涉及到远程仓库。

Github访问加速方法

1、windows系统的hosts文件的位置如C:\Windows\System32\drivers\etc\hosts

2、然后打开网页 https://www.ipaddress.com/ip-lookup

在输入框分别输入下面五个名称,查询它们对应的 IP 地址:

需要自己去测试,直接复制不行

1
2
3
4
5
github.com
gist.github.com
github.global.ssl.fastly.net
assets-cdn.github.com
raw.githubusercontent.com
1
2
3
4
5
IP Lookup : 140.82.114.4 (github.com)
IP Lookup : 140.82.113.4 (gist.github.com)
IP Lookup : 199.232.69.194 (github.global.ssl.fastly.net)
IP Lookup : assets-cdn.github.com  185.199.108.153
IP Lookup : raw.githubusercontent.com  185.199.111.133

3、修改hosts文件

把刚刚查到的五个IP 复制到文件最末端

1
2
3
4
5
140.82.114.4 github.com
140.82.113.4 gist.github.com
199.232.69.194 github.global.ssl.fastly.net
185.199.108.153 assets-cdn.github.com
185.199.111.133 raw.githubusercontent.com

除了这五个,还要再加上下面的 IP,它们和第五个 IP 地址是一样的:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
185.199.111.133 cloud.githubusercontent.com
185.199.111.133 camo.githubusercontent.com
185.199.111.133 avatars0.githubusercontent.com
185.199.111.133 avatars1.githubusercontent.com
185.199.111.133 avatars2.githubusercontent.com
185.199.111.133 avatars3.githubusercontent.com
185.199.111.133 avatars4.githubusercontent.com
185.199.111.133 avatars5.githubusercontent.com
185.199.111.133 avatars6.githubusercontent.com
185.199.111.133 avatars7.githubusercontent.com
185.199.111.133 avatars8.githubusercontent.com

点击保存(保存不了就右击文件,打开属性修改 hosts 的读写权限)

4、刷新 DNS

打开 cmd 输入下代码刷新 DNS:

1
ipconfig /flushdns

最后刷新自己的 GitHub,打开各个页面会快一些~

自己测试没成功。。。

Git的使用及本地与远程仓库的交互

1.SSH 配置

要想本地与远程仓库交互,必须有一个安全机制防止数据泄漏 ,这个安全机制就是 SSH,因此远程交互之前需要进行 SSH 配置。

1.1 生成 SSH key

想要生成 SSH KEY 需要先安装 SSH,不过我们之前已经安装的 GitBash 自带 SSH (我的操作系统是 Windows 10)

打开 GitBash ,输入 ssh,如果返回如下界面说明 SSH 已安装,否则得自己安装呀!

紧接着输入 ssh-keygen -t rsa (指定 rsa 算法生成密钥),接着连续三个回 车键(不需要输入密码),然后就会生成两个文件 id_rsa (密钥)和 id_rsa.pub (公钥)。

划线的地方就是密钥和公钥存储的位置,等会儿我们需要打开文件复制密钥 。

1.2 添加 SSH key

接下来要做的是把 id_rsa.pub 的内容添加到 GitHub 上,这样你本地的 id_rsa 密钥跟 GitHub 上的 id_rsa.pub 公钥进行配对,授权成功才可以提交代码。

1、打开 GitHub,点击右上角的你的头像,点击设置 settings

2、点击左侧的 SSH and GPG keys,点击右上角的 New SSH key

3、把刚刚生成的公钥 (id_rsa.pub 文件中的内容)复制到 Key 所在框, Title 不用填,复制好点击下方的 Add SSH key 按钮即可。

1.3 验证绑定

最后我们验证一下本地的 git 与 GitHub 是否绑定成功,在 GitBash 输入 ssh -T git@github.com ,如果返回下面的提示,说明绑定成功。不过有时候会很慢。。。

个人测试时报错:解决方法:

首先找到git的安装目录,找到/etc/ssh/ssh_config文件

把如下内容复制到ssh_config文件的末尾处,并记得保存

1
2
3
4
5
6
Host github.com
User git
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443

再次测试

到此为止,我们的 SSH 配置完成,接下来我们可以与远程仓库交互啦!

2. 通过 Git 下载代码

最简单的就是点击 Download ZIP,这是常规的下载操作,下载一个压缩包到指定目录。另一种方法就是使用 git clone,这种方法又分为 cloning with HTTPS 和 clone with SSH。

❓❓❓到这里你会有疑问,我能直接点击下载,为啥要学 git clone 。 git 是个版本管理工具,使用它就是为了记录提交历史,写错了能够回滚到历史文件等。 如果你下载的是你自己的文件,你直接 download,就完成不了上面的功能,你改了文件也没法在原来的基础上提交。 当然如果你只是为了下载别人的仓库看看,不需要版本控制这些功能,直接download 就行;但如果需要用到版本管理,就得学习 git clone

2.1 git clone with HTTPS

这种方法是官方推荐的,它不用 SSH 就可以完成。

我以一个仓库为例,注意上面写的是 Clone with HTTPS,复制下面的 URL:https://github.com/moxuze/DiseaseCharts.git

打开文件要 clone 的目录,右击选择 Git BashHere,打开 GitBash 窗口,输入 git clone,后面跟刚刚复制的 URL,回车,等它下载完,你会看到你的文件夹里直接就是仓库里的文件。

2.2 git clone with SSH

Clone with HTTPS那里,点击 Use SSH ,就会切换成第二种 git clone 方式。

第二种方式需要用到 SSH,没有配置是不能用的

2.3 异同

再说这两种方法的异同。

同:HTTPs 与 SSH 下的 git 都可以直接进行 git clone 操作

异:

  • HTTPs git clone 到本地,进行了一些文件的修改,当再次提交到 GitHub远程服务器的时候,都会进行账号与密码的输入
  • SSH git clone 到本地之后,由于已有 SSH Keys 授权,就不需要用户名和密码进行授权了

3. 通过 Git 提交代码

3.1 两个命令

上一节我们讲了一些基本的 git 命令,不过都只涉及本地,现在我们想本地与远程仓库交互,就需要学习两个新命令:

  • git push:翻译为推,当你的代码更新,需要把本地的推到远程仓库
  • git pull:翻译为拉,当远程仓库有更新,你需要把远程的拉到本地进行合并

可以看出这两个命令都是为了保证本地与远程的同步。

我们需要区分 git clone 和 git pull,虽然它们都是从远程仓库到本地的更新,但前者在本地无仓库时使用,后者是本地已有仓库时使用。

使用举例:

注意现在主分支叫 main 了!

1
2
git push origin main # 把本地代码推到远程 main 分支
git pull origin mian # 把远程最新的代码更新到本地

一般我们在 push 之前都会先 pull ,这样不容易冲突。

3.2 提交代码

通过 git 提交代码的前提是已有仓库,然后把仓库 clone 到本地,你修改后再pull。首先新建一个仓库。

然后我们把仓库 clone 到本地,为了不输入账号密码,我这里用 SSH 的方法 clone。

我们就知道所有的改动都需要通过 git add和git commit提交到本地的仓库。

在这个文件夹/本地仓库,右击打开 Git Bash,输入 git status查看状态,再用git add和git commit提交新加的文件。首先将自己想上传的文件拷贝过来(感觉有点麻烦,下面有。。。)

如果要 add 目录下的所有文件,用git add --all

注意 first commit 是我为这次 commit 起的名字,你可以写成其他名字。

git commit -m "first commit"

然后输入 git log 查看提交历史,可以看到一共有两次(好多次) commit,第一次是在 GitHub 上新建仓库(之前在github上的操作),第二次是刚刚在本地新提交文件。

到现在我们才完成本地更新的工作,接下来要把本地仓库 push 到远程仓库

Git Bash 输入 git push origin main 即可

默认向 GitHub 上的 bishe目录提交了代码,而这个代码是在 main分支。

然后我们刷新远程仓库,可以看到有更新:

总结:介绍了 SSH 的配置,通过 SSH 完成 git clone 和 git pull 等操作,完成本地仓库与远程仓库的交互,并记录每次的提交历史。

备注:个人毕设已上传。。https://github.com/kongfany/bishe

Git进阶

1.设置别名

上面提到的基本操作,有几个使用很频繁,每次都要输入完整的单词。

使用 alias 可以给这些操作起个简单的别名,就能简化输入。

基本语法是:

1
git config --global alias.别名 git命令

比如给 commit 和 status 起别名:

1
2
git config --global alias.ci commit
git config --global alias.st status

下次再用这两个命令就可以写:

1
2
git ci
git st

除了简单命令还可以设置组合命令,给组合命令加引号即可:

1
2
git config --global alias.pullom 'pull origin main'
git config --global alias.pushom 'push origin main'

当然别名不是固定的,你可以根据习惯设定。

起别名后,你可以看到 .gitconfig 文件里有 alias 的配置,如果不需要某个别名,删掉即可。

此外,有一个厉害的 git log 命令,可以把常规的日志按结构化显示。

1
2
git log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%d%Creset %s %Cgreen(%cr) 
%C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

你可以给它起名为 lg,以后打印结构化日志直接输入 git lg 就行:

1
2
git config --global alias.lg "git log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%d%Creset %s %Cgreen(%cr) 
%C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"

2.显示改动

还记得 git add 会把文件放入暂存区吧,修改之后,再重新提交git add 之前使用 git diff 可以显示你对某一文件的改动。

红色的部分前面有个 - 代表我删除的,绿色的部分前面有个 + 代表我增加的,所以从这里你们很一目了然的知道我到底对这个文件做了哪些改动。

除此之外,git diff 还有其他用法:

1
2
3
git diff <$id1> <$id2> # 比较两次提交之间的差异
git diff <branch1>..<branch2> # 在两个分支之间比较
git diff --staged # 比较暂存区和版本库差异

3.版本回退

在我们使用 Git 的时候,有时候会遇到想要回滚到某次提交之前的场景。

首先用 git log 查看版本号(commit 后面那一长串就是版本号):

找到想要回退的版本号之后,在本地 Git 仓库执行如下命令,选一个即可:

1
2
git reset --hard 版本号 (抛弃当前工作区的修改)
git reset --soft 版本号 (回退到之前的版本,但保留当前工作区的修改,可以重新提交)

如果你的文件只在本地,执行上面的步骤就可以啦。可以看到版本已经回退到第一次提交的时候了

如果你的文件提交到 GitHub 上,还需要执行如下命令同步到远端:

1
git push origin 分支名

若本地的版本落后于远端的版本,因此我们还需要在上述命令中加上--force参数:

1
git push origin 分支名 --force

GitHub快速提交文件夹

如果你现在已经新建了仓库(最好设成私有的),本地有个文件夹,如何快速上传文件夹至仓库。

首先进入这个文件夹,右击点击Git Bash Here。

依次输入下面的语句:

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

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

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

git remote add origin 你的远程库地址  // 把本地库与远程库关联

git branch -M main	//修改master为main

git pull –rebase origin main	//合并远程创建的README.

git push -u origin main    // 第一次推送时

git push origin main  // 第一次推送后,直接使用该命令即可推送修改

然后更新你的仓库,文件夹上传成功!