1.分布式版本控制系统VS集中式版本控制系统
集中式版本控制系统需要一个中央服务器,且需要联网才能工作。
分布式版本控制系统每个人的电脑上都是一个完整的版本库,且安全性比较高。
2.配置git
git config --global user.name "username"
git config --global user.email "email"
–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置
3.创建版本库
mkdir DL
git init 将这个目录变成Git可以管理的仓库
ls -ah 查看这个隐藏的目录下的内容
4.把文件添加到仓库
git add readme.txt
用git add命令后,在工作区的第一次修改被放入暂存区,准备提交
【补充vi编辑模式下保存文件:先按esc,然后输入:wq或者:x】
5.将文件提交到仓库(本地库)
git commit -m "这次的提交说明"
git commit把暂存区的所有内容提交到当前分支。
6.查看工作区的状态,查看变动
git status
git diff
每次提交到仓库后可以用git status再看一下状态再commit
7.git log --pretty=oneline filename.txt
命令显示从最近到最远的提交日志,其中前面显示的是SHA1计算出的一个commit id
8.撤销修改
①撤销在工作区的修改(回到版本库的状态【若未add】或者暂存区的状态【若已add】)
git checkout -- filename.txt
②撤销在暂存区的修改(已经git add到了暂存区)
git reset HEAD filename.txt
③版本回退(已经从暂存区提交到了版本库)
git reset --hard HEAD^
这个是回到上一个版本。
再回到最新版本的话需要改成git reset --hard 想回去的commit_id的前几位
,
此时可以用cat readme.txt
查看这个版本的内容。
可以用git reflog
查看每次命令
9.删除文件
如果用rm删除了文件,相当于删除了工作区的文件,想要恢复用git checkout -- filename.txt
确实要删除这个文件:git rm readme.txt
,再git commit --m "删除操作的描述"
10.远程仓库
SSH
cd ~/.ssh
ssh-keygen -t rsa -C "youremail@example.com"
一路回车,会生成两个文件(SSH的密钥对),一个是私钥id_rsa和公钥id_rsa.pub,然后cat id_rsa.pub
打开这个文件,里面放的是公钥,复制后打开gitlab-setting-SSH keys,把这个公钥复制进去,点add key,git知道了我的公钥之后才能确认说这次的代码推送是我本人进行的。
添加远程库
new project-按照说明来
新建的这个远程库,由于是空的,push的时候使用git push -u origin master
。以后再进行推送就可以用git push origin master
了
(如果本地文件进行修改,然后需要add进暂存区,再commit之后,使用push命令将所有文件push到远端。)
过程中踩的坑:
出现 “fatal: The remote end hung up unexpectedly ” 问题的原因是push的文件过大,用git config --global http.postBuffer 104876000
这个扩充git的buffer。
克隆远程库
git clone 啦啦啦啦
分支
master分支是一条线,Git用master指向最新的提交,再用HEAD指向master。
创建一个dev分支,其实就是dev指向master相同的提交,再把HEAD指向dev。dev合master的过程就是将master执行dev的当前提交,
git checkout -b dev 创建+切换分支(相当于git branch dev + git checkout dev)
git branch 查看当前分支
git checkout dev 切换到master分支
git merge dev 将dev分支合到master分支上(需要切换到master分支执行这一句)
git push origin master 提交该分支到远程仓库
git branch -d dev 删除本地dev分支
其中:git merge dev
这种方式是fast forward方式,在merge之后dev分支的信息会丢失,使用git merge --no-ff -m "merge with no-ff" dev
这种方式会在merge时生成一个新的commit,方便从分支历史查看分支信息)
处理冲突:
当两个分钟的内容冲突时,merge时就会出现conflict,需要手动编辑。使用git log --graph
可以查看分支的合并图。
bug分支:
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场