目录
git与svn区别(分布式与集中式区别)
- git是分布式,svn是集中式
- 分布式更安全,每个人的电脑都保存了完整版本库,而集中式如果服务器宕机的话,就用不了了。
- git由于每个人都保存有版本库,所以不用联网也可以工作。
- git有高性能的分支管理功能,svn分支管理很慢。
常用命令
初始化:git init
添加工作区文件到git暂存区:git add file(.代表所有修改的文件)
将暂存区中的文件提交到当前分支:git commit -m”xxx”
git status:查看仓库状态
git diff 文件:查看文件修改了什么内容
版本回退
git log:历史记录
每提交一次,都会有个唯一的版本号,git log就可以查看历史版本号
回退到上个版本:git reset --hard HEAD^ (HEAD代表当前版本)
回退到指定版本:git reset --hard 版本号,版本号没必要写全,能区分就行
底层:HEAD是个指针,指向当前版本
但是如果回退后后悔了,想回到新版本,而git log不显示新的版本号,怎么办:
git reflog:显示所有版本号
git checkout --文件名 将file在工作区的修改/删除全部撤销掉,有两种情况:
- file还未add到暂存区,那么撤销后就回到和版本库一样的状态
- file已经add到暂存区但是未commit,又做了修改,那么撤销后回到添加到暂存区后的状态。
如果文件已经修改并提交到暂存区,想将文件恢复为提交到修改之前的工作区的状态:
git reset HEAD 文件名:将文件从暂存区回退到工作区。但是此时文件内容还是暂存区的内容,git status还是提示我们使用git add提交到暂存区,那么可以用git checkout --文件名,之后git status就啥都不提示了。
关于”回退“的总结
git checkout --文件名:丢掉工作区的修改/删除。但是不但修改了还添加到了暂存区,那么:git reset HEAD 文件名,将文件从暂存区回退到工作区,之后git checkout即可。
如果提交了不合适的修改到版本库,那么使用版本回退git reset --hard 版本号,前提是没有推送到远程库。
git与github远程库
git clone 远程库地址:将远程库下载到本地
git pull:将远程库拉取到本地
git push origin master:origin代表远程库,将本地修改提交到远程库master分支
分支管理
分支作用:每个人都有自己的分支,干完活将自己分支合并到主分支即可。
命令:
git checkout -b 分支名:创建新分支并切换到新分支
git branch :查看当前分支
git merge 分支名:将指定分支工作成果合并到当前分支上
git branch -d 分支名:删除分支
分支具体讲解
一开始只有一个master分支,如下图:
创建新分支dev并将当前分支指向dev:
在dev分支上进行文件的修改并提交,之后切换到master分支上:
此时maser分支是看不到dev修改的内容的。
将dev分支合并到master:
之后就可以删除掉dev分支了,删除完后如下:
分支冲突
如果feature1修改了文件内容并提交,接着切换到master分支并修改同一个文件并提交,之后合并分值的时候,就会出现分支冲突。
此时git merge命令会提示我们冲突文件在哪里:
readme.txt文件内容如下:
git会用<<<,>>>,===等来标记不同分支的内容。
如何解决:手动解决。我们进入发生冲突的文件内(readme.txt)修改文件内容并再次提交即可。
git status也可以查看冲突的文件。