一、git介绍与工作原理
git是一款免费的、开源的分布式版本管理控制系统
二、git与svn的区别
最核心的区别就是Git是分布式的,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份; SVN是集中式的。SVN必须有一个服务器版本库就放在一个中央服务器,都通过客户端连到这台服务器,取出最新的文件或者提交更新。
三、Git仓库初始化
1、通过git clone克隆远程仓库到本地#默认在当前目录下创建和版本库名相同的文件夹并下载版本到该文件夹下 git clone <远程仓库的网址> 例如: git clone git://github.com/someone/some_project.git #指定本地仓库的目录git clone <远程仓库的网址> <本地地址>#指定要克隆的分支,默认是master分支 git clone <远程仓库的网址> -b <分支名称> <本地地址>2、通过git init初始化项目所在目录,初始化后会在当前目录下出现一个名为 .git 的目录#初始化一个git仓库(本地) git init #初始化一个空的仓库,没有工作区的,只记录提交的历史记录 git init --bare四、远程仓库相关命令1.检出仓库:git clone git://github.com/jquery/jquery.git2.查看远程仓库git remote #查看远程仓库名称git remote –v #查看远程仓库的fetch/push的具体路径3.添加远程仓库git remote add [name] [url]4.删除远程仓库git remote rm [name]5.修改远程仓库 git remote set-url --push [name] [newurl]6.拉取远程仓库git pull [remoteName] [localBranchName]7.推送远程仓库 git push [remoteName] [BranchName]五、分支(branch)操作相关命令1.查看本地分支 git branch2.查看远程分支git branch –r3.创建本地分支git branch [name] #注意新分支创建后不会自动切换为当前分支4.切换分支git checkout [name]5.创建新分支并立即切换到新分支 git checkout -b [name]6.删除分支git branch -d [name] # -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项7.合并分支 git merge [name] #将名称为[name]的分支与当前分支合并8.创建远程分支(本地分支push到远程)git push origin [name]9.删除远程分支git push origin :heads/[name] 或 $ gitpush origin :[name] 10.创建空的分支(执行命令之前记得先提交当前分支的修改,否则会被强制删干净)git symbolic-ref HEAD refs/heads/[name]rm .git/indexgit clean -fdx六、版本(tag)操作相关命令1.查看版本git tag2.创建版本 git tag [name]3.删除版本git tag -d [name]4.查看远程版本 git tag –r5.创建远程版本(本地版本push到远程) git push origin [name]6.删除远程版本 git push origin :refs/tags/[name]7.合并远程仓库的tag到本地git pull origin –tags8.上传本地tag到远程仓库git push origin –tags9.创建带注释的taggit tag -a [name] -m 'yourMessage'七、子模块(submodule)相关操作命令1.添加子模块git submodule add [url] [path]2.初始化子模块git submodule init #只在首次检出仓库时运行一次就行3.更新子模块git submodule update #每次更新或切换分支后都需要运行一下4.删除子模块(四步)>git rm --cached [path]>编辑“.gitmodules”文件,将子模块的相关配置节点删除掉>编辑“ .git/config”文件,将子模块的相关配置节点删除掉>手动删除子模块残留的目录八、其他相关命令1.忽略一些文件、文件夹不提交 #在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如:target、bin、*.db2.git add #把指定的文件添加到暂存区中 >git add -u [<文件路径>] # 添加所有修改、已删除的文件到暂存区中 >git add -A [<文件路径>] #添加所有修改、已删除、新增的文件到暂存区中,省略 <文件路径> 即为当前目录3. git rm #从当前的工作空间中和索引中删除文件 >git rm <文件路径> #移除跟踪指定的文件,并从本地仓库的文件夹中删除 >git rm -r <文件夹路径> #移除跟踪指定的文件夹,并从本地仓库的文件夹中删除4. git commit –m “<提交的描述信息>” #把暂存区中的文件提交到本地仓库中并添加描述信息5. git log #查看历史日志6. git revert #还原一个版本的修改,必须提供一个具体的Git版本号7. git config #利用这个命令可以新增、更改Git的各种设置8. git status #查看本地仓库的状态,会显示两列,第一列是文件的状态,第二列是对应的文件 # 文件状态:A 新增,M 修改,D 删除,?? 未添加到Git中9. git fetch <远程仓库的别名> #将远程仓库所有分支的最新版本全部取回到本地 >git fetch <远程主机名> <分支名> #将远程仓库指定分支的最新版本取回到本地10. git push <远程仓库的别名> <本地分支名>:<远程分支名> #把本地仓库的分支推送到远程仓库的指定分支 >git push <远程仓库的别名> :<远程分支名> #删除指定的远程仓库的分支11. git pull –p #删除掉本地不存在的远程分支12. git mv <源文件/文件夹> <目标文件/文件夹> #重命名文件或者文件夹。13. git reset [<文件路径>] #重置暂存区,但文件不受影响14. git diff HEAD #比较当前文件和上次提交时的差异 >git diff <commit ID> #查看从指定的版本之后改动的内容 >git diff <分支名称> <分支名称> #比较两个分支之间的差异九、.git文件夹中各文件/文件夹作用1.HEAD文件 该文件指明了git branch(即当前分支)的结果,比如当前分支是master,则该文件就会指向master,但是并不是存储一个master字符串,而是分支在refs中的表示,例如ref: refs/heads/master。2.Refs文件夹 该文件夹存储指向数据(分支)的提交对象的指针。其中heads文件夹存储本地每一个分支最近一次commit的sha-1值(也就是commit对象的sha-1值),每个分支一个文件;remotes文件夹则记录你最后一次和每一个远程仓库的通信,Git会把你最后一次推送到这个remote的每个分支的值都记录在这个文件夹中;tag文件夹则是分支的别名3. config文件 该文件主要记录针对该项目的一些配置信息,例如是否以bare方式初始化、remote的信息等,通过git remote add命令增加的远程分支的信息就保存在这里4. Hooks文件夹 主要定义了客户端或服务端钩子脚本,这些脚本主要用于在特定的命令和操作之前或者之后进行特定的处理,比如:当你把本地仓库push到服务器的远程仓库时,可以在服务器仓库的hooks文件夹下定义post_update脚本,在该脚本中可以通过脚本代码将最新的代码部署到服务器的web服务器上,从而将版本控制和代码发布无缝连接起来5. description文件 #GitWeb程序使用6. Logs文件夹 记录了本地仓库和远程仓库的每一个分支的提交记录,即所有的commit对象(包括时间、作者等信息)都会被记录在这个文件夹中,因此这个文件夹中的内容是我们查看最频繁的,不管是Git log命令还是tortoiseGit的show log,都需要从该文件夹中获取提交日志7. info文件夹 保存了一份不希望在.gitignore 文件中管理的忽略模式的全局可执行文件