精通Git开发!Git核心功能使用详解

Git是什么?Git是一个分布式版本管理控制系统,它的本质是对文件内容的追踪,基本单元是版本库,我们常说的版本仓库其实就是一个文件目录,我们每次提供都会产生一个快照。
下面我们先来理解一下几个核心的概念:

  • 版本库:一个文件目录,下面可以创建其它文件或目录,这里就是我们工作的地方。比如实际开发中,这个版本库可以对应我们的项目根目录。
  • 提交(commit):一个快照,就是用相机拍下来的一瞬间所记录的内容。这里指的是在本次开发中,我们对文件的增删改,即为一个提交记录,一个版本记录。
  • 暂存区:暂存区就好比你在生产一个个杯子,做好就放在架子上,这个架子就是暂存区。在git中暂存区保存文件的一个副本,你可以在.git/objects中查看到。
  • 本地仓库:类似于库存,就是上面你生产好杯子后,这些杯子从架子上拿去存在本地库房里,等着销售。
  • 远程仓库:和本地仓库类似,不过是远程的,你可以当github或gitee为一个git远程仓库。
  • 分支:如何解释分支呢?就是你的工作时间线,还是上面生成杯子的例子,假如你一天24小时都在生产,每1分钟生产一个,每生成60个就放到架子上(添加到暂存区),等别人拉去库房(提交到本地仓库),现在记录一次你的生产情况(提交记录)。重复类似的操作,一段时间下来,这段时间加上你的生产情况(提交记录)称为一个分支。
多个分支,是指有多个人和你一样在生产杯子或者维修杯子,每个分支所执行的任务也不尽相同。实际开发中,我们可能有master主分支,dev开发分支,prod分支,或者也有临时的错误修复分支等。

初始化配置
git —— git bash #git命令行
git config – global user.name “ ” #设置用户名
git config — global user.email “ ” #设置用户邮箱

创建git版本库
1、创建目录,创建一个新的文件目录:mkdir doc; cd doc; (pwd)
2、创建版本仓库,将新目录转为git版本仓库:git init

将文件添加到git版本库
1、添加文件到git版本库:git add [doc1, doc2, … ],git add . 添加当前目录及其子目录所有文件,git add – all添加仓库中的所有文件
2、将整个版本库提交:git commit -m “message”
【精通Git开发!Git核心功能使用详解】
常规操作
1、更新git版本库中的的文件内容
2、git status:查看当前仓库的状态,“changes not staged for commit”文件已经修改,但是修改未提交
3、git diff doc:查看当前已更新文件和已经提交版本的对比,对比更新情况

版本回退
1、查看历史版本:git log – pretty=oneline
2、git reset – hard head^,回退到上一个版本;git reset – hard head^^,回退到上上一个版本。git reset – hard {version code},指定版本号回退,{version code}可取前7位
3、git reflog:查看历史版本更改记录(提交版本、修改版本等),可以获取到版本号

基本概念
1、工作区:{doc},git目录主要内容,原始文件内容在这里进行修改更新
2、git版本仓库:.git文件夹为版本仓库,版本仓库包括cached暂存区和head主分支(master)
3、暂存区:主要暂时保存已修改的版本文件,git add将已更新的文件添加到暂存区
4、head主分支(master版本库):版本仓库核心,git commit将暂存区中的文件修改添加到版本库

修改对比different
1:工作区和暂存区对比:git diff
2:工作区和版本库对比:git diff head
3:暂存区和版本库对比:git diff – cached

修改撤销
1、从暂存区中撤销到工作区:git checkout — file,将暂存区中的修改覆盖工作区
2、从版本库中撤销到暂存区:git reset head file,将版本库中的内容覆盖暂存区
3、从版本库中撤销:git checkout head — file,将版本库中的内容覆盖暂存区和工作区中的内容

删除文件
1、手动删除工作区文件:rm {file}
2、从版本库中删除:git rm {file},git commit -m “ ” ,先删除再提交
3、恢复文件使用git checkout

