区别 | Git | SVN |
---|---|---|
定义 | Git是分布式版本控制系统 。没有中央服务器,每一个人电脑上都是一个完整的版本库。 |
SVN是集中式版本控制系统 ,版本库是集中放在中央服务器的,干活的时候先从中央服务器获得最新的代码,干完活你再把本身的代码推送到中央服务器 |
是否联网 | Git只有在pull和push等操做的时候才须要联网。 | SVN只有在联网的状况下才能工做。 |
版本记录 | Git在断网的状况下,能够在本地保存版本记录。因此合并起来很方便。同时能够在没网的状况下查看开发的版本历史。 | 在断网的状况下,SVN不工做,既不能提交也不能回滚,因此也不会有本地记录。 |
历史库的存放位置 | Git本地仓库包含代码库和历史库,在本地的开发环境中就能够记录历史。 | SVN的历史库存在中央仓库,每次对比和提交代码都必须链接到中央仓库才行 |
Git和SVN的最根本区别在于历史版本维护的问题。javascript
1、 建立git仓库的方案
1 、第一种方案:在现有目录下初始化仓库
1)建立一个文件夹
mkdir vue
2)在该文件夹下新建仓库
git init
//此时vue目录下会出现一个.git的目录,该目录是用来跟踪管理版本的
2、第二种方案:克隆现有的仓库
git clone git@github.com:tangjie1111/vue.git
2、将本地仓库跟远程库关联起来(在本地仓库文件夹下(vue)输入下面的命名)
1、第一步,在GitHub上面新建一个空的仓库
Create a new repo
//而后在Repository name填入vue,此时能够从这个仓库克隆出新的仓库,也能够把一个已有的本地仓库与之关联。而后把本地仓库的内容推送到GitHub仓库,
2、第二步,将GitHub上的仓库关联到本地
git remote add origin git@github.com:tangjie1111/vue.git
//git@github.com:tangjie-93/vue.git是仓库地址,tangjie1111是该用户吧帐号名。 origin表示仓库的名称
//关联多个远程仓库
git remote add github git@github.com:tangjie-93/learngit.git
//关联github帐户为tangjie-93,名为github的远程仓库
git remote add gitee git@github.com:james/learngit.git
//关联github帐户为james,名为github的远程仓库
3、将远程仓库的内容拉取到本地且和本地分支合并
git pull origin master
4、将远程仓库的内容拉取到本地
git fetch [remote-name]
//访问远程仓库,从中拉取全部你尚未的数据
5、将当前分支内容推送到远程分支
git push [remote-name] [branch-name]
git push -u origin master
//将本地库的全部内容推送到远程库。将当前分支master推送到远程。参数u使得Git不但会吧本地的master分支内容推送到远程的master分支,还会把本地的master分支和远程的master分支关联起来。在之后的推送和拉取就能够简话化命令了。以后的推送就能够不用加u了。
git push origin dev 或者git push origin dev:dev
//表示将当前分支推送到dev远程分支。origin是默认仓库名称,也可使用其余名称
git push origin dev:test
//将本地的dev分支内容推送到远程仓库上的test分支
6、查看远程仓库的名称
git remote
//查看远程仓库的名称
git remote -v
//查看远程仓库的信息
git remote show [remote-name]
//查看某一个远程仓库的更多信息
7、取消本地目录下关联的远程库
git remote rm origin
//删除已有的远程仓库
8、重命名远程仓库
git remote rename dev test
9、重命名本地库
git branch -m current-branch-name new-branch-name
10、在本地新建一个分支来跟踪远程分支
git checkout -b serverfix origin/serverfix
git checkout -b sf origin/serverfix
//将本地分支的名字改成sf
git checkout --track origin/serverfix
11、设置已有的本地分支跟踪一个刚刚拉取下来的远程分支
git branch -u origin/serverfix
12、将全部的本地分支列出来而且包含更多的信息
git branch -vv
//通常要先将服务器上的数据线拉取过来 git fetch --all
13、删除一个远程分支
git push origin --delete serverfix
复制代码
//对这台机器上全部的Git仓库都会使用这个配置,固然也能够对某个仓库指定不一样的用户名和邮箱
1、配置名字
git config --global user.name "james";
2、配置邮箱
git config --global user.email "14232134576.@qq.com";
3、查看配置列表
git config --list
4、查看某一配置项
git config user.name
5、查看git有哪些命令
git help
git help config //获取config命令的手册
6、配置git命令别名
git config --global alias.status st
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
复制代码
1、查看最近到最远的提交日志
git log
//查看提交历史,以便肯定要回退到哪一个版本
git log --pretty=oneline --abbrev-commit
//仅仅显示版本号和提交说明 --pretty=oneline表示将提交历史放在一行显示 --abbrev-commit在于缩短commit id。
git log --pretty=format:"%h - %an, %ar: %s"
//定制化要显示的记录格式
git log --graph --pretty=oneline --abbrev-commit
//以图的形式展现提交信息合合并信息
2、将当前版本回退到上一个版本
git reset --hard HEAD^ //HEAD指向当前版本
3、回退到指定版本
git reset --hard 1092a //1092a表示版本号的前几位
git reset HEAD "文件" //把暂存区的修改撤销掉
4、查看记录的每一次命令
git reflog //查看命令历史,以便要回到将来的哪一个版本
5、查看最近几回提交的内容差别
git log - p -n
//-p表示按补丁格式显示每一个更新之间的差别
6、查看每次提交的简略的统计信息
git log --stat
7、限制输出长度
git log --since=2.weeks
//查看最近两周的提交
git log --pretty="%h - %s" --author=tangjie-93 --since="2008-10-01"
//查看指定做者指定时间段的提交
8、按指定关键字进行筛选
git log -Sgit
//按git关键字筛选提交的内容
9、查看最后一次的提交记录
git log -1
10、查看提交历史、各个分支的指向以及项目的分支分叉状况
git log --oneline --decorate --graph --all
11、查看某个文件的修改记录
git blame 文件名 -L//参数L来检查须要修改的某几行。
12、查看以前提交的内容
git show commitId
复制代码
一、下图是--pretty=format经常使用选项
vue
二、下面是git log的经常使用选项
java
三、下图是限制git log输出的选项
git
1、将工做区的文件添加到暂存区
git add "文件或者目录"
//其实是把工做区的文件添加到暂存区;或者跟踪(track)新添加的文件;同时还能用于合并时将有冲突的文件标记为已解决状态。该命令可被理解为"添加内容到下一次提交中"
注意: 执行git add的文件,还没执行git commit的文件,再次被修改后,须要从新执行git add命令才行。
git commit -m "描述"
//把暂存区的全部内容提交到当前分支。
//注意:提交记录的是放在暂存区的快照。
2、 将暂存区的文件提交到当前分支
git commit -a -m "描述"
//把已经跟踪过的文件暂存起来一块儿提交。
git commit --amend
//用于修改提交内容
3、查看工做区文件的当前状态
git status //查看工做区的当前状态
git status -s 或者 git status --short//将当前工做区的转态信息简化
4、查看工做区文件和暂存区文件的差别(查看未暂存文件的修改)
git diff //比较当前工做目录中当前文件和暂存区文件之间的差别。
5、查看暂存区文件和当前分支文件的区别(查看已暂存的文的修改)
git diff --cached git diff --staged //查看提交到暂存区但还没提交到分支的内容。也就是比较暂存区和仓库分支里的区别。
6、查看工做区文件和当前分支最新版本文件的区别
git diff HEAD -- "文件" //查看工做区和版本库里最新版本的某个文件的区别
复制代码
1、将文件在工做区的修改全撤销
git checkout -- "文件"
//把文件在工做区的修改全撤销。总之就是让这个文件回到最近一次git commit或 git add的状态。分两种状况讨论:
//状况1,文件自修改后尚未放到暂存区,撤销修改后就回到和版本库同样的状态。若是此时你想把刚刚撤销的内容复原的话,若是此时的编辑器还没关掉的话,使用撤销"CTRL+Z"能够回到撤销以前的状态。
//状况2,文件已经添加到暂存区,如今又作了修改,撤销修改就回到添加到暂存区后的状态。
git checkout -- "文件" 中的--很重要,没有--,就变成了`切换到另外一个分支`的命令。
2、将暂存区的修改撤销掉,就是撤销执行了add命令尚未执行commit命令的文件
git reset HEAD "文件"
//将暂存区的修改撤销掉。使得工做区中文件与当前分支文件同样。
复制代码
1、将文件从暂存区中删除,分为如下两步。先删除,再提交
git rm "文件" //从暂存区中删除该文件,而且会连带从工做目录中删除指定的文件
git commit -m "delete file" //
git checkout -- "文件" //用版本库里的文件替换工做区的版本,不管是修改仍是删除。
2、若是删除以前修改过而且已经放到暂存区的话,就必须用强制删除选项-f 。用于防止误删尚未添加到快照区域的数据。
git rm -f "文件"
3、删除git仓库中的数据,但文件仍然保留在磁盘中。
git rm --cached "文件"
复制代码
一、建立和合并github
每次提交,Git都把它们串成一条时间线,该时间线就是分支。master称为主分支,master(分支)是指向提交对象的可变指针,HEAD指向的是当前分支
。每次像maste分支r提交,master
分支都会向前移动一步,提交的越多,master分支的线就愈来愈长。 当咱们建立新的分支dev
时,把HEAD
指向当前分支dev
。此时对工做区的修改和提交就是针对dev
分支了,提交一次,dev
分支的指针就向前移动一步,而master指针不变。。
服务器
1、建立分支
git checkout -b dev 或者 git switch -c dev
//至关于下面的两条执行语句
git branch dev //建立分支
git checkout dev //切换回当分支
2、查看当前分支
git branch //会列出当前全部分支,且当前分支会标记一个`*`号
git branch -a //查看本地和远程仓库的全部分支
3、切换分支
git checkout dev或者 git switch dev
4、合并分支
git merge dev //合并某分支到当前分支
5、删除分支
git branch -d dev
6、强行删除分支
git branch -D dev
7、建立远程分支到本地
git checkout -b dev origin/dev
9、将本地分支推送到远程并在远程建立相同的分支
git push origin dev:dev
10、删除远程分支
git push origin :dev //origin 是远程仓库的默认名称
11、查看每一个分支的最后一次提交
git branch -v
12、查看已经合并到当前分支的分支
git branch --merged
13、查看还没有合并到当前分支的分支
git branch --no-merged
复制代码
建立当前分支(以下图所示)app
在当前当前分支提交,时间线的变化(以下图所示)编辑器
二、解决冲突分布式
git log --graph --pretty=oneline //查看分支的合并状况
1、切换到dev分支,修个文件
vi test.md
git add test.md
git commit -m "modify test.md"
git switch master
git merge dev//合并分支,冲突了
2、解决冲突
vi test.md
git add "test.md"
git commit -m "modify .test.md" //此时自动合并了,此时当前分支上的数据是最新的,若是想在其余分支上也更新数据,能够在其余分支上git merge "其余分支"使得数据最新
3、一般在合并分支时,Git默认采用的是`Fast Forwar`模式,可是在这种模式下,删除分支后,会丢掉分支信息。
git merge --no-ff -m "merge with no-ff" dev //表示禁用Fast Formard的方式,`的模式会记录分支历史。 -m 是由于本次合并会建立一个新的提交。`no-ff
复制代码
三、bug分支 fetch
git stash
//将当前工做现场存起来,暂存无法提交的工做现场
git stash list
//查看存储的列表
git stash apply stash@{0}
//恢复指定的stash,可是stash的内容并无删除
git stash drop
//删除stash
git stash pop
//恢复stash的同时也把stash删除了
git cherry-pick commitid
//复制一个特定的提交到当前分支
git checkout -b branch-name origin/branch-name
//在本地建立和远程分支对应的分支,名称最好同样
git branch --set-upstream branch-name origin/branch-name
//创建本地分支和远程分支的关联
git rebase
//将本来分叉的提交历史变成一条直线。本质上就是把本地未push的分叉提交历史整理成直线。 使得咱们在看历史提交的变化更容易些。其实就是把咱们本地的提交放到了别人提交以后了。不足的是本地的分支提交已经被修改过了。
复制代码
标签是版本库的快照,是指向某个commit的指针。目的在于可让人们更快的记住。
1、建立标签
git tag "标签名" //默认是对最新的commit 设置标签
git tag "标签名" commitid //对特定commit设置标签
2、后期打标签
git tag -a <tagname> -m "blablabla..." commitid
//指定标签信息 commitid表示版本id
2、查看全部标签
git tag
git show "标签名"
//查看该标签的详细信息
3、附注标签
git tag -a <tagname> -m "blablabla..."
//-a表示指定标签名 -m表示指定说明文字
4、删除标签
git tag -d "标签名"
tit push origin :refs/tags/"标签名"//能够删除一个远程标签
5、推送标签
git push origin "标签名"
//推送一个本地标签到远程仓库
git push origin --tags
//推送所有未推送过的本地标签到远程
复制代码