git使用基础
版本控制在实际开发中扮演着举足轻重的作用,做为日常中我们经常接触到的版本控制的工具:SVN和Git的应用应该是每个程序员所必备的技巧。
简单的理解,其作用是:在开发的过程中,确保由不同人所编辑的同一档案都得到更新(增、删、改、查)。
一. SVN介绍
SVN(Subversion,又称为“时间机器”),是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
集中式版本控制系统
集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明:
开始新一天的工作:
- 从服务器下载项目组最新代码;
- 进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了);
- 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器;
缺点:
- 服务器压力太大,数据库容量暴增;
- 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等;
- 不适合开源开发(开发人数非常非常多)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
优点:
- 管理方便,逻辑明确,符合一般人思维习惯;
- 易于管理,集中式服务器更能保证安全性;
- 代码一致性非常高;
- 适合开发人数不多的项目开发;
- 大部分软件配置管理的大学教材都是使用svn和vss.
二. git介绍
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
分布式版本控制系统:
Git的功能特性:
从一般开发者的角度来看,git有以下功能:
- 从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
- 在自己的机器上根据不同的开发目的,创建分支,修改代码。
- 在单机上自己创建的分支上提交代码。
- 在单机上合并分支。
- 把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
- 生成补丁(patch),把补丁发送给主开发者。
- 看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
- 一般开发者之间解决冲突的方法,开发者之间可以使用pull命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
- 查看邮件或者通过其它方式查看一般开发者的提交状态。
- 打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
- 向公共服务器提交结果,然后通知所有开发人员。
优点:
- 适合分布式开发,强调个体。
- 公共服务器压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 离线工作。
缺点:
- 学习周期相对而言比较长。
- 不符合常规思维。
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
三. git理论基础
3.1 Git的交互过程图
再看一个图:
3.2 重要理论思想:
对于任何一个文件,在Git内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。
- 已提交表示该文件已经被安全地保存在本地数据库中了;
- 已修改表示修改了某个文件,但还没有提交保存;
- 已暂存表示把已修改的文件放在下次提交时要保存的清单中。
用Git 管理项目时,文件流转的三个工作区域:
- Git的工作目录;
- 暂存区域;
- 本地仓库。
从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从Git目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。所谓的暂存区域只不过是个简单的文件,一般都放在Git目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。
基本的Git工作流程如下:
- 在工作目录中修改某些文件;
- 对修改后的文件进行快照,然后保存到暂存区域;
- 提交更新,将保存在暂存区域的文件快照永久转储到Git目录中;
所以,我们可以从文件所处的位置来判断状态:
- 如果是Git目录中保存着的特定版本文件,就属于已提交状态;
- 如果作了修改并已放入暂存区域,就属于已暂存状态;
- 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。
基本概念:
- 工作区(Working Directory):就是你在电脑里能看到的目录,比如电脑中的learngit文件夹就是一个工作区;
- 版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库;
- Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
3.3 git、GitHub和gitlab
Github和Git是两回事。
- Git是版本控制系统
- Github是在线的基于Git的代码托管服务。
GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目Ruby on Rails、jQuery、python等。GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,但是付费账户也可以创建私有的代码仓库。地址:https://github.com/
- gitlab是一个基于git实现的在线代码仓库软件,你可以用gitlab自己搭建一个类似于github一样的系统,一般用于在企业、学校等内部网络搭建git私服。
四. git安装
git官网:https://git-scm.com/
[root@localhost ~]# yum install git -y
[root@localhost ~]# git --version
git version 1.8.3.1
也可以选择编译安装最新版本:
Git下载地址:https://github.com/git/git/releases
##安装依赖关系
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
##编译安装
tar -zxf git-2.0.0.tar.gz
cd git-2.0.0
make configure
./configure
make
make install
五. 使用git
5.1 初次运行Git前的配置
一般在新的系统上,我们都需要先配置下自己的Git工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修改已有的配置。
Git 提供了一个叫做 git config的工具(译注:实际是git-config命令,只不过可以通过git加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了Git在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
- /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用git config时用–system选项,读写的就是这个文件。
- ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用–global选项,读写的就是这个文件。
- 当前项目的Git目录中的配置文件(也就是工作目录中的.git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖/etc/gitconfig中的同名变量。
在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 USER。此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。
5.2 用户信息:
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
[root@localhost ~]# git config --global user.name "legolas999" #配置使用git用户
[root@localhost ~]# git config --global user.email "lqr888888@aliyun.com" #配置git使用邮箱
[root@localhost ~]# git config --global color.ui true #语法高亮
[root@localhost ~]# git config --list #查看全局配置
user.name=legolas999
user.email=lqr888888@aliyun.com
color.ui=true
[root@localhost ~]# cat .gitconfig #查看生成的配置文件
[user]
name = legolas999
email = lqr888888@aliyun.com
[color]
ui = true
[root@localhost ~]# git help config 获取config命令的帮助
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
5.3 创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
[root@localhost ~]# mkdir -p /work/project #创建一个目录
[root@localhost ~]# cd /work/project/
[root@localhost project]# git init #初始化仓库
Initialized empty Git repository in /work/project/.git/
[root@localhost project]# git status #查看工作区状态
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件、网页、所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,如果要真正使用版本控制系统,就要以纯文本方式编写文件。也不要使用Windows的记事本编写,在Windows下可以使用Notepad代替记事本,记得把Notepad的默认编码设置为UTF-8 without BOM即可。
5.4 添加文件及文件操作:
在当前目录先创建一个文件,内容如下:
[root@localhost project]# cat README
Git is a version control system.
Git is free software.
##查看状态
[root@git project]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# README
nothing added to commit but untracked files present (use "git add" to track)
可以看到,有未追踪的文件README,并没有添加和提交,将文件添加到staging area中转区域。
[root@git project]# git add README
[root@git project]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README
#
##文件会被添加到.git目录
[root@git project]# tree -C .git/
.git/
|-- HEAD
|-- branches
|-- config
|-- description
|-- hooks
| |-- applypatch-msg.sample
| |-- commit-msg.sample
| |-- post-update.sample
| |-- pre-applypatch.sample
| |-- pre-commit.sample
| |-- pre-push.sample
| |-- pre-rebase.sample
| |-- prepare-commit-msg.sample
| `-- update.sample
|-- index
|-- info
| `-- exclude
|-- objects
| |-- 46 #添加的文件
| | `-- d49bfabb79a25385fb8f46a0953c22ad2cd6a2
| |-- info
| `-- pack
`-- refs
|-- heads
`-- tags
10 directories, 15 files
从中转区域提交文件到本地仓库:
[root@git project]# git commit -m 'this is a readme file'
[master (root-commit) 26a897f] this is a readme file
1 file changed, 2 insertions(+)
create mode 100644 README
## -m参数后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
##查看状态
[root@git project]# git status
# On branch master
nothing to commit, working directory clean
[root@git project]# tree -C .git/objects/
.git/objects/
|-- 26
| `-- a897fb6a6e4469acb8ac343beb40579ce5fbee
|-- 46
| `-- d49bfabb79a25385fb8f46a0953c22ad2cd6a2
|-- 4f
| `-- 14d36d6802b1545310cb507f19c7ec0b25c1d5
|-- info
`-- pack
5 directories, 3 files
总结:
常规添加文件方法:
- git add * 添加到暂存区域
- git commit 提交git仓库
- -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看
- 简便方法:
- git commit -a -m “注释信息”
- -a :表示直接提交
修改文件README的内容如下:
[root@git project]# cat README
Git is distributed a version control system.
Git is free software.
###查看状态,会看到README文件已经修改
[root@git project]# git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README
#
no changes added to commit (use "git add" and/or "git commit -a")
##查看一下文件README都有哪些变化内容,即修改后的文件和本地仓库的文件有哪些不同。
##git diff 比较的是工作区和暂存中转区域之间的文件不同之处
[root@git project]# git diff README
diff --git a/README b/README
index 46d49bf..dd90832 100644
--- a/README
+++ b/README
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is distributed a version control system.
Git is free software.
##git diff --cached 比较的是暂存区域和本地仓库之间的文件内容不同之处
[root@git project]# git diff --cached
##提交修改到中转区域并查看:
[root@git project]# git add README
[root@git project]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README
#
##提交到本地仓库并查看状态:
[root@git project]# git commit -m "add distributed"
[master c2f7987] add distributed
1 file changed, 1 insertion(+), 1 deletion(-)
[root@git project]# git status
# On branch master
nothing to commit, working directory clean
再次修改文件内容,并直接提交到本地仓库
[root@git project]# cat README
Git is distributed a version control system.
Git is free software.
this is a modified test.
##直接提交
[root@git project]# git commit -a -m "modified test"
[master 0d7e702] modified test
1 file changed, 1 insertion(+)
[root@git project]# git status
# On branch master
nothing to commit, working directory clean
5.5 查看git历史纪录
[root@git project]# git log
commit 0d7e7026f7d169c8d51a76e6782b7fe3f7c51573
Author: legolas999 <lqr888888@aliyun.com>
Date: Sun Feb 23 20:39:09 2020 +0800
modified test
commit c2f798717bc2417b73a9d2e91a342c924145c223
Author: legolas999 <lqr888888@aliyun.com>
Date: Sun Feb 23 20:30:46 2020 +0800
add distributed
commit 26a897fb6a6e4469acb8ac343beb40579ce5fbee
Author: legolas999 <lqr888888@aliyun.com>
Date: Sun Feb 23 20:17:15 2020 +0800
this is a readme file
可以看到一共做了三次版本更新,可以简单输出一下结构:
##前面SHA字串代表的就是git的版本号
[root@git project]# git log --pretty=oneline
0d7e7026f7d169c8d51a76e6782b7fe3f7c51573 modified test
c2f798717bc2417b73a9d2e91a342c924145c223 add distributed
26a897fb6a6e4469acb8ac343beb40579ce5fbee this is a readme file
- git log :查看提交历史记录
- git log -2:查看最近2条记录
- git log -p -1:-p显示每次提交的内容差异,例如仅查看最近一次差异
- git log —stat -2:–stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息。
- git log —pretty=oneline:–pretty根据不同的格式展示提交的历史信息
- git log —pretty=fuller -2:以更详细的模式输出提交的历史记录
- git log —pretty=format:”%h %cn”:查看当前所有提交记录的简短SHA-1哈希子串与提交者的姓名
- 使用format参数来指定具体的输出格式:
5.6 还原历史数据
Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD,上上一个版本则会叫做HEAD^,当然一般会用HEAD~5来表示往上数第五个提交版本。
- git reset —hard hash #还原到某个版本
- git reset —hard HEAD^ #还原历史提交版本上一次
- git reset —hard 3de15d4 #找到历史还原点的SHA-1值后,就可以还原(值不写全,系统会自动匹配)
[root@git project]# cat README
Git is distributed a version control system.
Git is free software.
this is a modified test.
[root@git project]# git reset --hard HEAD^
HEAD is now at c2f7987 add distributed
[root@git project]# cat README
Git is distributed a version control system.
Git is free software.
如果后悔了,想撤销更改,但是git log已经找不到这个版本了。
[root@git project]# git log
commit c2f798717bc2417b73a9d2e91a342c924145c223
Author: legolas999 <lqr888888@aliyun.com>
Date: Sun Feb 23 20:30:46 2020 +0800
add distributed
commit 26a897fb6a6e4469acb8ac343beb40579ce5fbee
Author: legolas999 <lqr888888@aliyun.com>
Date: Sun Feb 23 20:17:15 2020 +0800
this is a readme file
这时候可以使用git reflog命令。
git reflog #查看未来历史更新点。
[root@git project]# git reflog
c2f7987 HEAD@{0}: reset: moving to HEAD^
0d7e702 HEAD@{1}: commit: modified test ##这是那个最新点
c2f7987 HEAD@{2}: commit: add distributed
26a897f HEAD@{3}: commit (initial): this is a readme file
[root@git project]# git reset --hard 0d7e702
HEAD is now at 0d7e702 modified test
[root@git project]# cat README
Git is distributed a version control system.
Git is free software.
this is a modified test.
##可以看到文件内容又回来了
5.7 标签使用
前面回滚使用的是一串字符串,又长又难记。
- git tag v1.0 :当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。
- git tag :查看当前所有的标签;
- git show v1.0 :查看当前1.0版本的详细信息;
- git tag v1.2 -m “version 1.2 release is test” :创建带有说明的标签,-a指定标签名字,-m指定说明文字;
- git tag -d v1.0 :为同一个提交版本设置了两次标签,删除之前的v1.0;
##将当前提交内容打上标签
[root@git project]# git tag 1.0
[root@git project]# git tag
1.0
##创建一个新文件,并提交
[root@git project]# cat README2
add a second file
[root@git project]# git add README2
[root@git project]# git commit -m "add new file"
[master 35515a6] add new file
1 file changed, 1 insertion(+)
create mode 100644 README2
##打上新版本标签
[root@git project]# git tag v1.2
[root@git project]# git tag
1.0
v1.2
##回到上一个版本
[root@git project]# git reset --hard 1.0
HEAD is now at 0d7e702 modified test
[root@git project]# ls
README
##再回到V1.2版本
[root@git project]# git reset --hard v1.2
HEAD is now at 35515a6 add new file
[root@git project]# ls
README README2
5.8 删除文件
先添加一个新文件test.txt到Git并且提交:
[root@git project]# echo "this is a test file" > test.txt
[root@git project]# git add test.txt
[root@git project]# git commit -m "new file test.txt"
[master b56d125] new file test.txt
1 file changed, 1 insertion(+)
create mode 100644 test.txt
一般情况,我们会直接通过系统命令删除文件:
[root@git project]# rm -f test.txt
但是Git知道你删除了文件,因此,工作区和版本库就不一致了。
[root@git project]# git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
[root@git project]# git rm test.txt
rm 'test.txt'
[root@git project]# git commit -m "delete test.txt"
[master e713f18] delete test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
[root@git project]# git status
# On branch master
nothing to commit, working directory clean
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
[root@git project]# git checkout -- test.txt
[root@git project]# ls
README README2 test.txt
5.9 Git常用命令
命令 | 命令说明 |
---|---|
add | 添加文件内容到暂存区域(索引) |
bisect | 通过二分查找定位引入bug的变更 |
branch | 列出、创建或删除分支 |
checkout | 检出一个分支或路径到工作区 |
clone | 克隆一个版本库到一个新目录 |
commit | 记录变更到版本库 |
diff | 显示提交之间、提交和工作区之间等的差异 |
fetch | 从另外一个版本库下载对象和引用 |
grep | 输出和模式匹配的行 |
init | 创建一个空的 |
log | 显示提交日志 |
merge | 合并两个或更多开发历史 |
mv | 移动或重命名一个文件、目录或符号链接 |
pull | 获取并合并另外的版本库或一个本地分支 |
push | 更新远程引用和相关的对象 |
rebase | 本地提交转移至更新后的上游分支中 |
reset | 重置当前HEAD到指定状态 |
rm | 从工作区和索引中删除文件 |
show | 显示各种类型的对象 |
status | 显示工作区状态 |
tag | 创建、列出、删除或校验一个GPG签名的tag对象 |
5.10 分支管理:
每次提交,Git都把提交串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:
每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长;当创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!
不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
分支管理常用命令:
- 查看分支:git branch
- 创建分支:git branch
- 切换分支:git checkout
- 创建+切换分支:git checkout -b
- 合并某分支到当前分支:git merge
- 删除分支:git branch -d
分支操作练习
##查看当前分支
[root@git project]# git branch
* master
##创建新分支linux
[root@git project]# git branch linux
[root@git project]# git branch
linux
* master
##切换到新分支linux
[root@git project]# git checkout linux
Switched to branch 'linux'
[root@git project]# git branch
* linux
master
##修改文件内容,添加并提交到Linux分支
[root@git project]# cat README
Git is distributed a version control system.
Git is free software.
this is a modified test.
[root@git project]# echo "creating a new branch is quick." >> README
[root@git project]# git add README
[root@git project]# git commit -m "branch test"
[linux 4ccb399] branch test
1 file changed, 1 insertion(+)
[root@git project]# cat README
Git is distributed a version control system.
Git is free software.
this is a modified test.
creating a new branch is quick.
##切换回master分区,发现新添加的文件内容没有了
[root@git project]# git checkout master
Switched to branch 'master'
[root@git project]# git branch
linux
* master
[root@git project]# cat README
Git is distributed a version control system.
Git is free software.
this is a modified test.
##并没有最新的提交版本内容:
[root@git project]# git log -1
commit b56d125b5350fc6f6385140c0783a7164b91e6bd
Author: legolas999 <lqr888888@aliyun.com>
Date: Sun Feb 23 21:25:45 2020 +0800
new file test.txt
##合并linux分支代码到当前分支,即master分支
[root@git project]# git merge linux
Updating b56d125..4ccb399
Fast-forward
README | 1 +
1 file changed, 1 insertion(+)
[root@git project]# git log -1
commit 4ccb399b651d65d260284c2a3a3488fdc6c50917
Author: legolas999 <lqr888888@aliyun.com>
Date: Sun Feb 23 22:10:07 2020 +0800
branch test
[root@git project]# git status
# On branch master
nothing to commit, working directory clean
[root@git project]# cat README
Git is distributed a version control system.
Git is free software.
this is a modified test.
creating a new branch is quick.