本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Git是开源的分布式版本管理工具。
可以让多个计算机去共同开发和处理问题,最终同步到一个结果上。
Git和SVN的差别
- 关注重点不一样,改变后的文件快照,文件内容的具体差异。每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,Git是关注整个文件库的元数据,在代码的根目录会有.git文件,每个文件都有一个版本号,也可以通过文件的版本号去回退文件,而SVN主要是关注文件的修改,每个文件夹下都会有个.svn文件夹。
- 对环境的要求,SVN必须联网才能对文件做还原,比较,提交等操作,Git每个开发者开发都是首先clone一个本地库,进行开发,开发者一切的修改都是先提交到本地库,也可以根据本地库进行还原,比较,提交等操作,不依赖网络,这样的结果也有一个就是SVN的代码保密性比较高,而Git,任意一个clone了代码库的开发者都可能公开代码。
- SVN对开发者权限的控制非常具体,能具体分配每一个开发者的可读,可写,提交的权限
- SVN对于多人同时提交可能会出现冲突,会有提交失败的情况出现,而Git对多人提交的情况,更容易解决冲突
- SVN没有分支,可以拷贝生成一个新的文件夹,生成一个唯一的url,用于开发者get代码。而Git是可以新建一个项目,下面有n个分支,每个分支有细微的差距,也可以每个开发者一个分支,设置一个主开发者,所有人的全部提交给主开发者,主开发者再合到服务器
Git工作区,暂存区,本地仓库,远程仓库
正常修改的文件都在工作区
git add 某个文件 将会将工作区的某个文件添加到暂存区
git commit "提交信息" 将会将暂存区的文件提交到本地仓库
git push 将会将本地仓库文件提交到远程仓库,别的开发者可以通过从远程仓库git push或者git pull拉去最新文件。
git-fetch和git-pull
两个命令都有从远程仓库拉去代码的作用 git fetch拉取代码不会自动合到本地分支 git pull拉取代码会自动合并到本地分支
git pull在各开发者冲突比较小的情况下,会更加快速方便。而git fetch在冲突的可能会比较大的时候,能给开发者自主合代码的机会,避免冲突,自动合并时覆盖掉某些正确代码。
git-stash
stash是藏匿的意思,顾名思义,git stash是隐藏一段代码。 git stash常用于解决冲突 当拉取代码出现冲突报错时,用git stash将本地修改的代码隐藏掉,这样代码就恢复到了上次拉取之后的状态,再拉取代码就不会报错。这个时候再释放掉stash的代码,处理已下载代码和本地代码的冲突 git pull => 拉取报错 => git stash => git pull => 拉取成功 => git stash pop => 处理冲突... git stash常用于解决冲突 当拉取代码出现冲突报错时,用git stash将本地修改的代码隐藏掉,这样代码就恢复到了上次拉取之后的状态,再拉取代码就不会报错。这个时候再释放掉stash的代码,处理已下载代码和本地代码的冲突 git pull => 拉取报错 => git stash => git pull => 拉取成功 => git stash pop => 处理冲突...
git merge
这个命令常用来合并分支 git merge temp1.2 将temp1.2分支合并到本地分支。
git checkout **
git checkout 分支名 切换到该分支 git checkout -b 分支名 新建一个分支,并切换到该分支 git checkout -b 分支名1 orgin/分支名2 新建本地分支1并与远程分支2关联起来,并切换到分支1 git checkout . 放弃工作区所有修改 git checkout -- 文件名 放弃指定文件修改 git checkout -f 放弃工作区、暂存区所有修改