关于Git版本控制功能

Git的由来

Git是由创建了Linux系统的Linus用C语言编写的一个分布式版本控制系统。我们所用的Github中的开源项目就是通过Git存储管理。

Git的基本使用

1.创建版本库

首先通过git init把一个目录变成Git可以管理的版本库(又名仓库,英文名repository),在这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

2.把文件添加到版本库

第一步,将需添加的文件放入我们创建的Git仓库内,用git add (文件名)将文件添加到仓库。也可以用git add .,这个命令表示的是将当前目录下修改的所有文件添加到仓库。

第二步,用git commit -m " ",将文件提交到仓库。-m后面双引号内是对本次提交的说明,这样就方便我们从历史记录里找到改动记录。git commit命令执行成功会提示我们文件改动的数量,以及内容的变化(提示行数的变化,比如插入一行等)。

3.查看版本改变历史记录以及回退

git log命令显示从最近到最远的提交日志。

git reset --hard HEAD^命令可以回退到上一个版本。git reset --hard 版本号 可以指定回到某个版本。

cat 文件名 命令可以查看文件内容。

还可以通过git reflog来查看之前的每个命令,可以防止回退版本后想恢复到新版本却无法实现。

4.撤销修改

git checkout -- file可以丢弃工作区的修改,即将file文件在工作去的修改全部撤销。但这里是有两种情况。

一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

以上是还没add到暂存区时撤销修改的方法。

如果已经git add了,可以用git reset HEAD file把暂存区的修改撤销掉。(git reset既可以回退版本,也可以把暂存区的修改回退到工作区。)然后再按照丢弃工作区修改的方法操作。

还有一种修改是在commit到版本库后,不小心把该文件删除了,想要恢复文件。

此时可以通过git checkout -- file 来恢复到最新版本,因为此时版本库里还有该文件,这个命令实际上就是用版本库里的版本替换工作区的版本。

5.添加远程库

如果已有本地库,又已经在github创建了远程库,就在本地仓库下运行命令:

git remote add origin git@github.com:<你的github账户名>/<本地仓库名>.git

这样添加后,远程库的名字就是origin,也可自己改。

也可以直接用git clone命令克隆一个本地库。

git clone git@github.com:<你的github账户名>/<本地仓库名>.git。当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。

如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。

6.本地库推送内容到远程库

git push命令,将当前分支master推送到远程。

使用git push -u origin master 可以把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。之后就可以使用git push origin master 推送最新修改。

Git中基本概念

workspace(工作区):就是我们电脑里的目录。

staging(暂存区):我们使用git add命令,就会将工作区内的文件添加到暂存区。隔离工作区和Git仓库。

Local repository(本地仓库):我们使用git commit命令将暂存区的所有内容提交到当前分支。在版本库内,有唯一一个master分支,git commit就是在master分支上提交更改。我们也可以创建别的分支进行操作和合并。

Remote repository(远程仓库):使用git push命令将本地仓库当前分支master推送到远程仓库的master分支上。

 

在Git中,每次提交,都会与之前的提交连接在一起,如果没有产生别的分支,那这多次提交产生的线就被成为主分支,即master分支。master指向当前提交的,HEAD指向master,所以也可以说HEAD指向当前的分支。

当创建新的分支,即增加一个新的指针比如dev指针指向当前master的提交,让HEAD指向dev指针,这个时候就表示当前分支在dev分支上。

在Git中合并分支时,如果dev分支进行了提交,master上没有,那么合并时,让master指向dev当前提交,让HEAD指向master,合并就完成了。

但如果dev和master都分别有了新的提交,那在合并时就可能会产生冲突,就需要手动解决冲突后再提交。

在分支时,可以有多个commit指向同一个父亲,但在合并时,只能两个两个进行合并。

在Git中存储的是变化。如果文件未发生变化,则后续多个版本始终指向同一个文件。文件如果变化了,存储两份不同的文件,两个版本指向不同的文件。

要注意在远程仓库多人协作项目,例如在GitHub上,如果多人同时对一个项目进行修改和提交,你的伙伴在你之前推送了他的提交,你就需要先用git pull把最新的提交抓下来,在本地合并后,再推送上去,这么做是因为你直接推送的提交与GitHub上的最新提交有冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值