git版本控制系统

什么是git?

git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds(Linux开发者)为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

git可以解决哪些问题?

  • 代码丢失:在编程的过程中,我们习惯将代码保存在本地的磁盘中,但是当电脑系统出现问题,需要对系统进行重大修复时,磁盘中的代码就显得十分不安全容易丢失,所以git的开发者为我们解决了这个问题,我们可以将重要的代码等文件上传至远程服务器,等我们需要的时候,再从远程服务器下载至本地,这样不管本地的磁盘发生什么变化,数据也不会丢失。
  • 版本控制:在进行开发的过程中,代码的版本会不断发生变化,而当我们发现旧版本的某一个bug时,使用git就可以将代码轻松返回至某一个我们需要的版本进行调试,调试完成之后也可以轻易的返回当前的版本。
  • 多人协同开发:在开发大型项目时,经常需要多人合作来完成代码的编写,git可以通过建立分支的方式来合并多人写的代码。

git和github的区别:

在我刚开始接触git的时候,经常会将git与github混为一体,但是git并不是github:

  • git:版本控制工具。(git本质不依赖任何第三方网站,同类工具有:svn、hg、vsc …)
  • github:全球最大的开源代码社交网站。(同类网站:source forage ,Google code,gitlab,码云(国内),码市(国内))。

git基本操作:

  • git clone:将服务器上的项目下载到本地
    上传代码(三步)
  • git add [选项] <路径>:告诉git工具哪些文件是需要进行版本控制
    常用选项:
    git add -A .:表示将所有的已跟踪的文件的修改与删除和新增的未跟踪的文件都添加到暂存区。
    git add -u .:表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件,注意这些被删除的文件被加入到暂存区再被提交并推送到服务器的版本库之后这个文件就会从git系统中消失了。
    git add .:不加选项默认为将修改操作的文件和未跟踪新添加的文件添加到git系统的暂存区,注意不包括删除。
  • git commit [选项] [参数]:把代码的改动提交到版本控制中(提交到本地,而不是提交到服务器上)
    常用选项:
    git commit -m “message”:message代表提交信息。
    git commit .:输入该条命令会出现文件的提交信息,在第一行可以自行添加提交信息,用法与vim用法相同。
  • git push:将版本控制信息上传至远程服务器
    git push:将所在分支上传至服务器端。
    git push origin <分支名>:将分支名为<分支名>的分支上传至服务器端。
    如果只需要使用git来上传代码,只需要清楚上面这几条命令即可。

git进阶操作:

  • git pull:从服务器段拉取数据,同步本地仓库。
  • git diff:查看本地仓库的详细修改内容。
  • git status:查看哪些代码发生修改,不包含详细信息。
  • git log:查看修改的版本日志。
  • git checkout:切换分支。
  • git reflog:记录用户在git上的所有操作。

忽略文件.gitignore:

  • 在上传代码时,有时仓库内会产生一些不必要上传的文件,这时我们就可以将不必要上传的文件名添加至该文件内,在我们进行上传代码操作时,该文件内的所含的文件名所代表的文件就会被忽略。

版本回退:

先使用git log/reflog查找之前提交的版本信息(git log --pretty=oneline:每个版本占用一行输出)。

  • git reflog:记录git在本地的核心操作,来找git log所看不见的版本(第一列为版本号)。
  • git reset:git reset --hard 版本号(git log --pretty=oneline —>第一列为版本号)。

版本回退原理:Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向特定的version。
在这里插入图片描述
在这里插入图片描述

分支管理:

场景:假设有100个人同时维护一份代码,这个代码在服务器上只有一份,每个人都会把自己的改动提交到这台服务器的这一份代码上,当个人在进行开发时,基于服务器上的这一份代码,创建一个分支(对服务器上的代码拷贝一份),我们自己创建的分支称为开发分支(dev),而服务器上面的代码称为主线(master),当个人在进行开发时,将代码提交到自己的开发分支(dev)上,不会对主线(master)上的代码产生任何影响,直到个人完成模块的开发之后,再把开发分支(dev)与主线(master)合并。
相关操作

  • git branch [选项] [参数]:创建/查看/删除分支。
    git branch:查看当前有哪些分支。
    git branch <分支名>:创建一个名为<分支名>的分支。
    git branch -d <分支名>:删除分支名为<分支名>的分支(删除分支之前需确保该分支已经与主线(master)进行合并)。
    git branch -D <分支名>:强制删除一个未经过合并的分支。
  • git checkout [选项] <分支名>:切换/创建并切换分支。
    git checkout <分支名>:切换到分支名为<分支名>的分支下。
    git checkout -b <分支名>:创建名为<分支名>的分支并切换到该分支下。
  • git merge <分支名>:合并分支。
    首先要将分支切换到主线(master)下。
    git merge <分支名>:将名为<分支名>的分支与主线(master)合并。

分支合并会遇到的问题:合并冲突

合并冲突:同一个位置的代码,在不同位置都被进行了修改,此时尝试merge两个分支,就会产生冲突。
解决方法

  • 手动修改被修改的代码
  • git commit -a:强制提交。

通常在合并分支时,如果可能,git会用Fast forward模式,在这种模式之下,删除分支之后,会丢掉分支信息。如果要强制禁用(在merge时添加–no-ff选项)Fast forward模式,git就会在merge时生成一个新的commit,这样,从分支的历史上就可以看出分支信息。

临时保存

场景:当我们正再开发分支上进行开发时,此时在主线(master)上发现一个Bug需要立即处理,如果此时的dev分支是多人公用,我们就不能把自己未完成的代码提交上去,而要是直接切换到主线(master)就会出现切换失败的情况。
解决方案:

  • git stash:能够临时保存当前的修改内容,让我们即使去处理其他分支的情况。
  • git stash pop:当我们处理完其他分支的情况回到自己的分支时,使用git stash pop恢复我们的修改内容。

标签管理tag

当我们开发的项目需要发布版本时,可以使用标签来记录此时版本内的信息,当该版本出现bug时,我们就可以通过标签直接回退到当前版本的代码进行调试。
相关操作

  • 首先,切换到需要打标签的分支上,默认标签是打在最新提交的commit上的
  • git tag <版本名>:打标签。
    git tag:查看所有标签。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值