Git操作与仓库创建

Git简介

首先了解一个概念:版本控制,简单来说就是如果你做文案工作,每次提交之后,你的领导会让你修改,一篇稿子可能修改十几次,但是最后定稿的很可能不是最新修改的那一稿,所以就需要有个版本控制的方法,可以回溯到你所修改的任何一版,并且可以拿出来使用。

目前来说,版本控制主要分为:集中式版本控制(Centralized Version Control Systems,简称 CVCS)和分布式版本控制,(Distributed Version Control System,简称 DVCS)。

集中式版本控制类似于中央集权,多个终端与一个服务器进行交互,缺点明显,如果服务器损毁,则所有终端都不能拿到最新版本。

分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。

下图就是分布式版本控制系统的图解:
Git操作与仓库创建_第1张图片

想更多的了解这两者的优缺点,请点击这里

CVCS的代表主要有CVS、SVN 以及Perforce等;

DVCS主要有 Git、Mercurial、Bazaar 以及 Darcs 等。我们平时比较常用的就是SVN和Git。

Git是世界上目前最先进的版本控制系统,Git的开发者也是Linux操作系统的创始人:“林纳斯·本纳第克特·托瓦兹”,他开发这个Git只用了短短两周,而关于这个Git开发的故事,也有一段奇闻,想了解的请点击深入 git 必看:git 是如何被创造的?讲述 git 的诞生史、核心思想及其父:Linus Torvalds

如想了解SVN的简单使用,可以查看:SVN的介绍与使用流程。

接下就开始介绍Git的简单操作使用。以下主要对官方文档以及其他文档的总结,会使用git作为版本控制工具来完成团队协作。因此,对基本的git操作指令进行总结是十分有必要的,本文会对基本的理论与命令做归纳总结。

git的通用操作流程如下图

Git操作与仓库创建_第2张图片

主要涉及到四个关键点:

  • 工作区:本地电脑存放项目文件的地方,比如learnGitProject文件夹;
  • 暂存区(Index/Stage):在使用git管理项目文件的时候,其本地的项目文件会多出一个.git的文件夹,将这个.git文件夹称之为版本库。其中.git文件夹中包含了两个部分,一个是暂存区(Index或者Stage),顾名思义就是暂时存放文件的地方,通常使用add命令将工作区的文件添加到暂存区里;
  • 本地仓库:.git文件夹里还包括git自动创建的master分支,并且将HEAD指针指向master分支。使用commit命令可以将暂存区中的文件添加到本地仓库中;
  • 远程仓库:不是在本地仓库中,项目代码在远程git服务器上,比如项目放在github上,就是一个远程仓库,通常使用clone命令将远程仓库拷贝到本地仓库中,开发后推送到远程仓库中即可;

因此,经过这样的分析,git命令可以分为这样的逻辑进行理解和记忆:

1.git管理配置的命令;

2.几个核心存储区的交互命令:

3.工作区与暂存区的交互;

4.暂存区与本地仓库(分支)上的交互;

5.本地仓库与远程仓库的交互。

Git下载与环境配置

Git下载安装以及环境配置请参考Git下载、安装与环境配置,这里不再赘述。

git配置命令

Git操作需要在一个文件夹下生成,安装完成之后,在桌面或者文件夹下,点击右键,出现下图:

Git操作与仓库创建_第3张图片

Git GUI 是图像化显示,与Git Bash功能一样
Git Bash常用此方式创建一个仓库,点击打开Git控制台

以下所有命令均在Git控制台上运行:如下图
Git操作与仓库创建_第4张图片

$表示提示输入

查询配置信息

1.列出当前配置:git config --list;
2.列出repository配置:git config --local --list;
3.列出全局配置:git config --global --list;
4.列出系统配置:git config --system --list;

第一次使用git,配置用户信息

1.配置用户名:git config --global user.name "your name";
2.配置用户邮箱:git config --global user.email "[email protected]";

其他配置

1.配置解决冲突时使用哪种差异分析工具,比如要使用vimdiff:git config --global merge.tool vimdiff;
2.配置git命令输出为彩色的:git config --global color.ui auto;
3.配置git使用的文本编辑器:git config --global core.editor vi;

工作区上的操作命令

新建仓库

1.将工作区中的项目文件使用git进行管理,即创建一个新的本地仓库:git init;(初始化)
2.从远程git仓库复制项目:git clone <url>,如:git clone git://github.com/wasd/example.git;、
3.克隆项目时如果想定义新的项目名,可以在clone命令后指定新的项目名:git clone git://github.com/wasd/example.git mygit;

查看文件状态

$ git status

显示工作目录的状态,不带参数执行,输出内容很详细。并且根据文件是否暂存,会预示下一步的指令操作。

如果想简洁一点,那么加个--short (-s)参数:git status -s

