一个很流行的版本控制系统Git学习笔记-创新互联

什么是Git  

在巢湖等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、网站设计 网站设计制作按需策划设计,公司网站建设,企业网站建设,品牌网站设计,网络营销推广,外贸网站建设,巢湖网站建设费用合理。

Git是一种非常流行的分布式版本控制系统,它和其他版本控制系统的主要差别在于Git只关心文件数据的整体是否发生变化,而大多数版本其他系统只关心文件内容的具体差异,这类系统(CVS,Subversion,Perforce,Bazaar 等等)

每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容

Git另一个比较好的地方在于绝大多数操作都可以在本地执行,而每个本地都可以从服务器获取一份完整的仓库代码

而且在没网时仍然可以修改和使用大部分命令,在方便时再跟服务器进行同步,这样可以更好的实现多人联合编程

另外个人感觉Git系统的强大在于它创建了一个个类似于快照的东西

记忆我们每一次的提交并且可以在未来的任何时候回到这里,对于大型项目的管理非常有效

最原始的版本控制是纯手工的版本控制:修改文件,保存文件副本。有时候偷懒省事,保存副本时命名比较随意

时间长了就不知道哪个是新的,哪个是老的了,即使知道新旧,可能也不知道每个版本是什么内容

相对上一版作了什么修改了,当几个版本过去后,很可能就是下面这个老土的样子了:

一个很流行的版本控制系统Git学习笔记

Git特点

分布式相比于集中式的大区别在于开发者可以提交到本地

每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库

直接记录快照,而非差异比较 : Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中

近乎所有操作都是本地执行 :在 Git 中的绝大多数操作都只需要访问本地文件和资源,不用连网

时刻保持数据完整性 :在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算

                                       并将此结果作为数据的唯一标识和索引

多数操作仅添加数据 :常用的 Git 操作大多仅仅是把数据添加到数据库

开发流程示意图:

一个很流行的版本控制系统Git学习笔记

1、基本概念

Stage:暂存区,缓存区

Repository:仓库(本地仓库).git目录

Remote:远程仓库

Track: 将一个新文件加入到git

Unstage:取消放入暂存区

Git存储原理

Git 保存的不是文件差异或者变化量,而只是一系列文件快照。

快照管理:(微型文件系统,文件指纹验证是否变化,不便的直接链接)

 一个很流行的版本控制系统Git学习笔记

三种区域

 一个很流行的版本控制系统Git学习笔记

所有数据存放在本地.git目录,可以直接拷贝。

2、基本操作

2.1、仓库创建

Git init

2.2、仓库复制

Git clone url

只会复制master下来

Git clone url dir

指定文件夹

git clone https://github.com/libgit2/libgit2 mylibgit

2.3、文件管理

2.3.1、添加文件到暂存区

Git add *

Git add file

Git add dir

2.3.2、删除文件到暂存区

Git rm

2.3.3、修改文件名(移动)到暂存区

Git mv [file-orgin] [file-rename]

2.3.4、提交暂存区到仓库

Git commit –m “注释”

 一个很流行的版本控制系统Git学习笔记

2.3.5、撤销修改文件

修改的文件可以在git status观察到

如果撤销修改

可以采用git checkout -- file的方式撤销

撤销所有

git checkout -- *

2.3.6       撤销暂存区数据

一个很流行的版本控制系统Git学习笔记

2.4、分支管理

查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

合并某分支到当前分支:git merge

默认使用fast-forward模式

一个很流行的版本控制系统Git学习笔记

可以禁用,合并时会生成一个新的commit

git merge --no-ff -m "merge " dev

删除分支:git branch -d

 一个很流行的版本控制系统Git学习笔记

远程分支下载:git checkout -b <本地分支名> origin/<远程分支名>

 合并冲突:

 当merge出现冲突的时候,git会提醒

一个很流行的版本控制系统Git学习笔记

需要手动修改后进行提交

Git add

Git commit

2.5、版本管理

每个提交都是一个版本,git提供了一些方便的命令供我们使用。

2.5.1、查看日志

Git log

当前分支的commit历史

有用的配置

log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

一个很流行的版本控制系统Git学习笔记

Git reflog

显示引用变化历史,相当于head变化

一个很流行的版本控制系统Git学习笔记

2.5.2、版本回退:

一个git reset --hard HEAD^

俩git reset --hard HEAD^^

多个git reset --hard HEAD~数字

回退到指定版本

git reset --hard commit_id

commitid可以从reflog或者log中查看

--hard表示丢弃暂存区的东西

--soft – 暂存区和工作目录都不会被改变,改变都放在暂存区

--mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响,改变不会放在暂存区。

--hard – 缓存区和工作目录都同步到你指定的提交

