今天回忆了一下, 我上次用Git还是好几个月前搭建我的个人博客, 部署在GitHub上面的时候
唉, 这惨不忍睹的数据

于是, 我决定重新捡起来, 写一篇博客记录一下这个学习的过程
对于windows 用户, 我要推荐一款神器,让你无需配置就能使用一个真正干净的Linux终端!
当当当, 神器登场, 他就是 Cmder.

虽然比不上oh-my-zsh (用过的都知道有多逆天), 但是比win自带的cmd好用多了, 而且, 它自带了git-for-windows, 所以, 你不用再去安装Git啦, 闲话就扯到这里, 下面正式开始Git教程

注意, $cmder$ 所在得文件夹中不能含有空格, 不要问我为什么知道的
参考文献 廖雪峰的Git教程
1. 版本库
版本库, 一个仓库, 创建并初始化之后Git就可以管理和跟踪这个仓库内的文件的创建, 修改与删除.
1.1 创建一个空目录
mkdir learngit
1.2 将这个空目录初始化为Git可以管理的仓库
cd learngit
git init

如果要真正使用版本控制系统,就要以纯文本方式编写文件。因为它只能跟踪文本文件的改动!
1.3 添加一个文件到仓库
git add <filename> //添加文件
git commit -m "message" //提交文件
2. git status命令
git status命令让我们掌握仓库当前的状态, 比如有什么文件被修改了, 新增了什么文件
3. git diff命令
如果我们想要具体看看修改了什么内容, 那么我们可以使用git diff命令
4. git log命令
查看提交历史, 显示从最近到最远的提交日志, 你会看到commit ID(版本号), 是一个很大的数字, 用于防止冲突
5. 如何回退版本? git reset命令
在Git中, 用HEAD表示当前版本, 上一个版本就是HEAD^, 上上个就是HEAD^^ 上一百个版本写作
HEAD~100.
git reset --hard <版本号>
git reset --hard HEAD^ //回退到上个版本
也可以直接指定commit id, 指定前几位让git可以区分就行
6. git reflog命令
用来查看命令历史, 会输出你之前执行过的每一次的命令
7. 放弃工作区的修改 git checkout -- file命令
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
8. 撤销暂存区的修改 git reset HEAD <file>
用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区
9. 删除与恢复操作
- 确实要从版本库中删除该文件,那就用命令
git rm删掉,并且git commit
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
- 如果是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本
git checkout -- test.txt
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
10. 关联远程仓库
可以将本地的仓库与远程的空仓库关联起来, 也可以将远程的仓库克隆到本地
注: 第一次push时要加上 -u 参数
11. 分支管理
11.1 创建并切换分支: git switch -c name
git switch -c name
相当于 :
git branch name
git switch name
其实也有一种用`checkout`的用法, 不推荐, 因为`checkout`还用于撤销操作, 容易搞混
11.2 查看当前分支: git branch命令
git branch命令会列出所有的分支, 当前分支前面会有一个 *号
11.3 整合分支: git merge name命令
git merge 命令用于合并指定分支到当前分支。
11.4 删除分支: git branch -d name命令
合并完成后, 就可以放心的删除那个分支了
11.5 查看分支合并情况 git log --graph --pretty=oneline --abbrev-commit命令

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
12. 储藏现场 'git stash'命令
将当前分支的工作区的内容储藏起来, 让工作区看上去是干净的.
工作现场存到哪去了?用git stash list命令看
如何恢复工作现场?
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
13. 查看远程库的信息 git remote -v
14. 从本地推送分支 git push origin branch-name
15. 从远程抓取分支 git pull
如果有冲突, 要先解决冲突
16. 标签
16.1 创建标签 git tag <name>
命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id
16.2 查看标签 git tag
16.3 删除一个本地标签 git tag -d <tagname> 删除一个远程标签 git push origin :refs/tags/<tagname>
16.4 推送标签
16.4.1 推送某个标签 git push origin <tagname>
16.4.2 一次性推送全部标签 git push origin --tags
17. 关于github
如何参与一个开源项目呢?
先fork到你自己的仓库, 然后在git clone到本地, 因为从你的账号克隆, 你才有权限提交修改.
你可以推送pull request给官方仓库来贡献代码。