玩转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 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公钥文件的内容复制进去
- 创建一个SSH Key。到主目录下(本机为 C:\Users\ZJ-luoke)查看有无
.ssh
目录,若有,直接跳到下一步。若无,则打开Git Bash,执行命令ssh-keyGen -t rsa -C "youremail@example.com"
去生成SSH Key。注意上面的邮箱要填自己的。然后一路回车,操作结束之后,就会出现.ssh
目录。 - 如果没有操作错误,
.ssh
目录会有两个文件如下:
网络异常,图片无法展示|
这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,而id_rsa.pub
就是公钥。 - 登录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