Git revert

reset是指将当前head的内容重置,不会留任何痕迹。

revert是撤销某一次提交,但是这次撤销也会作为一次提交进行保存

假设当前有3个commit,git log如下:

commit3: add test3.c

commit2: add test2.c

commit1: add test1.c

执行 git revert HEAD~1之后,会提示提交信息,提交后git log如下:

commit4: Reverts “test2.c”

commit3: test3.c

commit2: test2.c

commit1: test1.c

执行完后,test2.c被删除了,运行git status,无任何变化。

执行 git reset HEAD~1之后,再次看git log,如下:

commit2: test2.c

commit1: test1.c

执行完后,commit3被删除了

但是test3.c还在本地缓存区,运行git status,可以看见提示test3.c可以用git add包含该文件。

若执行git reset --soft HEAD~1,log为:

commit2: test2.c

commit1: test1.c

执行完后,test3.c也被删除了,查看git status,提示可以commit以提交test3.c,test3.c在暂存区。

若执行git reset --hard HEAD~1,log为:

commit2: test2.c

commit1: test1.c

执行完后,test3.c也被删除了,查看git status,无任何变化。

2.6、标签管理

2.6.1、打标签

相当于给某个提交取一个好记住的名字,例如v1.0.0

git tag v1.0.0 [commitid]

2.6.2、显示所有标签

git tag

2.6.3、显示标签信息

Git show tagname

2.6.4、标签管理

命令git push origin 可以推送一个本地标签;

命令git push origin --tags可以推送全部未推送过的本地标签;

命令git tag -d 可以删除一个本地标签;

命令git push origin :refs/tags/可以删除一个远程标签。

2.7、远程管理

一般都要和两部分人提供

2.7.1、git clone

从远程主机克隆一个版本库

git clone <版本库的网址> <本地目录名>

 一个很流行的版本控制系统Git学习笔记

2.7.2、git remote

为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

列出所有主机:git remote

带网址列出主机:git remote –v

clone版本库的时候,所使用的远程主机自动被Git命名为origin

如果想用其他的主机名,需要用git clone命令的-o选项指定。

git clone -o jQuery https://github.com/jquery/jquery.git

git remote show命令加上主机名,可以查看该主机的详细信息。

 git remote show <主机名>

git remote add命令用于添加远程主机。

 git remote add <主机名> <网址>

git remote rm命令用于删除远程主机。

 git remote rm <主机名>

git remote rename命令用于远程主机的改名。

 git remote rename <原主机名> <新主机名>

2.7.3、git fetch

将某个远程主机的更新,全部取回本地。

如果只想取回特定分支的更新,可以指定分支名。

git fetch <远程主机名> <分支名>

所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取

比如origin主机的master,就要用origin/master读取。

git branch  –r,可以用来查看远程分支,

-a选项查看所有分支。

 可以采用git checkout <远程主机名>/ <分支名>切换到该分支

但是一般用git checkout -b newBrach <远程主机名>/ <分支名>

意思是在<远程主机名>/ <分支名>的基础上,创建一个新分支。

也可以使用merge,合并远程分支。

2.7.4、git pull

取回远程主机某个分支的更新,再与本地的指定分支合并。

git pull <远程主机名> <远程分支名>:<本地分支名>

等同于先做git fetch,再做git merge

2.7.5、git push

命令用于将本地分支的更新,推送到远程主机。

git push <远程主机名>  <本地分支名>:<远程分支名>

省略远程分支名,表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名)

如果该远程分支不存在,则会被新建。省略本地分支名,则表示删除指定的远程分支

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

如果本地版本低,那么会报错,可以--force强制push,--tags表示也推送tags.

git push --force origin

2.7.6、将本地库推到远程端

git push origin master

2.8、自定义Git

2.8.1、自定义命令

可以利用git config命令来给命令取别名。

例如

git config --global alias.co csheckout

git config --global alias.ci commit

git config --global alias.br branch

git config --global alias.unstage 'reset HEAD'

其中,global表示针对当前用户所有仓库都起作用

如果不加,表示只对当前仓库有用,每个仓库的Git配置文件都放在.git/config文件中:

当前用户的config存放在用户主目录下的一个隐藏文件.gitconfig中:

2.8.2、忽略文件

为了防止没用的文件被提醒untracked,可以在git仓库主目录下添加.gitignore文件

(本身要放到版本库里面),该文件可以配置git要忽略哪些文件,不添加到仓库中。

一个很流行的版本控制系统Git学习笔记

如果发现不能添加文件,可以采用

git check-ignore -v file检查被哪个规则忽略了

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页题目:一个很流行的版本控制系统Git学习笔记-创新互联
地址分享:http://ybzwz.com/article/jdicd.html