学习廖雪峰 Git 教程记录
git 是一个分布式版本控制系统,更好的管理文件。但是其实 Git 跟踪管理的是修改,并非文件。
初始化一个仓库,使用 git init
创建版本库
添加文件到 Git 仓库,分两步:
-
git add
可一次添加多个文件 -
git commit -m "说明"
提交并添加注释
git staus
可以查看工作区的状态
如果 git status
告诉你文件有被修改过, 用 git diff
可以查看修改内容
版本回退
HEAD
指向的版本是当前版本,使用 git reset --hard commit_id
可以回退到指定版本
git log
可以查看提交历史
git reflog
查看命令历史
暂缓区
Git 的版本库在工作区的隐藏目录 .git
中,里面有很多东西,最重要的是称为 stage 的暂存区,还有 Git 为我们自动创建的第一个分支 master
,以及指向 master
的一个指针 HEAD
。
git diff HEAD --
查看工作区和版本库里面最新版本的区别。
撤销修改
直接丢弃工作区的修改时,可是使用 git checkout -- file
注意 --
必须加。
当文件已经被添加到了暂存区时,想丢弃修改,分两步:
git reset HEAD file
-
git checkout -- file
当文件已经被提交到了版本库时,可以回退版本库。使用git reset --hard commit_id
删除文件
git rm file
从版本库和工作区中删除文件,之后 git commit
git checkout -- file
用版本库里的版本替换工作区的版本。
远程仓库
- 创建 SSH Key
ssh-keygen -t rsa -C "[email protected]"
之后会在目录下生成 .ssh
目录
- 在 GitHub 中打开 “SSH and GPG keys”,并且 “New SSH key”,填写 title, 将
id_rsa.pub
中的内容复制进去
asd.png
当然,也可以添加多个 Key,GitHub 只要知道了你的公钥,就可以确认只有你自己才能推送。远程仓库是为了方便你的硬盘。
将本地仓库内容推送到 GitHub 仓库
git remote add origin [email protected]:MjSeven/learngit.git
git push -u origin master
关联一个远程库,使用
git remote add origin git@server-name:path/repo-name.git
关联后,使用git push -u origin master
第一次推送master分支的所有内容
之后就可以使用git push origin master
推送最新修改
分支操作
查看分支 git branch
创建分支 git branch
切换分支 git checkout
快捷操作
git checkout -b
合并某分支到当前分支 git merge
删除分支 git branch -d
分支策略
在实际开发中,有几个基本原则:
master
分支应该是非常稳定的,仅仅用来发布新版本
平时都应该在一个新的分支 dev
上干活,它是不稳定的,到时机成熟时,把 dev
分支合并到 master
上,在 master
分支发布新版本。
合并分支时,加上
--no-ff
参数可以使用普通模式合并,合并后的历史有分支
Bug 管理
修复 bug 时,会通过创建新的 bug 分支进行修复,然后合并,最后删除
如果当前分支还有未完成的工作时,先 git stash
保存工作现场,然后去修复 bug
,修复后使用 git stash pop
,回到工作现场。
如果是新加特性,最好新建一个分支
如果要丢弃一个没有合并过的分支,可以使用git branch -D
强行删除
本文所有内容来自于以下网站学习:
https://learngitbranching.js.org/?
初级篇
git commit
仓库中的提交记录保存的是你的目录下所有文件的快照,git 希望记录尽可能地轻量,在每次提交时,它并不会盲目复制整个目录,在条件允许下,它会将当前版本于仓库中的上一个版本进行对比,并把所有差异打包到一起作为一个提交记录
git branch
使用分支相当于在说:“我想基于这个提交以及它所有的父提交进行新的工作”
git 创建再多的分支也不会造成存储或内存上的开销
git checkout
切换工作分支
git checkout -b
创建一个新的分支同时切换到新创建的分支
git merge
将 name 的分支合并到当前分支
git rebase
Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后再另外一个地方逐个放下去
高级篇
HEAD
HEAD 是一个对当前检出记录的符号引用 -- 也就是指向逆正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支最近一次提交记录。
^
相对引用,向上提交一个记录,如 git checkout master^
,就是切换到 master 的父节点。 另外也可以将 HEAD
作为相对引用的参照。例如: git checkout HEAD^
~
如果你想在提交树上移动很多步的话,敲很多 ^
非常烦人,所以引入了操作符 ~
,该操作符后可以跟一个数字,不跟时与 ^
,相同。
git branch -f master HEAD~3
将 master 分支强制指向 HEAD 的第 3 级父提交
git reset / git revert
撤销变更 通过 HEAD^ 提交, 撤销本地分支
当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,在提交,合并完成。
用git log --graph
可查看分支合并图