因为使用 hexo 结合 github 做博客,为了更好的利用 github,学习了廖雪峰的 Git 教程。
在此基础上,根据自己的学习情况进行精简,方便日后复习查找
# 创建版本库
| $ mkdir learngit |
| $ cd learngit |
| $ pwd |
| /Users/michael/learngit |
| $ git init |
| Initialized empty Git repository in /Users/michael/learngit/.git/ |
# 版本控制
# 提交修改
- 在
learngit
目录下编写一个 readme.txt
, 内容随意,如:
Git is a version control system.
Git is free software.
- 添加文件,使 git 可以追踪它
- 提交到仓库,
-m
后跟的是这次提交的说明
| $ git commit -m "wrote a readme file" |
| [master (root-commit) eaadf4e] wrote a readme file |
| 1 file changed, 2 insertions(+) |
| create mode 100644 readme.txt |
- 修改
readme.txt
为:
Git is a distributed version control system.
Git is free software.
- 可以使用
git status
查看状态:
| $ git status |
| On branch master |
| Changes not staged for commit: |
| (use "git add <file>..." to update what will be committed) |
| (use "git checkout -- <file>..." to discard changes in working directory) |
| |
| modified: readme.txt |
| |
| no changes added to commit (use "git add" and/or "git commit -a") |
- 使用
git diff
查看修改内容:
| $ git diff readme.txt |
| diff --git a/readme.txt b/readme.txt |
| index 46d49bf..9247db6 100644 |
| --- a/readme.txt |
| +++ b/readme.txt |
| @@ -1,2 +1,2 @@ |
| -Git is a version control system. |
| +Git is a distributed version control system. |
| Git is free software. |
- 提交修改
| $ git add readme.txt |
| $ git commit -m "add distributed" |
| [master e475afc] add distributed |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
# 版本回退
git log
查看提交记录
| $ git log |
| commit e475afc93c209a690c39c13a46716e8fa000c366 |
| Author: Michael Liao <askxuefeng@gmail.com> |
| Date: Fri May 18 21:03:36 2018 +0800 |
| |
| add distributed |
| |
| commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 |
| Author: Michael Liao <askxuefeng@gmail.com> |
| Date: Fri May 18 20:59:18 2018 +0800 |
| |
| wrote a readme file |
- Git 中
HEAD
表示当前版本,上一个版本就是 HEAD^
,依次类推,回退命令如下:
| $ git reset --hard HEAD^ |
| HEAD is now at eaadf4e wrote a readme file |
# 撤销回退
- 如果不知道回退版本的
commit id
,可用 git reflog
查看
| $ git reflog |
| eaadf4e HEAD@{1}: reset: moving to HEAD^ |
| e475afc HEAD@{3}: commit: add distributed |
| eaadf4e HEAD@{4}: commit (initial): wrote a readme file |
- 回退命令
| $ git reset --hard e475a |
| HEAD is now at 83b0afe append GPL |
e475a
对应上面的回退的版本的 commit id
前几位,git 会自动去匹配
# 工作区和暂存区
https://www.liaoxuefeng.com/wiki/896043488029600/897271968352576
# 撤销修改
- 修改后若未
git add
,查看 git status
| $ git status |
| On branch master |
| Your branch is behind 'origin/master' by 3 commits, and can be fast-forwarded. |
| (use "git pull" to update your local branch) |
| |
| Changes not staged for commit: |
| (use "git add <file>..." to update what will be committed) |
| (use "git restore <file>..." to discard changes in working directory) |
| modified: readme.md |
| |
| no changes added to commit (use "git add" and/or "git commit -a") |
提示中已说明可以通过 git restore <file>
放弃工作区的修改
- 如果已经进行过
git add
,那么需要多一步撤销暂存区的修改:
| $ git restore --staged readme.md |
| $ git restore readme.md |
# 删除文件
| $ rm test.txt |
| $ git rm test.txt |
| $ git commit -m "remove test.txt" |
| [master d46f35e] remove test.txt |
| 1 file changed, 1 deletion(-) |
| delete mode 100644 test.txt |
# 远程仓库
# 绑定 github 账号
- 鼠标右键或者菜单搜索打开
Git Bash
(鼠标右键为 Git Bash Here
在此路径打开,不影响以下操作)
设置 user.name
和 user.email
的配置信息,分别输入后回车:
| git config --global user.name "你的GitHub用户名" |
| git config --global user.email "你的GitHub注册邮箱" |
- 绑定后生成 ssh 密钥 文件:
| ssh-keygen -t rsa -C "你的GitHub注册邮箱" |
默认不需要设置密码
生成 ssh
文件后, git
会直接给出 .ssh
文件夹所在路径, WIN10 一般在 C:\Users\用户名\.ssh
打开 .ssh
文件夹找到 id_rsa.pub
,复制里面的全部内容
新建 ssh key
打开 GitHub
,点击右上角个人头像 --> Setting
--> SSH and GPG keys
--> New SSH key
title
任意填写,将你复制的内容粘贴至 Key
中,点击 add SSH Key
在 Git Bash
中输入 ssh git@github.com
检测公钥设置是否成功
如若出现 Hi 你的用户名!You've successfully authenticated…… 的说明即为成功
# 添加远程仓库
登陆 GitHub
,通过 Create a new repo
创建一个新仓库 learngit
在本地的 learngit
仓库下运行命令:
注意修改命令中的 your_github_account
为自己的 github账户
| $ git remote add origin git@github.com:your_github_account/learngit.git |
远程库的名字就是 origin
,这是 Git 默认的叫法,也可以改成别的
- 推送本地内容
| $ git push -u origin master |
| Counting objects: 20, done. |
| Delta compression using up to 4 threads. |
| Compressing objects: 100% (15/15), done. |
| Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done. |
| Total 20 (delta 5), reused 0 (delta 0) |
| remote: Resolving deltas: 100% (5/5), done. |
| To github.com:michaelliao/learngit.git |
| * [new branch] master -> master |
| Branch 'master' set up to track remote branch 'master' from 'origin'. |
由于远程库是空的,我们第一次推送 master
分支时,加上了 -u
参数,Git 不但会把本地的 master
分支内容推送的远程新的 master
分支,还会把本地的 master
分支和远程的 master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
# 删除远程仓库
解除本地仓库与远程仓库的关联
| $ git remote remove |
| usage: git remote remove <name> |
# 查看远程仓库
| $ git remote show origin |
| * remote origin |
| Fetch URL: git@github.com:moehz/learngit.git |
| Push URL: git@github.com:moehz/learngit.git |
| HEAD branch: master |
| Remote branch: |
| master tracked |
| Local branch configured for 'git pull': |
| master merges with remote master |
| Local ref configured for 'git push': |
| master pushes to master (up to date) |
# 从远程库克隆
先新建一个仓库 gitskills
, 新建时勾选 勾选Initialize this repository with a README
,这样 GitHub 会自动为我们创建一个 README.md
文件。
克隆远程仓库
注意修改命令中的 your_github_account
为自己的 github账户
| $ git clone git@github.com:your_github_account/gitskills.git |
| Cloning into 'gitskills'... |
| remote: Counting objects: 3, done. |
| remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3 |
| Receiving objects: 100% (3/3), done. |
# 分支管理
不做赘述,参考
https://www.liaoxuefeng.com/wiki/896043488029600/896954848507552
# 标签管理
不做赘述,参考
https://www.liaoxuefeng.com/wiki/896043488029600/900788941487552