移除文件

$ git rm 

从git中将已跟踪的文件从工作目录、暂存区移除,注意是已跟踪的。如果该文件又是已修改的,可以使用参数 -f 强制删除。

如果移除未跟踪的文件,或者只在工作目录移除,在暂存区继续保留,那么可以执行:

提交

1.提交工作区所有文件到暂存区:git add .('.'的前面还有个空格!)
2.提交工作区中指定文件到暂存区:git add <file1> <file2> ...;
3.提交工作区中某个文件夹中所有文件到暂存区:git add [dir];

暂存区上的操作命令

提交文件到版本库

1.将暂存区中的文件提交到本地仓库中,即打上新版本:git commit -m "commit_info";
2.将所有已经使用git管理过的文件暂存后一并提交,跳过add到暂存区的过程:git commit -a -m "commit_info";
3.提交文件时,发现漏掉几个文件,或者注释写错了,可以撤销上一次提交:git commit --amend;
4.修改commit信息git commit --ammend,修改,保存;

删除git远程仓库地址

git remote -v //查看
git remote rm origin

分支管理

1.创建分支:git branch <branch-name>,如git branch testing;
2.从当前所处的分支切换到其他分支:git checkout <branch-name>,如git checkout testing;
3.新建并切换到新建分支上:git checkout -b <branch-name>;
4.删除分支:git branch -d <branch-name>;
5.将当前分支与指定分支进行合并:git merge <branch-name>;
6.显示本地仓库的所有分支:git branch;
7.查看各个分支最后一个提交对象的信息:git branch -v;
8.查看哪些分支已经合并到当前分支:git branch --merged;
9.查看当前哪些分支还没有合并到当前分支:git branch --no-merged;
10.把远程分支合并到当前分支:git merge <remote-name>/<branch-name>,如git merge origin/serverfix;如果是单线的历史分支不存在任何需要解决的分歧,只是简单的将HEAD指针前移,所以这种合并过程可以称为快进(Fast forward),而如果是历史分支是分叉的,会以当前分叉的两个分支作为两个祖先,创建新的提交对象;如果在合并分支时,遇到合并冲突需要人工解决后,再才能提交;
11.在远程分支的基础上创建新的本地分支:git checkout -b <branch-name> <remote-name>/<branch-name>,如git checkout -b serverfix origin/serverfix;
12.从远程分支checkout出来的本地分支,称之为跟踪分支。在跟踪分支上向远程分支上推送内容:git push。该命令会自动判断应该向远程仓库中的哪个分支推送数据;在跟踪分支上合并远程分支:git pull;
13.将一个分支里提交的改变移到基底分支上重放一遍:git rebase <rebase-branch> <branch-name>,如git rebase master server,将特性分支server提交的改变在基底分支master上重演一遍;使用rebase操作最大的好处是像在单个分支上操作的,提交的修改历史也是一根线;如果想把基于一个特性分支上的另一个特性分支变基到其他分支上,可以使用--onto操作:git rebase --onto <rebase-branch> <feature branch> <sub-feature-branch>,如git rebase --onto master server client;使用rebase操作应该遵循的原则是:一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行rebase操作;

忽略文件.gitignore

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。如下例:

# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt

查看历史命令

$ histroy
该命令可以按顺序查看你之前输入过的所有的git命令

完整创建一个仓库的流程

cd mall-client
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/onewj830/mall-client.git
git push -u origin master

最常用的Git命令

git init        \\初始化
git add .       \\添加到缓存区
git commit      \\提交到本地仓库
git push        \\复制到远端仓库
git clone <url> \\克隆库
git status      \\查看当前状态
history         \\查看历史命令
git branch <branch-name>    \\创建分支
git branch -d <branch-name> \\删除分支

结语

在学习中总结,也有很多不足的地方,总结不是很到位,望指出。

记得很早开始开始接触的时候,也是很懵,看着一堆英文的界面啥也不懂,虽然我看的懂部分英文解释说明,但是对这个系统的工作流程与工作方式是一知半解的,分布式版本控制系统我觉得有时候也像是区块链的思想,我感觉我很有动力去学这些东西,特别是写自己的博客,我觉得很开心,甚至再探索的时候时间不知不觉就来到了凌晨,我非要解决了眼下这个问题才肯休息……从入门到现在,一点心得就是,初学不需明白那些非常高深的理论知识,只要知道git是个版本控制器就行,知道怎么创建仓库,怎么利用别人的仓库的开源项目提升自己,和SVN的区别也不需特别的去理会,一边学习一边应用,效率才是最高的。使用过,才知道他是个什么,以前那些原理也就恍然大悟了,可以举一反三!即初学少研究,多实践,最后事倍功半!

你可能感兴趣的:(git,github,开发工具,开发语言)