1.Git的发展
Git最初是由Linux开发者Linus用了仅仅两周时间纯C语言编写而成,在编写完成之后就立马上手接管Linux源代码,不过在此之前Linux是由BitMover公司开发的BitKeeper分布式版本控制系统所管理源代码,它是商业收费的分布式版本控制器,但BitMover公司看中Linux开源精神,免费授权给Linux社区使用,在2002年时,Linux开始使用BitKeeper分布式版本控制系统管理源代码,但好景不长,有一天Linux社区成员Andrew(samba(局域网共享文件c/s程序)的作者)试图破解BitKeeper共享给所有人使用,被BitMover公司发现并收回了免费使用的版权,随后Linus就用了两周时间开发出了git(两周时间包括测试),也就是目前为止最好用的分布式版本控制系统。大名鼎鼎的github用的就是git系统来管理它们的网站,这里需要区分一下,github和git是两个东西,github是一个社区,git是一个服务系统,github只支持git分布式系统,所以故名成为github。
2.git命令
git init 初始化
git status 查看仓库当前的状态
git diff <file> 查看具体修改了什么内容
git diff HEAD --<file> 命令可以查看工作区和版本库里面最新版本的区别
git add <file> 添加到暂存
git add -f <file> 假如文件被忽略这样可以强制添加
git commit -m "balabalabala" 提交暂存区的文件到本地仓库
git log --graph --pretty=oneline 查看日志
git reset --hard HEAD^ (git reset --hard 版本编号) 版本回退
git reset HEAD <file> 添加到了暂存区时,想丢弃修改
git checkout --<file> 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时
git rm <file> 从版本库中删除该文件(然后commit)
git remote 查看远程库信息
git remote -v 更加详细的查看
git remote add origin 地址 本地关联远程库
git clone 地址 克隆远程库
git branch 查看当前分支
git branch <name> 创建分支
git checkout <name> 切换分支
git checkout -b <name> 我们创建分支,然后切换到分支
git merge <name> 合并分支到当前分支
git merge --no-ff -m "xxxxx" <name> 合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并
git branch -d <name> 删除分支
git branch -D <name> 强行删除
git pull origin <name> 拉取
git push origin <name> 推送
git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list 查看贮藏区
git stash apply 恢复后,stash内容并不删除
git stash drop 删除贮藏区的内容
git stash pop 恢复的同时把stash内容也删了
你可以多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash,用命令 git stash apply stash@{0}
git rebase 变基(线路变得好看)
git tag <tagname> 打标签
git tag -a <tagname> -m "balabalbal..." 可以指定标签信息
git tag 查看所有标签
git show <tagname> 查看该标签版本信息
git tag -d <tagname> 删除标签
git push origin <tagname> 推送标签到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
git push origin :refs/tags/<tagname> 可以删除一个远程标签
在Git工作区的根目录下创建一个特殊的.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
git reflog
用来记录你的每一次命令
3.区别
-
1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
-
2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
-
3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
-
4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
-
5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
-