整理总结自《GitHub入门与实践》——(日)大塚弘记,支鹏浩.刘斌 译
Git部分
基本配置
- 设置使用Git时的姓名与邮箱地址
$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "[email protected]"
- 提高命令输出可读性
$ git config --global color.ui auto
本地仓库使用
基本操作
- 创建准备作为本地仓库的目录,进入后进行git init初始化
$ mkdir git-tutorial
$ cd git-tutorial
$ git init
# 下为示例显示内容
Initialized empty Git repository in /Users/hirocaster/github/github-book/git-tutorial/.git/
其中.git目录存储着管理当前目录内容所需仓库数据。在Git中我们称当前目录(如/git-tutorial)为“附属于该仓库的工作树”。文件编辑等操作在工作树中进行,然后记录到仓库中,以此管理文件的历史快照。若想将文件恢复到原先状态,可以从仓库中调取之前快照,在工作树中打开。
- 使用git status 命令查看仓库当前状态
$ git status
- 使用git add 命令向暂存区中添加文件(如创建test.txt文件作为测试)
$ git add test.txt
# 添加目录下全部文件
$ git add .
4.使用git commit 命令保存仓库历史记录
$ git commit -m "create test.txt"
-m 后参数内容为此次提交说明(概述)。若直接使用git commit命令而无-m及之后参数,编辑器会自动开启,可按如下格式记录详细提交信息:
- 第一行:用一行文字简述提交的更改内容
- 第二行:空行
- 第三行及以后:记述更改的原因和详细内容
- 井号开头的行代表注释内容
此时想终止提交可留空提交信息并直接关闭编辑器。
- 可使用如下方式合并add与commit
$ git commit -am "合并提交"
- 使用git log 命令查看提交日志
$ git log
# 只显示提交信息第一行
$ git log --pretty=short
# 只显示指定目录、文件的日志
$ git log test.txt
# 显示文件改动(查看文件提交日志及提交前后差别)
$ git log -p test.txt
- 查看工作树和暂存区的差别
$ git diff
- 查看工作树和最新提交的差别
$ git diff HEAD
分支操作
9.创建、切换分支
$ git branch feature-A
$ git checkout feature-A
# 上述两条命令合并
$ git checkout -b feature-A
- 显示分支一览表
$ git branch
# 下为示例显示内容
* feature-A
master
- 切换回上一分支
$ git checkout -
- 合并分支(假设feature-A与master合并)
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff feature-A
随后编辑器启动,用于录入合并提交的信息。
- 以图表形式查看分支
$ git log --graph
- 历史版本回溯
$ git reset --hard 目标时间点哈希值(git log可查看)
- 查看当前仓库执行过的操作日志
$ git reflog
- 消除冲突
合并时出现冲突的文件内容可能如下所示:
# test.txt
<<<<<<< HEAD
- feature-A
=======
- feature-B
>>>>>>> feature-B
我们手动在编辑器中将其改成想要的样子,保存退出执行相应add与commit即可:
# test.txt
- feature-A
- feature-B
GitHub部分
基本配置
- 本地设置SSH Key
$ ssh-keygen -t rsa -C "[email protected]"
# 下为显示内容
Generating public/private rsa key pair.
Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa):#此处键入回车
Enter passphrase (empty for no passphrase):#此处键入密码(直接回车设置为无密码)
Enter same passphrase again:#此处再次输入上步所设密码
Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa.
Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub.
The key fingerprint is:
fingerprint值 [email protected]
# 下为示例显示内容
The key's randomart image is:
+--[ RSA 2048 ]----+
| .+ + |
| = o O . |
#下略
此时/Users/your_user_directory/.ssh目录下会生成id_rsa、id_rsa.pub两个文件,其中id_rsa是私钥(谨慎妥善保存),id_rsa.pub为公钥。在SSH连接后,根据配置还可能生成known_hosts文件,文件内容为访问过的远程服务端公钥(这里只能假定第一次访问的远程服务端是正确且安全的),当下次访问相同服务端时,SSH会核对公钥,若公钥不同,SSH会发出警告, 避免受到中间人攻击等。
- 向GitHub添加公开密钥
在GitHub账户设定(Account Settings)中选择SSH Keys菜单,点击Add SSH Key,在Title栏中添加密钥名称,Key栏中填入上步骤中生成的本地id_rsa.pub文件内容,可使用如下命令快捷查看:
$ cat ~/.ssh/id_rsa.pub
ssh-rsa 公开密钥的内容 [email protected]
成功添加后创建账号邮箱会收到一封“公共密钥添加完成”的邮件。
- 本地与GitHub进行认证和通信
$ ssh -T [email protected]
# 下为显示内容
The authenticity of host 'github.com(207.97.227.239)' can't be established.
RSA key fingerprint is fingerprint值.
Are you sure you want to continue connecting (yes/no)? #输入yes
# 出现如下结果即为成功
Hi 你的用户名 ! You've successfully authenticated, but GitHub dose not provide shell access.
远程仓库使用
基本远程操作
- 使用GitHub页面工具栏中New repository创建新仓库
- Repository name:仓库名。
- Description:仓库说明(非必填)。
- Public、Private选择:是否公开仓库,Private可设置访问权限。
- Initialize this repository with a README:自动初始化仓库并设置README文件,使用户可以立刻clone仓库。若想向GitHub添加手中已有Git仓库,不要勾选,直接手动push。
- Add .gitignore:可通过下拉菜单选取自动生成的.gitignore文件内容,该文件记录了不需要加入Git仓库进行版本管理的文件格式(包含主要语言及框架),不作选择即无。
- Add a license:添加许可协议文件,可参考主流开源许可证辨析。
GitHub仓库创建成功后,URL格式一般如下:https://github.com/user_name/repo_name,README.md文件内容会自动显示于仓库首页,一般内容包括但不限于软件概要、使用流程、许可协议等信息。另,GitHub Flavored Markdown(GFM)是GitHub在Markdown语法基础上扩充的一种语法,可广泛用于诸如README.md、Issue、WiKi、评论等GitHub功能区内容的书写表达。
- clone已有仓库(SSH与HTTPS链接皆可,根据不同按需使用)
$ git clone [email protected]:hirocastest/Hello-World.git
# 下为示例显示内容
Cloning into 'Hello-World'...
remote:Counting objects:3,done.
remote:Total 3 (delta 0),reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
- 进入clone的本地仓库,进行更改与一系列本地git操作后进行push
$ git push
# 下为示例显示内容
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 328bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:hirocastest/Hello-World.git
46ff713..d23b909 master -> master
分支远程操作
- 添加远程仓库
$ git remote add origin [email protected]:hirocastest/git-tutorial.git
- 推送至远程仓库相应分支
$ git push -u origin master(或其他目标分支名)
- 查看所有分支(包括远程分支)
$ git branch -a
# 下为示例显示内容
* master
remotes/origin/HEAD -> origin/master
remotes/origin/feature-D
remotes/origin/master
- 获取远程分支
$ git checkout -b feature-D origin/feature-D
- 获取最新远程仓库分支
$ git pull origin feature-D