参考书籍:《GitHub入门与实践》
第一章:欢迎来到GitHub的世界
1. GitHub与Git的区别
在Git中,开发者将源代码存入名叫“Git仓库”的资料库中并加以使用。
GitHub则是在网络上提供Git仓库的一项服务。
2. Pull Request
开发者在本地对源代码进行更改后,向GitHub中托管的Git仓库请求合并的功能。开发者可以在Pull Request上通过评论交流。
第二章:Git的导入
1. 初始设置
- 设置姓名和邮箱地址
git config --global user.name "Firstname Lastname"
git config --global user.email "your_email@example.com"
这个命令,会在“~/.gitconfig”中以如下形式输出设置文件。
[user]
name = Firstname Lastname
email = your_email@example.com
想更改这些信息时,可以直接编辑该设置文件。
- 提高命令输出的可读性
将color.ui设置为auto可以让命令的输出拥有更高的可读性。
git config --global color.ui auto
“~/.gitconfig”中会增加下面一行。
[color]
ui = auto
第三章:使用GitHub的前期准备
1. 使用前的准备
- 创建账户:创建GitHub账户
- 设置SSH Key:创建公开密钥认证所需的SSH Key,并将其添加至GitHub。
ssh-keygen -t rsa -C "your_email@example.com"
设置密码后,会生成id_rsa和id_rsa.pub两个文件,分别是私有密钥和公开密钥。
- 添加公开密钥:在GitHub中添加公开密钥,今后就可以用私有密钥进行认证了。
点击账户设定按钮(Account Settings),选择SSH Keys菜单。点击Add SSH Key之后,出现添加SSH Key的输入框。在Title中输入适当的密钥名称。Key部分输入id_rsa.pub文件里的内容。 - 测试:与GitHub进行认证和通信
ssh -T git@github.com
出现如下结果即为成功。
Hi hirocastest! You've successfully authenticated, but GitHub does not provide shell access.
2. 实际动手使用
- 创建仓库:创建一个公开的仓库。
点击New repository图标,创建新的仓库。
- Repository name:仓库的名称。
- Description:仓库的说明。
- Public vs Private:设置访问权限,公开仓库或者非公开仓库。
- Initialize this repository with a README:自动初始化仓库并设置README文件,使用户可以立刻clone该仓库。如果想向GitHub添加手中已有的Git仓库,建议不要勾选,直接手动push。
- Add .gitignore:初始化时自动生成.gitignore文件。该设定会帮助把不需要在Git仓库中进行版本管理的文件记录在.gitignore文件中。
- Add a license:添加许可协议文件。
- 连接仓库:下述URL便是创建的仓库的页面
https://github.com/username/repositoryname
- 公开代码:在已有仓库中添加代码并加以公开。
- clone已有仓库
git clone git@github.com:hirocastest/repositoryname.git
此处会要求输入密码,认证成功后,仓库便会clone至仓库名后的目录中。- 编写代码
git status
当新编写的代码没有添加至Git仓库时,该文件状态会显示为Untracked files。- 提交:将新代码提交至仓库
git add newCode.xxx
git commit -m "Add new code by xxxProgramLanguage"
通过“git add”命令将文件加入暂存区,再通过命令“git commit”提交。
git log
添加成功后,通过“git log”命令查看提交日志。- 进行push:执行push后,GitHub上的仓库就会被更新。
git push
这样一来代码就在GitHub上公开了。
第四章:通过实际操作学习Git
1. 基本操作
- git init——初始化仓库
Git是使用“git init”命令进行初始化。
mkdir git-tutorial
cd git-tutorial
git init
创建一个目录并初始化仓库。初始化成功后,在当前目录下就会生成.git目录。这个.git目录里存储着仓库数据——用于管理当前目录内容,该目录的内容被称为“附属于该仓库的工作树”。
- git status——查看仓库的状态
touch README.md
git status
新建README.md文件,并查看其状态。工作树和仓库在被操作的过程中,状态会不断发生变化。
- git add——向暂存区中添加文件
git add README.md
git status
要想让文件成为Git仓库的管理对象,需要用“git add”命令将其加入暂存区。
- git commit——保存仓库中的历史记录
git commit -m "First commit"
git status
“git commit”命令将当前暂存区中的文件实际保存到仓库的历史记录中。
“-m”参数后的信息称作提交信息,是对该提交的概述。
- git log——查看提交日志
git log
“git log”命令可以查看以往仓库中提交的日志。
git log --pretty=short
:只显示提交信息的第一行
git log README.md
:只显示指定目录、文件的日志
git log -p
:显示文件的改动
git log -p README.md
:显示指定文件的提交日志及提交前后的差别
- git diff——查看工作树、暂存区、最新提交之间的差别
git diff
:查看工作树与暂存区的差别
git diff HEAD
: 查看工作树和最新提交的差别
好习惯:在执行“git commit”之前先执行“git diff HEAD”命令
2. 分支的操作
master分支是Git默认创建的分支。
- git branch——显示分支一览表
git branch
“git branch”命令可以显示分支列表,同时确认当前所在分支(标有“*”)。
- git checkout -b——创建、切换分支
git checkout -b feature-A
或
git branch feature-A
git checkout feature-A
创建feature-A分支,并将当前分支切换到feature-A分支。
- git merge——合并分支
git checkout master
git merge --no-ff feature-A
切换到master分支,然后合并feature-A分支。
“--no-ff”参数会打开编辑器,用于录入合并提交的信息。
- git log --graph——以图表形式查看分支
3. 更改提交的操作
- git reset——回溯历史版本
git reset --hard PastHashValue
git reset --hard”命令可以让仓库的HEAD、暂存区、当前工作树回溯到指定状态,只要提供目标时间点的哈希值。
git checkout -b fix-B
XXXXX #修改README.md文件(README.md文件内容也恢复了状态)
git add README.md
git commit -m "Fix B"
创建fix-B分支,对README.md文件进行修改,并提交。
git reflog
git checkout master
git reset --hard CurHashValue
“git log”命令只能查看以当前状态为终点的历史日志,所以这里使用“git reflog”命令,查看当前仓库的操作日志。
在日志中找出回溯历史之前的哈希值,通过“git reset --hard”命令恢复到回溯历史前的状态。
- 消除冲突
git megre --no-ff fix-B
合并fix-B分支,但是系统提示README.md文件发生冲突。
git add README.md
git commit -m "Fix conflict"
修正README.md文件,执行“git add”命令和“git commit”命令。
- git commit --amend——修改上一条提交信息
- git rebase -i——压缩历史
4. 推送至远程仓库
先在GitHub上创建一个仓库,仓库名与本地仓库保持一致,创建时不要勾选Initialize this repository with a README选项。
- git remote add——添加远程仓库
git remote add origin git@github.com:用户名/git-tutorial.git
“git remote add”命令将GitHub上创建的仓库设置为本地仓库的远程仓库。Git会自动将“git@github.com:用户名/git-tutorial.git`”远程仓库的名称设置为origin。
- git push——推送至远程仓库
git push -u origin master
假定现在在master分支下进行操作,“git push”命令,将当前分支的内容推送给远程仓库origin的master分支。
“-u”参数在推送的同时,将origin仓库的master分支设置为本地仓库当前分支的upstream(上游)。
git checkout -b feature-D
git push -u origin feature-D
在本地仓库中创建feature-D分支,并将其以同名形式push至远程仓库。
5. 从远程仓库获取
- git clone——获取远程仓库
git clone git@github.com:用户名/anotherDir/xxx.git
执行“git clone”命令后默认处于master分支下,同时系统会自动将origin设置成该远程仓库的标识符。
git branch -a
查看当前分支的相关信息。
“-a”参数同时显示本地仓库和远程仓库的分支信息。
git checkout -b feature-D origin/feature-D
将feature-D分支获取至本地仓库。
“-b”参数后面是本地仓库中新建分支的名称。新建分支名称后面是获取来源的分支名称。
- git pull——获取最新的远程仓库分支
git pull origin feature-D
当前分支为feature-D分支,将本地的feature-D分支更新到最新的状态。