Skip to content

Instantly share code, notes, and snippets.

@dlutwuwei
Created May 21, 2014 06:24
Show Gist options
  • Save dlutwuwei/375eda6396a47ecf460f to your computer and use it in GitHub Desktop.
Save dlutwuwei/375eda6396a47ecf460f to your computer and use it in GitHub Desktop.
git使用概述

title: git使用概述(初学者必看) date: 2014-05-21 13:00:50 categories: git tags: [git, hexo, gitcafe, github]

昨天为了把hexo博客放到gitcafe上,由于hexo d命令配置仓库不起作为,hexo g生成项目时很多更新判断是有问题,造成一些配置项无法生效,好的办法是把.deploy和pulic文件夹都删除,重新走一遍,但是本着学习的精神,还是好好地研究了一番git。

对于快速上手git,推荐看廖雪峰大牛的git教程, 写得很易懂,但是有些使用场景也没覆盖到,全面的教程在这里,免费的书哦,但是内容太多,看起来太累。

###一、概念理解 首先需要知道git和svn的区别,git是DVCS(分布式版本控制),svn是VCS(集中式版本控制),具体看这里,总的概括一下,git系统里,本地就是远程服务器的一个镜像,所有git里的分支,本地和远程都各有一份,这个需要明确,push的时候会把本地分支推送到服务器。 git版本控制 每个客户端都有一个服务器端的镜像,这里可以在本地进行一切版本控制的操作,完成后推送到服务器端合并。

还有一个重要的概念是工作区和暂存区,看下图: work and stage 我们修改文件是在工作区,就是我们的工作目录,调用git add命令将其修改加入暂存区,没有进入版本库,当你觉得所有的东西都修改完后,可以调用git commit提交至本地的版本库,

不管commit有没有成功,暂存区都会被清空

本地的版本库就发生了变化,但是这样其他人也看不到你的修改啊,调用git push将本地版本库推送至远程版本库,如果没发生冲突,good,其他人就可以调用git pull获取到你的代码了,如果冲突了,你得先git pull一下,看看哪儿冲突了,修改冲突后,再来一遍add commit push。一般来说使用git就是这个流程,可能还会有版本回退,删除等问题。

###二、几种特殊场景处理 下面将一些特殊的应用场景,主要涉及分支方面,假定gitcafe和github是两个远程仓库:

  1. 当前分支要同时传到两个版本库上,比如你在gitcafe和github上都有项目,需要同时更新。 可以这样: git push gitcafe master:gicafe-pages git push github master:master或者git push github master git push 将本地的master分支分别合并到了gitcafe上的gitcafe-pages分支和github上的master分支。

  2. 你发现github上的远程maser分支和本地分支有冲突,而且冲突的地方非常多,无法一个一个修改了,原因可能是服务器上的分支是老分支master,而你是从新分支开发的,现在要废除老分支,可以这样: git push github :master 用空分支覆盖github上的分支master,相当于删除了master分支。 git push github master 将本地master分支上传至github(不指定远程分支名,则合并至同名远程分支)。

###三、版本冲突处理 版本冲突的几个场景,git版本冲突可能会出现在两个地方,git merge合并分支的时候,git push远程推送时,解决方法差不多:**

  1. git push github master提交发生冲突时,是本地分支和远程分支的冲突,可以这样 git pull github master, 你将会看到那些文件冲突了,修改完成后, git add . git commit -m "confict fixed" git push github master,完成冲突解决。

  2. git merge another发生冲突时,是在本地两分支冲突,解决办法就是git status看看哪些文件冲突,修改完成后 git add . git commit -m "confict fixed" git branch -d another,修改完冲突another分支已经没用了,不是么?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment