版本控制管理

本文详细介绍了Git和SVN的区别,包括它们的管理方式、工作流程和版本控制。内容涵盖Git的配置、文件状态、版本回退、分支管理以及如何与中央服务器交互。此外,还讲解了如何解决合并冲突和使用 stash 保存工作现场。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.本地管理

2.集中管理 :代表 SVN ,各种版本都放到中央控制PC上,只有server上才有vsersion database

3.分布式管理:代表 git 除了服务器外,自己的computer上的也保存了过去的版本,version database都有

GIT和SVN的区别

SCV:版本库是集中放在中央服务器的

GIT:版本库是各个机器上都有

下载GIT:

1.下载软件

windows,Linux,不同的位数

官网下载慢,寻找国内镜像地址。

2.先卸载再安装

Linux里安装git

GIT命令

git配置

配置环境

1.git config -l 查看配置

2.git config --global --list 用户名密码

必须要配

user.name=kuangshen

user.email=2343456@qq.com

配置方法

git config --global --list :用户配置,比如名字和email
git config --system --list :系统配置
git config --global user.name "kuangshang"
git config --global user.email r234354@qq.com

GIT基本理论

工作区域

1.本地有三个工作区域,工作目录(working directory),暂存区(stage/index),资源库(repository或GIT directory),如果在加上远程 git 仓库(remote directory)

 工作区:就是存放自己代码的地方,本地空间

暂存区:暂存区,本质上只是一个文件,用于临时存放你的改动,保存即将提交的文件列表信息

repo:仓库区:本地仓库,就是安全存放数据的地方,这里有你提交的所有版本的数据,其中head指向最新放入仓库的版本

remote:远程仓库,托管代码的服务器

工作流程

创建仓库 

创建本地仓库有两种方法:一种是创建全新的仓库,一种是克隆远程仓库

1.本地仓库搭建:自己先创建一个目录,这个目录就是准备放密码的,然后到这个目录下执行git init,创建完以后,可以看到项目目录里多出一个.git目录,关于版本等所有的信息都在这个目录里面

2.克隆远程仓库到本地

git clone url 

GIT文件操作

文件4种状态

1.untracked:没有被跟踪,git add, 状态变为staged

2.unmodify:文件已经入库,未修改,如果后边被修改就变成modified,如果使用git rm移出版本库,就变成untracked.

3.modified:已经修改,git add进入staged,git checkout放弃修改返回unmodify状态

4.staged:暂存状态,执行git commit就修改同步到库里,这是库里的文件和本地的文件变成一样的,文件变成unmodify状态 ,git reset head filename取消暂modified

忽略文件

可以用.gitignore文件

*.txt   #忽略所有.txt结尾的文件,这样的话上传就不会被选中

创建本地版本

创建一个新的文件a. txt

下面的两个步骤就创建了一个版本

用git add a.txt  

git add后面可以加多个文件git add a.txt b.txt

git commit -m "版本1",当前就在版本1

查看本地版本记录

git log

修改本地文件

修改创建的文件a.txt

在git commit -m "版本2“,这样默认只能提交已经在暂存区的的改动生成新的版本

git log就会出来两个版本记录了,当前是在版本2,HEAD也是默认指向了这个最新的版本

HEAD指向最新的版本,HEAD的前一个版本用HEAD^来表示,HEAD^^的前两个版本

HEAD~1表示前1个版本,HEAD~100表示前100个版本

版本回退

git reset --hard HEAD^就会回到版本1

git log就只能看到版本1了,这个时候head指向版本1了,但是版本2还在,并没有删除

如果想回到版本2

git reset --hard 版本2序列号,这个时候在git log,就能看到2个版本信息了,现在Head指向版本2

如果不知道版本2的序列号,通过命令git reflog查看操作记录,可以看到之前的版本记录,就能看到每个版本的序列号了。序列号一定是不一样,但是提交的说明信息可能是一样的

查看工作区

git status 会显示出untrack的part, unstaged(工作区)的part 以及changes to be committed(暂存区)的part

在untrack的part下面

git是不会跟踪这个文件了,也就是说改动,删除,也找不回来。

在unstaged的part下面会有

比如

modified: code.txt   意思是这个文件被改动过,但是没有staged.

执行git add code.txt之后

就会在changes to  be committed的下面

出现modified:code.txt,原来unstaged part下的modified:code.txt就没有了。

同一个文件可能同时在unstaged里,也在changes to be committed. git add了以后,又修改了,没有重新add,就会出现这个情况

撤销修改

1.两种情况

一种是在unstaged下面的,可以直接通过git checkout 这个文件

一种是已经在to bo commited下面了,就需要先从暂存区里拿出来放回到unstaged下面,执行git checkout

命令如下

git reset HEAD code.txt    作用取消stagged

然后git checkout code.txt

对比文件的不同

git diff  code.txt

删除文件

rm code.txt

git status, 在unstaged当中会有显示deleted:code.txt

如果git checkout code.txt的话,这个文件又会回来

如果要把删除的这个改动staged

可以两种

git add code.txt或者git rm code.txt

然后在to be commited下就会看到deleted:code.txt  在unstage下面就没有了。

如果撤销删除的动作和撤销已经修改的动作一样的

分支管理

1.主分支叫master,是master的时间线

2.HEAD严格来说先指向这个分支,分支在去找在这个分支上这个版本

3.比如HEAD->master->版本2

4.当创建新的分支dev,创建分支的动作就是多一个dev指针,让这个指针指向当前的这个版本,dev->版本1,此时master和dev都指向版本2

5.当切到dev之后,这个动作相当于把HEAD指向dev.  此时head->dev->版本2

6.然后再去修改commit什么的,就是在dev分支上生成新的版本

7.如果在分支上的工作已经做完了,要和master合并,那就是把master指向dev的当前提交,完成了合并。

8.合并以后,可以删除这个dev 分支,最后就剩下一个master

切换分支

git branch branchname:创建一个分支

git checkout -b branch, 创建并切换到这个分支

git branch -a 展示所有的分支,加*的是当前所在的分支

git branch -d 分支名,删除一个分支

分支上的修改

1. 修改johnmand.txt git add johnmand.txt

git commit =m "版本3"

commit以后,dev就会指向版本3,  此时master不会动,还是在版本2

这个时候git log可以看到版本3,版本2,版本1

2. 在切回到git checkout master以后,就是把head再指回到master

这个时候git log只能看到版本2,版本1

3.这个时候要合并dev,git merge dev,这个时候在git log就可以看到版本3

在这里使用了快速合并,fast-forward,就是把master原本指在版本2上面的,指到版本3

这个时候可以删除dev了,git branch -d dev,这个时候git branch就没有dev了

解决冲突

merge冲突产生的原因:在两个分支上都有新的提交,并且编辑了相同的文件

合并分支不是那么容易的

如果步骤2和步骤3当中添加一个步骤,在master上面也去修改johnmand.txt

提交一个版本叫版本4。再去执行步骤3,可能就会出现冲突,合并不了

提示会告诉你冲突的文件是什么,这个时候git status,会看到

没有合并的路径

双方修改的文件:code.txt

然后用vi code.txt就可以看到这个文件被修改了,手动解决以后

在用git add code.txt,然后git commit,进行一次新的提交,就解决了这个冲突

git log --graph --pretty=oneline可以看到分支的图。

这个时候删除分支,就是把dev这个指针拿走

不发生冲突的合并

通常,合并分支时,git会用fast forward模式,但是有些快速合并不能成而且合并时没有冲突,这个时候会合并并且做一次新的提交。

出现的情况,大家都有新的提交,但是修改的是不同的文件

这个时候就会出现上面的情况

这个时候执行git merge dev,就会出现一个让你填写-m的message内容,这个就是在提交一个新的版本。这个时候git log就会发现出现一个新的提交。

禁用fast-forward

为了保留分支上的提交信息

git merge --no-ff -m 'no fast-forward' dev

git log --graph --graph --pretty=oneline就可以做一次新的提交

保存现场

如果当前分支有改动但是又没有提交,但是现在马上要去另外一个分支解决问题,可以执行

git stash,这个时候git status,下面就干净了

这时候就可以切换到别的分区去工作,工作结束,可以在切回dev

然后用git stash list, 列出保存的现场

执行git stash pop就可以恢复保存的现场

分支的基本命令

git branch:查看分支

git branch name :创建分支

git checkout 分支名:切换分支

git checkout -b 分支名:创建并且切换

git merge branchname:合并分支

git branch -d:删除分支

中央服务器

clone和推送分支

1.可以自己搭建,也可以使用github

2.git clone加地址

就会在当前目录下出现一个文件夹

3.推送分支,

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

把本地的这个分支推送到远程主机的远程分支上,如果分支名相同,远程分支可以省略

,如果远程仓库里没有这个分支,就会创建这个分支,比如本地分支时dev,我在dev上开发,结束以后,git push origin dev,那就是推送我本地dev这个分支上的所有提交到与远程库。

g

这个git push Origin的作用就是把该分支上所有的本地提交推送到远程库。

4.让本地smart分支跟踪远程的smart分支:git branch --set-upstream-to=origin/smart smart

这里upstream-to代表上游分支,git status的时候,就会显示smart和上游分支相比的状态,是领先还是落后,还是一致。

5.如果已经写了set-upstream-to是smart。那么git push的时候就不需要写origin smart了

拉取分支

1.git pull origin smart,  把远程库里的smart上的代码下载并合并到本地所在的分支

git pull + 主机名 + 远程branch名:本地分支名

从这个主机上拉去远程branch与本地某个branch合并

如果就是合并当前分支,本地分支名可以不写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值