廖雪峰GIT课程笔记
1. git 简介
1. Git是目前最先进的分布式版本控制系统。
2. 创建版本库:cd到目录下 -> git init
3. 把一个文件添加到git仓库需要两部:git add <filename> --> git commit -m <commit message> git add 分多次添加-->git commit 一次性提交
2. 时光机穿梭
1. git status 查看仓库状态
2. git diff 查看修改 : 读懂diff
2.1 版本回退
1. git log 显示从最近到最远的提交日志。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数
2. git reset --hard commit_id HEAD指向当前版本,HEAD^上一个版本,HEAD^^上上个版本,HEAD~100往上100个版本
3. 在回退前可使用git log查看要回退的提交版本号,在重返未来时,可以使用git reflog来确定要回到未来的哪一个版本。
2.2 工作区和暂存区
1. 工作区:就是电脑里能看到的目录 版本库:工作区下有一个隐藏目录.git,这个不算工作区,而是git的版本库。git的版本库里存储了很多东西,其中最重要的就是暂存区(stage),还有git自动为我们创建的第一个分支master,以及指向master的一个指针:HEAD。
2. git add实际上是把文件提交到stage(暂存区),git commit是把暂存区的内容提交到当前分支。
2.3 管理修改
1. 为什么git比其他的版本控制系统更优秀,因为GIT管理的是修改,而非文件。
2. git commit只负责把缓存区里的内容给提交了,没有添加到缓存区内(git add)的内容不会被提交。
3. git diff HEAD -- <filename>可以查看工作区和版本库里最新版本的区别。
2.4 撤销修改
1. git checkout -- filename 撤销工作区的修改,让这个文件回到最近一次git add或git commit时的状态,该命令不会撤销已经add到暂存区(stage)的修改。
一种情况是文件修改后还没有被git add 到暂存区,那么撤销修改后文件就变成和版本库一样的状态。
一种情况是,文件已经被add到暂存区然后又作了修改,那么撤销修改就回到添加到暂存区后的状态。
2. 对于已经git add但没有commit的修改,可以使用git reset HEAD <filename>来把暂存区的修改撤销掉(unstage)
2.5 删除文件
1. 在文件管理器中删除文件后,文件并没有从版本库中删除掉
如若确实要从版本库中删除该文件,可以先git rm <fileme> 然后git commit
若是误删,可以使用git checkout -- <filename>恢复
3. 远程仓库
1. 注册github账号后,去用户主目录下的.ssh文件夹下寻找公钥文件(id_rsa.pub)和私钥文件(id_rsa),如果没有使用如下命令生成:
ssh-keygen -t rsa - C "your email"
2. 将你的公钥文件中的内容(id_rsa.pub)拷贝到GitHub里面
登录GitHub-》Account Settings-》SSH keys-》Add SSH Key-》粘贴到对应位置
GitHub通过你的公钥来确定你的身份,只有通过你的私钥加密的文件才能正确通过你的私钥解密。
3.1 添加远程库
1. 将本地的仓库同步到GItHub上的一个远程库
在GitHub上“create a new repo”-》填入相关信息-》git remote add origin github项目名-》git push -u origin master(将本地分支内容推送到远程分支,并将本地分支和远程分支关联起来)-》以后可以使用git push origin master来向远程推送修改
3.2 从远程仓库克隆
1. git clone <远程仓库地址>
2. git支持ssh协议和http协议,也就有两种不同的远程仓库地址。通过ssh支持的原生git协议速度最快,https协议每次推送都要输入口令,但是在某些只开放了http端口的公司内部只能使用http地址。
4. 分支管理
4.1 创建与合并分支
1. 最初,master分支是一条线,Git用master指向最新的提交,用HEAD指向当前分支,即master。当我们创建并切换到一个新的分支dev时,Git创建一个新的指针dev,指向与master相同的提交,再把HEAD指向dev,表示当前分支在dev上。Git创建一个分支很快,因为除了创建一个dev指针,并且改变一下HEAD指针的指向,工作区的文件没有发生任何变化。在后续的修改和提交中dev指针不断向前移动,而master指针不变。合并时,最简单的方式就是直接把master指向dev的当前提交,因此合并也很快,也是只改改指针,而工作区的呢绒不变。
2.
a. 创建dev分支并切换到dev分支:git checkout -b dev。这一句相当于两句,首先是创建dev分支:git branch dev 然后是切换到dev分支:git checkout dev
b. git branch 命令查看当前分支 git checkout dev/master 完成分支间的切换
c. git merge dev 合并指定分支(即dev)到当前分支
d. git branch -d dev 删除指定分支(即dev)
4.2 解决冲突
1.