git远程服务器版本仓库
git远程中心仓库,每个人从服务器仓库中克隆一份,各自修改完提交到服务器版本仓库,再获取别人的提交。github提供免费远程git仓库服务,免费的git仓库内容是公开的,仅供自己修改。
github的使用:
github推送:将项目推送到远程库
1、创建ssh安全密钥:ssh-keygen -t rsa -C “ youremail@example.com”
创建完成后在当前用户目录下.ssh文件夹中找到
2、私钥:id_rsa,公钥:id_rsa.pub,在github SSH keys中添加公钥
3、在github上创建一个仓库
4、向github关联已存在的仓库并推送:
(origin:github远程库默认名称,将本地库与github远程库关联起来)
git remote add origin {git@github.com:Tutio/htmlpro.git,项目地址} git push -u origin master(首次推送master分支使用-u,以后可以不用)
git克隆:将项目从远程库克隆到本地
1、git clone {git@github.com:Tutio/htmlpro.git,项目地址}
github版本回退:
1、git reset – hard {version code}
2、git push -u -f origin master


分支管理
head指向当前工作分支,当前主分支master指向当前分支的最新提交点,每git cmmit一次提交点前进一步。当创建新分支dev,新分支默认指向master相同的提交点,将head指向dev分支作为工作分支,当工作完成之后可以将dev和master分支进行合并,head重新指向master,完成后可以删除dev分支。
— 查看git仓库所有分支:git branch,*表示指向当前工作分支
1、创建分支:git branch dev
2、切换分支:git checkout dev
{联合命令,创建并切换到新分支,添加-b参数:git checkout -b dev}
3、合并到当前分支:git merge dev【在当前master分支上将dev分支合并到当前master分支】
{将master分支移动到dev分支提交点}
4、删除分支:git branch -d dev

分支合并冲突
— 强制删除一个未合并的分支:git branch -D {name}
— 查看分支合并图:git log – graph
— < < < < ==== > > > > 标出不同分支的内容
— 冲突分支合并需要解决冲突,统一内容后add,commit即可合并

分支合并管理
普通合并模式为fast forward,合并后不产生任何记录。若禁用fast forward模式,则可以在master分支上产生一个合并提交记录
— git merge – no-ff -m “ message” dev

保存工作现场
当需要切换到其它分支进行操作时,需要将当前分支的工作现场进行储藏,当其它分支的工作完成后,再回到当前分支进行恢复现场继续工作
— 保存工作现场:git stash
— 查看已保存的工作现场:git stash list
— 恢复工作现场:git stash apply stash@{code}
— 删除工作现场:git stash drop stash@{code}
— 恢复并删除工作现场:git stash pop

远程库管理
github远程仓库主分支默认名称为origin
— 查看远程库信息:git remote -v
— 删除已关联的远程库分支:git remote rm origin
— 推送分支到远程库:git push origin master【git push {远程分支} {本地分支}】
— 本地创建和远程对应的分支(若本地没有dev分支):git checkout -b dev origin/dev
— 拉取最新提交(当前在哪个分支就拉取哪个分支的提交):git pull


标签管理
标签跟提交点的作用一样,但是更形象,可以指定版本号
1、在当前提交点创建标签:git tag {tag name}
2、在指定提交点创建标签:git tag {tag name} {commit id}
3、创建带有说明的标签:git tag -a {tag name} -m “message” {commit id}
4、查看所有标签:git tag
5、查看指定标签:git show {tag name}

操作标签
— 推送一个标签到远程库:git push origin v1.0
— 推送所有未推送的:git push origin – tags
— 删除一个标签:git tag -d {tag name}
— 删除远程标签:git push origin :refs/tags/{tag name}


git开源合作管理
在git服务器创建一个仓库A,fork该项目到自己的账号下,使用git clone到本地就行修改编辑开发,完成后push到自己的远程仓库,最后pull request到仓库A,仓库A拥有者再确定是否接受修改


忽略特殊文件
若有部分文件出于某些原因不提交,则可以在仓库下添加.gitignore文件忽略提交,该文件的规则:https://github.com/github/gitignore

配置命令别名
git config – global alias.st status

以上是根据以前的Git笔记详解Git的核心功能使用,若有错误,欢迎指出。

    推荐阅读